Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp652128pxb; Tue, 2 Feb 2021 14:25:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJyh++8pG2d5fpsWs0RrlBsJMe79jH1C2OO1IrEHXXw9fy75ct00sbYLEcn5EgmtNGnUM/oZ X-Received: by 2002:a05:6402:1546:: with SMTP id p6mr279976edx.66.1612304715875; Tue, 02 Feb 2021 14:25:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612304715; cv=none; d=google.com; s=arc-20160816; b=YEcmugdvEaDqhOWa6W4j5wjod8H1WDgaJJl/pGEMZXkFfwT2WvDv5B+HdyaiHmNWq/ 4XuoMGKajHuHfuyTINCRR610g8QjmsrUlOqVQuaE00aXZ4PRNE/lgEgo6MAEGRMdEFwI INeYQmGuCO7WeBujp2XhAxA5Mj9YmPEtIT0gPn9FWyctesMZhYH+kyj2ZwOFGlKj0WRK 4dDHkuVrR5hEefhgM4qdZ7GWDCdddk9fxlIZNSJyKcDQrW33wkpZd12NJmMlCM+GQHc9 9bDz6te2u/pU596q+97cJruFZ+Rop+wDrrW1Z5gHrMYh7NCURZkRMj1jxxX22dBGJ2+W y/HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:dkim-signature:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from; bh=M0ljA581mxX3hbIGoVqf9HUH1rEYBlErQUTAsqopT/E=; b=PlZpFmE9ThAOGaYLPQyknIacGuLe+zkl52Cytcd2jnBHGn6gCVT6sMU+gGSChFu1lR V/lD6eZYXfhRkb51oCpwdMuwhyc/854HqmL3nS2isqPHCi8EnAuE0pnP3RPL/xkInEmJ PqSiNIfRv2ZP1KIz0afeQRZRjr9L66yq9VmZ7KVTpsPxSQ009RAkDqVcUaW4zA9mNib3 09reGyAv32PUwM8Dkmr8GRdfDQ0rW8JzVYUmA1NOCNJYvaLPeFV+BpbjBMHGkh683g+g sj9ijVFg2/5J4umyQ9Xhx5+EAsYJhDUy34vCUHc3HXcrhAkGK1/PXtZnHk6KFF5LZxkw AO3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=mYboifhZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p24si51185edw.475.2021.02.02.14.24.46; Tue, 02 Feb 2021 14:25:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=mYboifhZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234065AbhBBObl (ORCPT + 99 others); Tue, 2 Feb 2021 09:31:41 -0500 Received: from hqnvemgate26.nvidia.com ([216.228.121.65]:19769 "EHLO hqnvemgate26.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233662AbhBBOaC (ORCPT ); Tue, 2 Feb 2021 09:30:02 -0500 Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Tue, 02 Feb 2021 06:29:20 -0800 Received: from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 2 Feb 2021 14:29:19 +0000 Received: from vdi.nvidia.com (172.20.145.6) by mail.nvidia.com (172.20.187.10) with Microsoft SMTP Server id 15.0.1473.3 via Frontend Transport; Tue, 2 Feb 2021 14:29:18 +0000 From: Eli Cohen To: , , , , CC: Subject: [PATCH] vdpa/mlx5: Restore the hardware used index after change map Date: Tue, 2 Feb 2021 16:29:01 +0200 Message-ID: <20210202142901.7131-1-elic@nvidia.com> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1612276160; bh=M0ljA581mxX3hbIGoVqf9HUH1rEYBlErQUTAsqopT/E=; h=From:To:CC:Subject:Date:Message-ID:X-Mailer:MIME-Version: Content-Transfer-Encoding:Content-Type; b=mYboifhZrZ0LQY0pp1LyzAgx4DJm3SiP+l+84OOus/KeIqkF8Rx2C4czIU+DIwQCO Rye5ih4sOu5UqogUTCQkSo4uJbm6mZuHtcUCcLsGQqhiIh0cm0nXhBdBpEkB5qZc9P x3iWyKpPI7B6eLetWtEn1jSOgUPbHs8fYSOvePD6z1PTCpE0wlzXRf7nYYTUsdAvTH 5gNnWv3nH/h9zyl5mQhl8pVph92aEV0BKv9PYXxbx7+sas+pdqSRBzEsqDfQzqHUVJ L2ouqQMn1JYOR973mRGEOrsjgzGpzu6xG0lq1w0G3o/v1JhMyV+cWf8AAK/YvQPz4E DIfkMYAJ9xfJA== Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When a change of memory map occurs, the hardware resources are destroyed and then re-created again with the new memory map. In such case, we need to restore the hardware available and used indices. The driver failed to restore the used index which is added here. Fixes 1a86b377aa21 ("vdpa/mlx5: Add VDPA driver for supported mlx5 devices"= ) Signed-off-by: Eli Cohen --- This patch is being sent again a single patch the fixes hot memory addtion to a qemy process. drivers/vdpa/mlx5/net/mlx5_vnet.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index 88dde3455bfd..839f57c64a6f 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -87,6 +87,7 @@ struct mlx5_vq_restore_info { u64 device_addr; u64 driver_addr; u16 avail_index; + u16 used_index; bool ready; struct vdpa_callback cb; bool restore; @@ -121,6 +122,7 @@ struct mlx5_vdpa_virtqueue { u32 virtq_id; struct mlx5_vdpa_net *ndev; u16 avail_idx; + u16 used_idx; int fw_state; =20 /* keep last in the struct */ @@ -804,6 +806,7 @@ static int create_virtqueue(struct mlx5_vdpa_net *ndev,= struct mlx5_vdpa_virtque =20 obj_context =3D MLX5_ADDR_OF(create_virtio_net_q_in, in, obj_context); MLX5_SET(virtio_net_q_object, obj_context, hw_available_index, mvq->avail= _idx); + MLX5_SET(virtio_net_q_object, obj_context, hw_used_index, mvq->used_idx); MLX5_SET(virtio_net_q_object, obj_context, queue_feature_bit_mask_12_3, get_features_12_3(ndev->mvdev.actual_features)); vq_ctx =3D MLX5_ADDR_OF(virtio_net_q_object, obj_context, virtio_q_contex= t); @@ -1022,6 +1025,7 @@ static int connect_qps(struct mlx5_vdpa_net *ndev, st= ruct mlx5_vdpa_virtqueue *m struct mlx5_virtq_attr { u8 state; u16 available_index; + u16 used_index; }; =20 static int query_virtqueue(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_vi= rtqueue *mvq, @@ -1052,6 +1056,7 @@ static int query_virtqueue(struct mlx5_vdpa_net *ndev= , struct mlx5_vdpa_virtqueu memset(attr, 0, sizeof(*attr)); attr->state =3D MLX5_GET(virtio_net_q_object, obj_context, state); attr->available_index =3D MLX5_GET(virtio_net_q_object, obj_context, hw_a= vailable_index); + attr->used_index =3D MLX5_GET(virtio_net_q_object, obj_context, hw_used_i= ndex); kfree(out); return 0; =20 @@ -1610,6 +1615,7 @@ static int save_channel_info(struct mlx5_vdpa_net *nd= ev, struct mlx5_vdpa_virtqu return err; =20 ri->avail_index =3D attr.available_index; + ri->used_index =3D attr.used_index; ri->ready =3D mvq->ready; ri->num_ent =3D mvq->num_ent; ri->desc_addr =3D mvq->desc_addr; @@ -1654,6 +1660,7 @@ static void restore_channels_info(struct mlx5_vdpa_ne= t *ndev) continue; =20 mvq->avail_idx =3D ri->avail_index; + mvq->used_idx =3D ri->used_index; mvq->ready =3D ri->ready; mvq->num_ent =3D ri->num_ent; mvq->desc_addr =3D ri->desc_addr; --=20 2.29.2