From mboxrd@z Thu Jan 1 00:00:00 1970 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?q?J=C3=A9r=C3=B4me=20Glisse?= , 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 Content-Transfer-Encoding: 8bit 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) -- 2.44.0 From mboxrd@z Thu Jan 1 00:00:00 1970 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 67A6BC54798 for ; Tue, 5 Mar 2024 10:23:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B2A1C6B00D1; Tue, 5 Mar 2024 05:23:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AB2376B00D2; Tue, 5 Mar 2024 05:23:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 903686B00D3; Tue, 5 Mar 2024 05:23:21 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7786B6B00D1 for ; Tue, 5 Mar 2024 05:23:21 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 3A4C61C0E77 for ; Tue, 5 Mar 2024 10:23:21 +0000 (UTC) X-FDA: 81862598202.17.06C666B Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf04.hostedemail.com (Postfix) with ESMTP id AA0DD40009 for ; Tue, 5 Mar 2024 10:23:19 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=aYKYGXWn; spf=pass (imf04.hostedemail.com: domain of leon@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709634199; 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=vKH/jtkwuKLultAmB+1aVUfqIjTenakZs4K+Uivyj2nCti1QCzPlCnTcsUq4LS2+M3uoB6 Yr+HvGEpagE8DjAa78lbSi6xuHd4p2gGv5anchOKAUacXWdq/CcLGxNUGAU97mcvvYYqeZ 5Kgk61zskfrcrxPDneXAT/InPJSYm3M= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709634199; a=rsa-sha256; cv=none; b=iGb6y1qs6Djo8pkb5/4+zVlpLnjP3iMPjzoanHBDuaZd0ALGw0dxOoj/IjgFTaKDGhHN6q xiVZQogcEbnibibRQrJLm0WN8F19KBaNfiHYnLqigcWPKjYnKpy0H8hOPnyGuDfoduu+rY +Iw2BgLnaQXsG1GvoarD3QmHLph6t6k= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=aYKYGXWn; spf=pass (imf04.hostedemail.com: domain of leon@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id E75D2614D1; Tue, 5 Mar 2024 10:23:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DEE7CC433C7; Tue, 5 Mar 2024 10:23:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709634198; bh=WBfM8ZvY1JfgPv87VMT5XwFqFK1pOKYXqtZNVa4/Kmg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aYKYGXWnIXA5YF13RHhycYrXp349VOhkh6hHz38egCBlNQBYUMc9jC9/LkoCVC8hp PWkSAkCjha8oqzedg/56Xb71wcwnwj98750I0IBvwSe0anKQ3pqY5nST45OfMEas3f y9H2ibe3MuxaZ9f7gAxnwd6Zpt81O9csC32FSAvd+pjGiJ7w607nymwIAs8SL8AAla IDohF8dNr6SFfnT7r8V517eGKLFQ3Tv1GcwD0u6j7rkI1F7DiUUJCK6G0vEyKi48Pz ibWqAPhwDN33hzZkamTUbwtP31m0LjLVl9AITxnxmMqPgGg5DW3MPm+8dev9xkA9G9 CDszlhHpjpm2Q== 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?q?J=C3=A9r=C3=B4me=20Glisse?= , 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:22:14 +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 Content-Transfer-Encoding: 8bit X-Stat-Signature: hamtkg88mcnak6tctk95tfkdtaf74wrt X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: AA0DD40009 X-Rspam-User: X-HE-Tag: 1709634199-133888 X-HE-Meta: U2FsdGVkX1/EE0vB/ZfnC5Kv4BxVAU68KtyzTUkGfRMQM9d9TkLlMY6KP3MCHYpU0w6C0SoIMt99xRXNxQiX4obh5y+s+BiGpRjuydOv97IHy3cEFHQLqr271DN6g2Om9UP+MfKBrpxskXW+iDwJx0wnkCtQUG+SNHmZx6VhNAq3dmYGT1Jv3w1ifFtEMHhN6KU9+cfHzwYtK8yqXEEw8wH6cyQeRmLKNS3v48/WXXFFR+sow/IJ/EHBViYcRLbL4y0h6raFLVwEdMaKnn7QdCmwHwqR9BSkthspSt5sFKf9L9cTAldn3S428Dbm47gD2oyoXUzHfWNKCPnY47ERRWQlrKvoox3X9Q9XX6qBgJ1u2tBlZmpuncV3NI30ct4iEbEgBkQ2a+mD4zgzWROuQ67BXELiv6N1v16Yx1tTT5D2wCtRayYX3wHFIT4BqtZK6l1bt5w1xdDWyKudVsG5pH8LXuPAJGiSPBshnobN22g14yx7sU8kav7UVrNYEzRNALUQxzXFisDPKyK20yTYdXdb7iwYGjX/lrkFJjZy9jYoLUY1iELsIR7P+0DWqFDEUZUu83S04oamZoLVL11pag6ic+H8PBQta5W88EI6hytf5ZcEO53JjeP9Zq/s3SW/Wp6Q7tuYrcd+o01nc3FgGCRTcEzjyw9Cmg7JG4+gRO6tShwYDjkXIzZQuwnByn0kIVf83RziW8/JO3f6bo3UXAwm7OR8dH5hUl5qCUx62PuIZgvEPGJnugkdlFokAqLPXy3usDNBiykk/j8NU0e1Qk+kt/5FVltKYKLiT0b6zPqhK6eEM/Z8CS/rbreWIT7lJ6fDJHE2wueTK6OU5e1p7JMoHRaMX++vFdqpxUS+WjyX4G6pjyd2K7qpWKWmKeTpodDHQb284dUkdu8g+nM7lpZKXSwI8BHyB2fN3izas+88HBQj0CRVs4dkB/+EYDyg7RPI52h5xJK0a/aiHPN yZdqu9JR bFW6q 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: Message-ID: <20240305102214.Y1PHApRRxcBahHHinOxNlWfOe5XTeYxmVG-zCnSJJnM@z> 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) -- 2.44.0