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? > + 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/ ? > PMD_DRV_LOG(DEBUG, "adminq response is > received," > - " opcode = %d\n", v_msg->v_opcode); > + " opcode = %d\n", msg_ret); s/msg_ret/msg_opc/ ? > } > break; > default: > PMD_DRV_LOG(ERR, "Request %u is not supported yet", > - opcode); > + aq_opc); > break; > } > } >