i40iw: pass hw_stats by reference rather than by value
authorColin Ian King <colin.king@canonical.com>
Mon, 28 Mar 2016 11:14:46 +0000 (12:14 +0100)
committerDoug Ledford <dledford@redhat.com>
Fri, 13 May 2016 23:39:34 +0000 (19:39 -0400)
passing hw_stats by value requires a 280 byte copy so instead
pass it by reference is much more efficient.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Chien Tin Tung <chien.tin.tung@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/i40iw/i40iw_virtchnl.c

index 4e1d7c665dc5d1e94eb5b8bfd8e0b852a70a99d6..3041003c94d2c53ed52beb93dca53440577ecfde 100644 (file)
@@ -254,7 +254,7 @@ static void vchnl_pf_send_get_hmc_fcn_resp(struct i40iw_sc_dev *dev,
 static void vchnl_pf_send_get_pe_stats_resp(struct i40iw_sc_dev *dev,
                                            u32 vf_id,
                                            struct i40iw_virtchnl_op_buf *vchnl_msg,
-                                           struct i40iw_dev_hw_stats hw_stats)
+                                           struct i40iw_dev_hw_stats *hw_stats)
 {
        enum i40iw_status_code ret_code;
        u8 resp_buffer[sizeof(struct i40iw_virtchnl_resp_buf) + sizeof(struct i40iw_dev_hw_stats) - 1];
@@ -264,7 +264,7 @@ static void vchnl_pf_send_get_pe_stats_resp(struct i40iw_sc_dev *dev,
        vchnl_msg_resp->iw_chnl_op_ctx = vchnl_msg->iw_chnl_op_ctx;
        vchnl_msg_resp->iw_chnl_buf_len = sizeof(resp_buffer);
        vchnl_msg_resp->iw_op_ret_code = I40IW_SUCCESS;
-       *((struct i40iw_dev_hw_stats *)vchnl_msg_resp->iw_chnl_buf) = hw_stats;
+       *((struct i40iw_dev_hw_stats *)vchnl_msg_resp->iw_chnl_buf) = *hw_stats;
        ret_code = dev->vchnl_if.vchnl_send(dev, vf_id, resp_buffer, sizeof(resp_buffer));
        if (ret_code)
                i40iw_debug(dev, I40IW_DEBUG_VIRT,
@@ -539,7 +539,7 @@ enum i40iw_status_code i40iw_vchnl_recv_pf(struct i40iw_sc_dev *dev,
                devstat->ops.iw_hw_stat_read_all(devstat, &devstat->hw_stats);
                spin_unlock_irqrestore(&dev->dev_pestat.stats_lock, flags);
                vf_dev->msg_count--;
-               vchnl_pf_send_get_pe_stats_resp(dev, vf_id, vchnl_msg, devstat->hw_stats);
+               vchnl_pf_send_get_pe_stats_resp(dev, vf_id, vchnl_msg, &devstat->hw_stats);
                break;
        default:
                i40iw_debug(dev, I40IW_DEBUG_VIRT,