On Thu, Mar 23, 2017 at 04:46:07PM +0000, Eads, Gage wrote: > Hi Jerin, Thanks Gage for the review.
> > I identified a few issues below. > > Thanks, > Gage > > <snip> > > > +static inline void > > +mbox_send_requeust(struct mbox *m, struct octeontx_mbox_hdr *hdr, > > + const void *txmsg, uint16_t txsize) > > "requeust" -> "request" Will fix the typos in v2 > > <snip> > > > + > > +static inline int > > +mbox_wait_response(struct mbox *m, struct octeontx_mbox_hdr *hdr, > > + void *rxmsg, uint16_t rxsize) > > +{ > > + int res = 0, wait; > > + uint16_t len; > > + struct mbox_ram_hdr rx_hdr; > > + uint64_t *ram_mbox_hdr = (uint64_t *)m->ram_mbox_base; > > + uint8_t *ram_mbox_msg = m->ram_mbox_base + sizeof(struct > > +mbox_ram_hdr); > > + > > + /* Wait for response */ > > + wait = MBOX_WAIT_TIME; > > + while (wait > 0) { > > + rte_delay_us(100); > > + rx_hdr.u64 = rte_read64(ram_mbox_hdr); > > + if (rx_hdr.chan_state == MBOX_CHAN_STATE_RES) > > + break; > > + wait -= 10; > > + } > > 'wait' is in units of milliseconds ("Mbox operation timeout in > milliseconds"), so the function subtracts 10 ms after spinning for 100 us. Is > that intentional? No. its unintentional. Thanks for pointing it out. I will fix it by #define MBOX_WAIT_TIME_SEC 3 wait = MBOX_WAIT_TIME_SEC * 1000 * 10; while (wait > 0) { rte_delay_us(100); wait -= 1; } > > > + > > + hdr->res_code = rx_hdr.res_code; > > + m->tag_own++; > > + > > + /* Tag mismatch */ > > + if (m->tag_own != rx_hdr.tag) { > > + res = -EBADR; > > + goto error; > > + } > > + > > + /* PF nacked the msg */ > > + if (rx_hdr.res_code != MBOX_RET_SUCCESS) { > > + res = -EBADMSG; > > + goto error; > > + } > > + > > + /* Timeout */ > > + if (wait <= 0) { > > + res = -ETIMEDOUT; > > + goto error; > > + } > > Will a timeout mean rx_hdr is invalid? If so, the timeout error should be > checked before checking for a PF nack or tag mismatch. rx_hdr is valid. But No harm in moving timeout to first. I will move the timeout to first as you suggested. > <snip> > > > +static inline int > > +mbox_send(struct mbox *m, struct octeontx_mbox_hdr *hdr, const void > > *txmsg, > > + uint16_t txsize, void *rxmsg, uint16_t rxsize) { > > + int res = -EINVAL; > > + > > + if (m->init_once == 0 || hdr == NULL || > > + txsize > MAX_RAM_MBOX_LEN || rxsize > > > MAX_RAM_MBOX_LEN) { > > + ssovf_log_err("Invalid init_once=%d hdr=%p txsz=%d rxsz=%d", > > + m->init_once, hdr, txsize, rxsize); > > + return res; > > + } > > + > > + rte_spinlock_lock(&m->lock); > > + > > + mbox_send_requeust(m, hdr, txmsg, txsize); > > "requeust" -> "request" >