Received: by 2002:a05:7412:b130:b0:e2:908c:2ebd with SMTP id az48csp2088507rdb; Mon, 20 Nov 2023 01:16:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IGYecBD5fQzUu8zAvwqgb7OV1mDY62vmlqXOLlHrrQs5jVNAiJN55BShLdH1dS4zps/DQeN X-Received: by 2002:a17:902:f68b:b0:1cf:690c:55e8 with SMTP id l11-20020a170902f68b00b001cf690c55e8mr58265plg.1.1700471801664; Mon, 20 Nov 2023 01:16:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700471801; cv=none; d=google.com; s=arc-20160816; b=W5ZIXD/A8aCPRv64DfeHPFGrsDwClp0iZtykpa5GJ+rqxYqNOZKzOlZJfgZnS6k9us /X/6fOq+ZDZRQICaodUs4wbiKZzFKBLsgv+UZGxZ1CD/W9E4yv+dxC2K0thq50NBZyJj l18EyBIhtFPJDnYluymskXmi8N7usqcYEewmhdTw+ALIFPK5Hxgrf41i2OmjJmbwrZLm t8jyvoiKwZUIGmU5oWnnPiQBOTdtfWdHQPzREjyNu2GCj7QkDiSefZAxgh6NPruXvJ06 cOEEJm0CjJSBvEl4cVrXwhlndckAY+oseFjOzG78FGAo+K9Hqxlde1q5OWx8FXN5u+mv QPDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=8zHUrr8J/nXMnxtkgzVgLKpPuazGe59hI0FfPAagoe8=; fh=X78uObPZhiX10ihKsH+3NsRndb5gmihRXvHkV0QhRv8=; b=RGnR0TOZ/AiCfNkEYpafuBkKT8bBneqAc9Dpfd25c5+xobqH+V2MJ3sViDywWNU6w5 PK9+xyIeAvRmHfht8WaSFNhPhZALLTeBZWuEuyzPDWLezHTHL8/vC3kahp53+WE/ze/8 owFqQ2E7Ne5KrvPKViGzuEwIU6GdZyFmJZVXZB5zNTbU/BjIS/+EPG6RaMktMGh6leU6 /RtYNBq21VQwWxJ32L5nRRwJMWYUQ5UVe3nmFdbnc4GnqTbxny/vJRcH9ovDXoAMAmdG o++g4XklRUwOorj+MxevGOwbyEu/1AZfXfSiRh9lbaC7s+ioeQE0KSUq7YxAvRuTS0kd 8lSw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id bi7-20020a170902bf0700b001cf5085cfe9si4895852plb.425.2023.11.20.01.16.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 01:16:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id EEFA8807E448; Mon, 20 Nov 2023 01:15:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232500AbjKTJPH (ORCPT + 99 others); Mon, 20 Nov 2023 04:15:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232444AbjKTJPG (ORCPT ); Mon, 20 Nov 2023 04:15:06 -0500 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52071B8; Mon, 20 Nov 2023 01:15:02 -0800 (PST) Received: from lhrpeml500005.china.huawei.com (unknown [172.18.147.207]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4SYhYB4rH6z6JBGD; Mon, 20 Nov 2023 17:10:06 +0800 (CST) Received: from A2006125610.china.huawei.com (10.202.227.178) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Mon, 20 Nov 2023 09:14:55 +0000 From: Shameer Kolothum To: , CC: , , , , , Subject: [PATCH] hisi_acc_vfio_pci: Update migration data pointer correctly on saving/resume Date: Mon, 20 Nov 2023 09:14:06 +0000 Message-ID: <20231120091406.780-1-shameerali.kolothum.thodi@huawei.com> X-Mailer: git-send-email 2.12.0.windows.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.202.227.178] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To lhrpeml500005.china.huawei.com (7.191.163.240) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 20 Nov 2023 01:15:25 -0800 (PST) When the optional PRE_COPY support was added to speed up the device compatibility check, it failed to update the saving/resuming data pointers based on the fd offset. This results in migration data corruption and when the device gets started on the destination the following error is reported in some cases, [ 478.907684] arm-smmu-v3 arm-smmu-v3.2.auto: event 0x10 received: [ 478.913691] arm-smmu-v3 arm-smmu-v3.2.auto: 0x0000310200000010 [ 478.919603] arm-smmu-v3 arm-smmu-v3.2.auto: 0x000002088000007f [ 478.925515] arm-smmu-v3 arm-smmu-v3.2.auto: 0x0000000000000000 [ 478.931425] arm-smmu-v3 arm-smmu-v3.2.auto: 0x0000000000000000 [ 478.947552] hisi_zip 0000:31:00.0: qm_axi_rresp [error status=0x1] found [ 478.955930] hisi_zip 0000:31:00.0: qm_db_timeout [error status=0x400] found [ 478.955944] hisi_zip 0000:31:00.0: qm sq doorbell timeout in function 2 Fixes: d9a871e4a143 ("hisi_acc_vfio_pci: Introduce support for PRE_COPY state transitions") Signed-off-by: Shameer Kolothum --- drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c index b2f9778c8366..4d27465c8f1a 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c @@ -694,6 +694,7 @@ static ssize_t hisi_acc_vf_resume_write(struct file *filp, const char __user *bu size_t len, loff_t *pos) { struct hisi_acc_vf_migration_file *migf = filp->private_data; + u8 *vf_data = (u8 *)&migf->vf_data; loff_t requested_length; ssize_t done = 0; int ret; @@ -715,7 +716,7 @@ static ssize_t hisi_acc_vf_resume_write(struct file *filp, const char __user *bu goto out_unlock; } - ret = copy_from_user(&migf->vf_data, buf, len); + ret = copy_from_user(vf_data + *pos, buf, len); if (ret) { done = -EFAULT; goto out_unlock; @@ -835,7 +836,9 @@ static ssize_t hisi_acc_vf_save_read(struct file *filp, char __user *buf, size_t len = min_t(size_t, migf->total_length - *pos, len); if (len) { - ret = copy_to_user(buf, &migf->vf_data, len); + u8 *vf_data = (u8 *)&migf->vf_data; + + ret = copy_to_user(buf, vf_data + *pos, len); if (ret) { done = -EFAULT; goto out_unlock; -- 2.34.1