From patchwork Tue Mar 5 10:15:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 13582013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E87AC54E4A for ; Tue, 5 Mar 2024 10:16:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A8861940015; Tue, 5 Mar 2024 05:16:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E72C94000F; Tue, 5 Mar 2024 05:16:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8118D940015; Tue, 5 Mar 2024 05:16:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6C4AE94000F for ; Tue, 5 Mar 2024 05:16:30 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4EA5C80C82 for ; Tue, 5 Mar 2024 10:16:30 +0000 (UTC) X-FDA: 81862580940.09.6A537C5 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf06.hostedemail.com (Postfix) with ESMTP id B494318001C for ; Tue, 5 Mar 2024 10:16:28 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="IkRk/fb0"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of leon@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=leon@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709633788; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=CTugSmgLwJgDA9ipI5mnVckl7fOXK4aUNX016/UL5M0=; b=liDHxBjoSP58V3HFHhvRqeZHyp4uQ7nRn/9Lds1pfjA7DESCXU4Roe1oj9OISrxVY2eqKl KrPL8VUFsJyGT+QLexAXEFT/ci0hebYtiNVhbNlx8CuhXMYfjnbXxFmOoRf6O5975tL8GP 5S3CHcwfZ66qPpTOQoC97bQSa45CO0Y= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="IkRk/fb0"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of leon@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=leon@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709633788; a=rsa-sha256; cv=none; b=jf3IWbIkesWVs8QDisKk76uY/RmF+E+CwPWsWJm0pog6FvkGUtqz0SyVG9dxE9q2WlwJiD yKJJYYnnxxYpCj7NqqA05TOCVoTndBWGBPm13PLMS7/BPPytSd6ikV55qGcY9XOVqfyvHJ 3+RcuxwJNyCiixntsAHr5mgiw8wWS0A= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 0149A614A9; Tue, 5 Mar 2024 10:16:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03941C43394; Tue, 5 Mar 2024 10:16:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709633787; bh=WBfM8ZvY1JfgPv87VMT5XwFqFK1pOKYXqtZNVa4/Kmg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IkRk/fb09cNpaq1ao/YIjVQRUd7549ASV5vUrE0loQ3I40W0g4lHqMa2RnlPOC+SL 7O47LLrDs24FE154PCpzD9gxTzqQT73wARI+zqa5pCclRYy+mfUAb3VXN5E67rLGEq 3FJ29W4o1dvJg1oBPDj9nWxWk+GDyXcjXC0TwrN0jPCHmoAcRi2VmERQ0yOXxC4y76 SQTUfIFSI98tR0AmIVTshw3fDy/384A966eKFUmESBoo+LVwjOUtuC+rAvhyqDK1EM ycf5A5dNTFKwMwlUDywAbqNnUHwzdQvu0BxoWJduZUbSgbO83ABzuBc7P68A9/gK4g OYyahJ7w7P7Rw== From: Leon Romanovsky To: Christoph Hellwig , Robin Murphy , Marek Szyprowski , Joerg Roedel , Will Deacon , Jason Gunthorpe , Chaitanya Kulkarni Cc: Leon Romanovsky , Jonathan Corbet , Jens Axboe , Keith Busch , Sagi Grimberg , Yishai Hadas , Shameer Kolothum , Kevin Tian , Alex Williamson , =?utf-8?b?SsOpcsO0bWUgR2xp?= =?utf-8?b?c3Nl?= , Andrew Morton , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-rdma@vger.kernel.org, iommu@lists.linux.dev, linux-nvme@lists.infradead.org, kvm@vger.kernel.org, linux-mm@kvack.org, Bart Van Assche , Damien Le Moal , Amir Goldstein , "josef@toxicpanda.com" , "Martin K. Petersen" , "daniel@iogearbox.net" , Dan Williams , "jack@suse.com" , Zhu Yanjun Subject: [RFC 13/16] vfio/mlx5: Explicitly store page list Date: Tue, 5 Mar 2024 12:15:23 +0200 Message-ID: <1d0ca7408af6e5f0bb09baffd021bc72287e5ed8.1709631413.git.leon@kernel.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: B494318001C X-Stat-Signature: hamtkg88mcnak6tctk95tfkdtaf74wrt X-HE-Tag: 1709633788-262000 X-HE-Meta: U2FsdGVkX19Sy7FRU4qyoOb1VLCHtHO7CYulu6QYaXL6dCs/wTR1j60iVsYfBtQXDCqzpgMoJXB/lizZbJo1gPgmViDYzKHEwI3pfGrV2KKSon5W7ag2tE0rWy6zG7ZlfXphKrMLx6PjT+ZUe2DznHm5OalIJizb6zwTKRYCqY34hruPfUGO9BOMF6HujsC67lLOz3pgDQN3GkFXIoZT7AOVKDOJslm6MhZbOyQCE79pv1tCL2e/oU0NhlvJk4v8YV1qaTcxL+vI9+4S9iGoTUsSgmKzCIRD506kkNmaNquSAeuLgKAGSdzGK+6K23/0UOQD6FyCB5NOgViAWsrTOK5TrAQ3FxGbcoXfDYuwRN3fzEJe4MZiDW8YzF919KjJ6czD8JQJkZk5/LxuIREhHZINH6nUfHc+wU/2ZlGNrzZefHv30oYW1u/7i+A2ufqp4sSwvbDpScp2lwpH31mjbWgICejajpYZkfa5+42WDiFFKxjVU/McGj2ZgceQexYGrMv77Hs2jkwo7lS90fOLW358Ntxvo4gWKqcoJKiRZm8rsE5+dIyYRtzLqJW6/vQZ0gqYFc0Z0JoAIJCO+xxacVuO4/4o1tIkRQeJ9xG5kyFGfVMnwQwbz9djeOtJ8AkSpMrsj9c9BMUER64VLlXBjCOQT0C5ZR0266lfa/IUz193BaNMT/MQ9/hs2zcGIAv2IQ2oJ1ds08RkzHtZ8iqG7CxxdixEWZb0hiLv853MXJAK0ElCoyMqpXOHUtBnXjoF9iDyOM1fGXy+YFnGLoTCN5frub/wk9brF1vQN5FFmMSC6cp19pceRkqWBtUHHx/+oVAMKXFvoIRwj/FSFwydjmjXMdgBGRPat+tg9eFGW0KHLKh4oe6hEtnkB9E2QU99z6xAURzI7MOQbl7iZj8k+mZ2bbUhY0oZccI4U5UjCteDolC3wTNE72hdik4qlLDNy8ouanIfAE4KQBtHHF3 8fgbg4Qh IfbpXYFtCtAkW1ES03CceEVRySK3VbrEwA+eb+3bosGBzb2UwN15opIVBAng6szPwRHzRIr3tRNlHkNAXCRO3Nn7Kn632u1f8W8KSwEeD8PvciXGzzS+YnuYSBzrIOLmTTa3zS4Vx4OfetWWAKrvMagNOxGCeEmiVHievWGQOmI0Nm4mVi+DXn8AUWAHQCRgxUsn9ISvmUCDZVw6c5RzJABIJq1lMIDFYAxYQK6nAOBUh6cn/Sr38fQ4tzw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Leon Romanovsky As a preparation to removal scatter-gather table and unifying receive and send list, explicitly store page list. Signed-off-by: Leon Romanovsky --- drivers/vfio/pci/mlx5/cmd.c | 1 + drivers/vfio/pci/mlx5/cmd.h | 1 + drivers/vfio/pci/mlx5/main.c | 35 +++++++++++++++++------------------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c index 44762980fcb9..5e2103042d9b 100644 --- a/drivers/vfio/pci/mlx5/cmd.c +++ b/drivers/vfio/pci/mlx5/cmd.c @@ -411,6 +411,7 @@ void mlx5vf_free_data_buffer(struct mlx5_vhca_data_buffer *buf) for_each_sgtable_page(&buf->table.sgt, &sg_iter, 0) __free_page(sg_page_iter_page(&sg_iter)); sg_free_append_table(&buf->table); + kvfree(buf->page_list); kfree(buf); } diff --git a/drivers/vfio/pci/mlx5/cmd.h b/drivers/vfio/pci/mlx5/cmd.h index 83728c0669e7..815fcb54494d 100644 --- a/drivers/vfio/pci/mlx5/cmd.h +++ b/drivers/vfio/pci/mlx5/cmd.h @@ -57,6 +57,7 @@ struct mlx5_vf_migration_header { }; struct mlx5_vhca_data_buffer { + struct page **page_list; struct sg_append_table table; loff_t start_pos; u64 length; diff --git a/drivers/vfio/pci/mlx5/main.c b/drivers/vfio/pci/mlx5/main.c index b11b1c27d284..7ffe24693a55 100644 --- a/drivers/vfio/pci/mlx5/main.c +++ b/drivers/vfio/pci/mlx5/main.c @@ -69,44 +69,43 @@ int mlx5vf_add_migration_pages(struct mlx5_vhca_data_buffer *buf, unsigned int npages) { unsigned int to_alloc = npages; + size_t old_size, new_size; struct page **page_list; unsigned long filled; unsigned int to_fill; int ret; - to_fill = min_t(unsigned int, npages, PAGE_SIZE / sizeof(*page_list)); - page_list = kvzalloc(to_fill * sizeof(*page_list), GFP_KERNEL_ACCOUNT); + to_fill = min_t(unsigned int, npages, + PAGE_SIZE / sizeof(*buf->page_list)); + old_size = buf->npages * sizeof(*buf->page_list); + new_size = old_size + to_fill * sizeof(*buf->page_list); + page_list = kvrealloc(buf->page_list, old_size, new_size, + GFP_KERNEL_ACCOUNT | __GFP_ZERO); if (!page_list) return -ENOMEM; + buf->page_list = page_list; + do { filled = alloc_pages_bulk_array(GFP_KERNEL_ACCOUNT, to_fill, - page_list); - if (!filled) { - ret = -ENOMEM; - goto err; - } + buf->page_list + buf->npages); + if (!filled) + return -ENOMEM; + to_alloc -= filled; ret = sg_alloc_append_table_from_pages( - &buf->table, page_list, filled, 0, + &buf->table, buf->page_list + buf->npages, filled, 0, filled << PAGE_SHIFT, UINT_MAX, SG_MAX_SINGLE_ALLOC, GFP_KERNEL_ACCOUNT); - if (ret) - goto err; + return ret; + buf->npages += filled; - /* clean input for another bulk allocation */ - memset(page_list, 0, filled * sizeof(*page_list)); to_fill = min_t(unsigned int, to_alloc, - PAGE_SIZE / sizeof(*page_list)); + PAGE_SIZE / sizeof(*buf->page_list)); } while (to_alloc > 0); - kvfree(page_list); return 0; - -err: - kvfree(page_list); - return ret; } static void mlx5vf_disable_fd(struct mlx5_vf_migration_file *migf)