> -----Original Message----- > From: Yigit, Ferruh > Sent: Wednesday, November 30, 2016 12:08 AM > To: Wu, Jingjing <jingjing.wu at intel.com>; dev at dpdk.org > Cc: Zhang, Helin <helin.zhang at intel.com> > Subject: Re: [dpdk-dev] [PATCH] net/i40evf: fix casting between structs > > On 11/27/2016 9:35 AM, Jingjing Wu wrote: > > Casting from structs which lay out data in typed members to structs > > which have flat memory buffers, will cause problems if the alignment > > of the former isn't as expected. > > This patch removes the casting between structs. > > > > Fixes: ae19955e7c86 ("i40evf: support reporting PF reset") > > Signed-off-by: Jingjing Wu <jingjing.wu at intel.com> > > --- > > drivers/net/i40e/i40e_ethdev_vf.c | 27 +++++++++++++++------------ > > 1 file changed, 15 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/net/i40e/i40e_ethdev_vf.c > > b/drivers/net/i40e/i40e_ethdev_vf.c > > index aa306d6..53d7c87 100644 > > --- a/drivers/net/i40e/i40e_ethdev_vf.c > > +++ b/drivers/net/i40e/i40e_ethdev_vf.c > > @@ -1336,8 +1336,9 @@ i40evf_handle_aq_msg(struct rte_eth_dev *dev) > > struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > > struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data- > >dev_private); > > struct i40e_arq_event_info info; > > - struct i40e_virtchnl_msg *v_msg; > > - uint16_t pending, opcode; > > + uint16_t pending, aq_opc; > > + enum i40e_virtchnl_ops msg_opc; > > + enum i40e_status_code msg_ret; > > int ret; > > > > info.buf_len = I40E_AQ_BUF_SZ; > > @@ -1346,7 +1347,6 @@ i40evf_handle_aq_msg(struct rte_eth_dev *dev) > > return; > > } > > info.msg_buf = vf->aq_resp; > > - v_msg = (struct i40e_virtchnl_msg *)&info.desc; > > > > pending = 1; > > while (pending) { > > @@ -1357,32 +1357,35 @@ i40evf_handle_aq_msg(struct rte_eth_dev *dev) > > "ret: %d", ret); > > break; > > } > > - opcode = rte_le_to_cpu_16(info.desc.opcode); > > - > > - switch (opcode) { > > + aq_opc = rte_le_to_cpu_16(info.desc.opcode); > > + msg_opc = (enum i40e_virtchnl_ops)rte_le_to_cpu_32( > > + info.desc.cookie_high); > > + msg_ret = (enum i40e_status_code)rte_le_to_cpu_32( > > + info.desc.cookie_low); > > What do you think commenting cookie_high is opcode and cookie_low is > return_value? > OK. Will add some comments.
> > + switch (aq_opc) { > > case i40e_aqc_opc_send_msg_to_vf: > > - if (v_msg->v_opcode == I40E_VIRTCHNL_OP_EVENT) > > + if (msg_opc == I40E_VIRTCHNL_OP_EVENT) > > /* process event*/ > > i40evf_handle_pf_event(dev, info.msg_buf, > > info.msg_len); > > else { > > /* read message and it's expected one */ > > - if (v_msg->v_opcode == vf->pend_cmd) { > > - vf->cmd_retval = v_msg->v_retval; > > + if (msg_opc == vf->pend_cmd) { > > + vf->cmd_retval = msg_ret; > > /* prevent compiler reordering */ > > rte_compiler_barrier(); > > _clear_cmd(vf); > > } else > > PMD_DRV_LOG(ERR, "command > mismatch," > > "expect %u, get %u", > > - vf->pend_cmd, v_msg- > >v_opcode); > > + vf->pend_cmd, msg_ret); > > s/msg_ret/msg_opc/ ? Yes, should use msg_opc here. Thanks! Will update! Thanks Jingjing