From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE2B44F201 for ; Tue, 5 Mar 2024 08:59:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629179; cv=none; b=YqSeFxtCat04TOQedL3uoESa4lY2fFjEm2kesIS/s58sGq3yVXs7g45RQPb2viv5rpEzHtj2vHQG59+bjdsA3HN14u60VU6XDEkysEn68IK6rqvq1csyht6qZk4X9SkgU1vmh0VJAIQ1R5GPRN51MTA31mLKiphN7YRMsUL1Tkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629179; c=relaxed/simple; bh=MMGazsXMELcthopzkWySpb5QWQrKFh2sF6Hs79rV1t4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Nq1cVpz/woRsEbhmyquJNXbK/qzjzw6v3ObWRMIAQ/kxqLW96YAq1OxfNB2rZapXR1j19Q483st1EsHA9Q64bj9CpqSA3rRs0ALLsC+hGrFMw9WuR50+lDbQy3NoWGH1ixptFmEiRedzxExxJhT1Crlz6Hnc6X8miXlvMsKaq4U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=DqDvIu4T; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="DqDvIu4T" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-a44e3176120so313464666b.1 for ; Tue, 05 Mar 2024 00:59:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629175; x=1710233975; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/qIFUyqNzJGU/sV3s/MTC8AnDdvnQ4WfWOVpbwwJc84=; b=DqDvIu4TddgqNdXh/HLI0eDXPTc6uAYSOerXOHzN7W7gqo/RbWLIdRuhlhwEsA5nem RgZvaETVbrzNkHeHYXGnBOSmyP+CiS/O9Hr5xViWmOk78ou1nYIiiaFr/IVR7Xqgj699 GtbALzARznnLyV94ff7bf6YsoANeHfqUuEFOW5RwHVgN+b0R0toYFxBEVOMlvQWw1xHv wBi2RKcqCHrZssRrUL554T6Lpx4xMOomaoj1k6Doq6q98m95S4p4jRJ8/eWeIy+pvp0j P46UdMrftfXPll97YrDRDC8elEWcOCwSM0KL2UIIdK5sTQg0TNO3c3q1cbB5BEtMzRFj 2kJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629175; x=1710233975; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/qIFUyqNzJGU/sV3s/MTC8AnDdvnQ4WfWOVpbwwJc84=; b=vPDxzaGaBrKqq4hG5JnGxOFrK6aGiD2xMiBOdG+6apSqN1tDLBhbk58frda0HuDLgo Jw3s/CR8JmCLha2wcfoDr3qvcaEvh/ankJT3qy8cTJz2wbAntnOzkUEU+WCnZt3uOA28 NbSyOZGhScJx005mC7wk/+XuuoO9AZCnNtX8i6xXbRRGuj+yfQrYLnWdAVVe71khNbwX tZZyIAMxb6jhaz37Fpy96b2FW6c9X6J3W3dYvJxu4HVz1pnzii8X0aYzpTdKw+HoVxhy 0me0qPnY2b+lW+rML4KeTWQUQvVFkrkEXCslecZUS+b0LkHJertRpFhpa2JJBaoedXbz 5qUg== X-Forwarded-Encrypted: i=1; AJvYcCVnhI1u4/PKPulgqTVrFsOp5UcvtzKeEChkBpKuvPNAvUotsZ4InD2UTvl/aEGC2smGIuhrah+voGkuKTC6nTJXHGMn6F81eS/1SYcS X-Gm-Message-State: AOJu0YwuEMt0C+Y0glDpL3a5WhLtqz1cKqiDW26T5QNHVlRbeoEZqUxF ZXpaooMTHpeWUVYXhtEOuBGs04D5QzroqYXrv7X9Gx10k6rpNcCaKF/3HxKG6MU= X-Google-Smtp-Source: AGHT+IEPQyBh8s6BMZHnBwuNzm4qtytqWKQC66qXTpgFJkJLHir+hbbuiT2exhYdVnu0LiN9RvteGQ== X-Received: by 2002:a17:906:fc01:b0:a43:f267:789f with SMTP id ov1-20020a170906fc0100b00a43f267789fmr7581742ejb.41.1709629175181; Tue, 05 Mar 2024 00:59:35 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:34 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 01/14] drivers: add missing includes on linux/mm.h (and others) Date: Tue, 5 Mar 2024 09:59:06 +0100 Message-Id: <20240305085919.1601395-2-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After developing the other patches in this series, I had lots of build failures because "#include " was missing. This patch fixes those build failures by adding the missing "#include" lines. To allow bisects, it is ordered before the others. Signed-off-by: Max Kellermann --- arch/arm/mm/iomap.c | 3 +++ drivers/comedi/comedi_buf.c | 1 + drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c | 1 + drivers/dma/dma-axi-dmac.c | 1 + drivers/dma/sh/rcar-dmac.c | 1 + drivers/firmware/qcom/qcom_scm-legacy.c | 1 + drivers/firmware/qcom/qcom_scm-smc.c | 1 + drivers/firmware/raspberrypi.c | 1 + drivers/iio/buffer/industrialio-buffer-dma.c | 1 + drivers/iommu/iommufd/ioas.c | 2 ++ drivers/iommu/iommufd/selftest.c | 1 + drivers/media/platform/mediatek/vpu/mtk_vpu.c | 1 + drivers/media/platform/ti/omap/omap_voutlib.c | 1 + drivers/misc/bcm-vk/bcm_vk_dev.c | 1 + drivers/misc/fastrpc.c | 1 + drivers/misc/genwqe/card_dev.c | 1 + drivers/misc/uacce/uacce.c | 1 + drivers/mtd/spi-nor/core.h | 2 ++ drivers/pci/p2pdma.c | 1 + drivers/pci/pci.c | 1 + drivers/remoteproc/remoteproc_core.c | 1 + drivers/soc/qcom/rmtfs_mem.c | 1 + drivers/spi/spi-aspeed-smc.c | 1 + drivers/spi/spi-bcm2835.c | 2 ++ drivers/spi/spi-intel.c | 1 + drivers/virtio/virtio_ring.c | 1 + include/linux/huge_mm.h | 2 ++ include/linux/iommu.h | 1 + include/linux/nvme-keyring.h | 2 ++ include/linux/scatterlist.h | 6 ++++++ kernel/dma/ops_helpers.c | 1 + kernel/dma/remap.c | 1 + mm/dmapool.c | 1 + 33 files changed, 45 insertions(+) diff --git a/arch/arm/mm/iomap.c b/arch/arm/mm/iomap.c index 415d0a454237..9873d8156908 100644 --- a/arch/arm/mm/iomap.c +++ b/arch/arm/mm/iomap.c @@ -29,6 +29,9 @@ EXPORT_SYMBOL(ioport_unmap); #endif =20 #ifdef CONFIG_PCI + +#include // for VMALLOC_* + unsigned long pcibios_min_io =3D 0x1000; EXPORT_SYMBOL(pcibios_min_io); =20 diff --git a/drivers/comedi/comedi_buf.c b/drivers/comedi/comedi_buf.c index 393966c09740..23b07ebc97ca 100644 --- a/drivers/comedi/comedi_buf.c +++ b/drivers/comedi/comedi_buf.c @@ -10,6 +10,7 @@ #include #include #include +#include // for PAGE_KERNEL* #include "comedi_internal.h" =20 #ifdef PAGE_KERNEL_NOCACHE diff --git a/drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c b/dr= ivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c index ee0b5079de3e..c9b2787baac7 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c +++ b/drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright(c) 2023 Intel Corporation */ #include +#include // for simple_read_from_buffer() #include #include #include diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c index 4e339c04fc1e..0c98bf0e4b5d 100644 --- a/drivers/dma/dma-axi-dmac.c +++ b/drivers/dma/dma-axi-dmac.c @@ -15,6 +15,7 @@ #include #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c index 40482cb73d79..784da367665c 100644 --- a/drivers/dma/sh/rcar-dmac.c +++ b/drivers/dma/sh/rcar-dmac.c @@ -12,6 +12,7 @@ #include #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/firmware/qcom/qcom_scm-legacy.c b/drivers/firmware/qco= m/qcom_scm-legacy.c index 029e6d117cb8..01e082c7163c 100644 --- a/drivers/firmware/qcom/qcom_scm-legacy.c +++ b/drivers/firmware/qcom/qcom_scm-legacy.c @@ -5,6 +5,7 @@ =20 #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/firmware/qcom/qcom_scm-smc.c b/drivers/firmware/qcom/q= com_scm-smc.c index 16cf88acfa8e..a5c74d8996fe 100644 --- a/drivers/firmware/qcom/qcom_scm-smc.c +++ b/drivers/firmware/qcom/qcom_scm-smc.c @@ -5,6 +5,7 @@ #include #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c index 322aada20f74..beef5c4afef2 100644 --- a/drivers/firmware/raspberrypi.c +++ b/drivers/firmware/raspberrypi.c @@ -9,6 +9,7 @@ #include #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/iio/buffer/industrialio-buffer-dma.c b/drivers/iio/buf= fer/industrialio-buffer-dma.c index 5610ba67925e..b3ce8c4b101a 100644 --- a/drivers/iio/buffer/industrialio-buffer-dma.c +++ b/drivers/iio/buffer/industrialio-buffer-dma.c @@ -6,6 +6,7 @@ =20 #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/iommu/iommufd/ioas.c b/drivers/iommu/iommufd/ioas.c index 742248276548..40c4942406cd 100644 --- a/drivers/iommu/iommufd/ioas.c +++ b/drivers/iommu/iommufd/ioas.c @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include =20 #include "io_pagetable.h" diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selft= est.c index 7a2199470f31..bcecf44681fe 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -5,6 +5,7 @@ */ #include #include +#include // for GUP_PIN_COUNTING_BIAS #include #include #include diff --git a/drivers/media/platform/mediatek/vpu/mtk_vpu.c b/drivers/media/= platform/mediatek/vpu/mtk_vpu.c index 7243604a82a5..885b873982e4 100644 --- a/drivers/media/platform/mediatek/vpu/mtk_vpu.c +++ b/drivers/media/platform/mediatek/vpu/mtk_vpu.c @@ -8,6 +8,7 @@ #include #include #include +#include // for totalram_pages() #include #include #include diff --git a/drivers/media/platform/ti/omap/omap_voutlib.c b/drivers/media/= platform/ti/omap/omap_voutlib.c index 0ac46458e41c..3b653b49cc48 100644 --- a/drivers/media/platform/ti/omap/omap_voutlib.c +++ b/drivers/media/platform/ti/omap/omap_voutlib.c @@ -18,6 +18,7 @@ * */ =20 +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/misc/bcm-vk/bcm_vk_dev.c b/drivers/misc/bcm-vk/bcm_vk_= dev.c index d4a96137728d..c5a39a8189bf 100644 --- a/drivers/misc/bcm-vk/bcm_vk_dev.c +++ b/drivers/misc/bcm-vk/bcm_vk_dev.c @@ -11,6 +11,7 @@ #include #include #include +#include // for io_remap_pfn_range() #include #include #include diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index dbd26c3b245b..35701e9ec28e 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -10,6 +10,7 @@ #include #include #include +#include // for find_vma() #include #include #include diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c index 4441aca2280a..ce3acb938ca6 100644 --- a/drivers/misc/genwqe/card_dev.c +++ b/drivers/misc/genwqe/card_dev.c @@ -17,6 +17,7 @@ =20 #include #include +#include // for struct vm_operations_struct #include #include #include diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c index bdc2e6fda782..af815b8a718e 100644 --- a/drivers/misc/uacce/uacce.c +++ b/drivers/misc/uacce/uacce.c @@ -2,6 +2,7 @@ #include #include #include +#include // for struct vm_operations_struct #include #include #include diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index 442786685515..c113ed8e8751 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -9,6 +9,8 @@ =20 #include "sfdp.h" =20 +#include // for SZ_* + #define SPI_NOR_MAX_ID_LEN 6 /* * 256 bytes is a sane default for most older flashes. Newer flashes will diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c index 4f47a13cb500..ef37ea6c09fc 100644 --- a/drivers/pci/p2pdma.c +++ b/drivers/pci/p2pdma.c @@ -16,6 +16,7 @@ #include #include #include +#include // for VM_MAYSHARE #include #include #include diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index cfc5b84dc9c9..e2afd992caa7 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -25,6 +25,7 @@ #include #include #include +#include // for pgprot_device() #include #include #include diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remo= teproc_core.c index f276956f2c5c..938220fe29f5 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -18,6 +18,7 @@ =20 #include #include +#include // for PAGE_ALIGN() #include #include #include diff --git a/drivers/soc/qcom/rmtfs_mem.c b/drivers/soc/qcom/rmtfs_mem.c index df850d073102..15c2f6e5eaff 100644 --- a/drivers/soc/qcom/rmtfs_mem.c +++ b/drivers/soc/qcom/rmtfs_mem.c @@ -6,6 +6,7 @@ #include #include #include +#include // for remap_pfn_range() #include #include #include diff --git a/drivers/spi/spi-aspeed-smc.c b/drivers/spi/spi-aspeed-smc.c index bbd417c55e7f..e45f64761e5e 100644 --- a/drivers/spi/spi-aspeed-smc.c +++ b/drivers/spi/spi-aspeed-smc.c @@ -11,6 +11,7 @@ #include #include #include +#include // for SZ_* #include #include =20 diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c index e1b9b1235787..d8ed5575a9c6 100644 --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c @@ -33,6 +33,8 @@ #include #include =20 +#include // for ZERO_PAGE() + /* SPI register offsets */ #define BCM2835_SPI_CS 0x00 #define BCM2835_SPI_FIFO 0x04 diff --git a/drivers/spi/spi-intel.c b/drivers/spi/spi-intel.c index 3e5dcf2b3c8a..cf8e4f1c4d93 100644 --- a/drivers/spi/spi-intel.c +++ b/drivers/spi/spi-intel.c @@ -8,6 +8,7 @@ =20 #include #include +#include // for SZ_* =20 #include #include diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 6f7e5010a673..48f694d1bc46 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -12,6 +12,7 @@ #include #include #include +#include // for PAGE_ALIGN() #include #include =20 diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index de0c89105076..55b94db3bd5c 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -7,6 +7,8 @@ =20 #include /* only for vma_is_dax() */ =20 +#include // for pmd_t + vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf); int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm, pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr, diff --git a/include/linux/iommu.h b/include/linux/iommu.h index af6c367ed673..030820a5639e 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -14,6 +14,7 @@ #include #include #include +#include // for copy_struct_from_user() =20 #define IOMMU_READ (1 << 0) #define IOMMU_WRITE (1 << 1) diff --git a/include/linux/nvme-keyring.h b/include/linux/nvme-keyring.h index e10333d78dbb..9e033850b967 100644 --- a/include/linux/nvme-keyring.h +++ b/include/linux/nvme-keyring.h @@ -6,6 +6,8 @@ #ifndef _NVME_KEYRING_H #define _NVME_KEYRING_H =20 +#include + #if IS_ENABLED(CONFIG_NVME_KEYRING) =20 key_serial_t nvme_tls_psk_default(struct key *keyring, diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 77df3d7b18a6..0516e64dc03e 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h @@ -8,6 +8,12 @@ #include #include =20 +#ifdef CONFIG_UML +#include // for virt_to_page(), page_to_phys() +#else +#include // for virt_to_page(), page_to_phys() +#endif + struct scatterlist { unsigned long page_link; unsigned int offset; diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c index af4a6ef48ce0..641363b13bb9 100644 --- a/kernel/dma/ops_helpers.c +++ b/kernel/dma/ops_helpers.c @@ -4,6 +4,7 @@ * the allocated memory contains normal pages in the direct kernel mapping. */ #include +#include // for PAGE_ALIGN() =20 static struct page *dma_common_vaddr_to_page(void *cpu_addr) { diff --git a/kernel/dma/remap.c b/kernel/dma/remap.c index 27596f3b4aef..87b3c874d370 100644 --- a/kernel/dma/remap.c +++ b/kernel/dma/remap.c @@ -3,6 +3,7 @@ * Copyright (c) 2014 The Linux Foundation */ #include +#include // for vmap(), PAGE_ALIGN() #include #include =20 diff --git a/mm/dmapool.c b/mm/dmapool.c index f0bfc6c490f4..b8e23fdc81d7 100644 --- a/mm/dmapool.c +++ b/mm/dmapool.c @@ -25,6 +25,7 @@ #include #include #include +#include // for want_init_on_alloc() #include #include #include --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C5754F207 for ; Tue, 5 Mar 2024 08:59:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629180; cv=none; b=qRkEBuWf51W/JqehQcZGL7f6pxVgDI8UazpGK6zCZFLI0At/mp4EmqBNi4Zlc4tatLSRvw7dLfUa5xlgckv1wVZioh9kV7hvL3WVrimQpcuzVlxY/duxZc0aQN/gHgjtjgRh7ZwWTJVziE1cazG9KQS4v5aEMmonE6jwhfXoZxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629180; c=relaxed/simple; bh=7E++P3NE3gX/uG8sJhez163L//hFb7dWE0h0h4Q6OTA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=aKu63YiHQVPd1ibxohLzkFr8/1zFK2GJa1STRY6vAeupLLV1+cG4aSjFiefJZKbhIr3rl8Q7SOszdGZCanr78687YnOYMQ1S+7e3YuycBMH6ZhnkyYCEHa4Juphe7tIwQKPvzq5l90o6ZIurKG3VzaFqQzH1Oqrc0u3nGpgbZ44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=SLCP2Bjn; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="SLCP2Bjn" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-56682b85220so8616609a12.1 for ; Tue, 05 Mar 2024 00:59:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629176; x=1710233976; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BL1pmIo7s1MX4N9LU8kIbt0i/wU5mZK2rTJkOzRk4Zc=; b=SLCP2BjnXaa8DJ38mRocxropkJdKQfdE9Ktvtb0Dn5121g0FyWHpAjOzWlNAIRYuBg aGbLSQkC64poFN7Y6iTbeBbycp+E4iuUHlgA40r1Cqow2ek2mbyZ0YBdp2D0IJ9LC5iq WesVplUqjSccjpid1rKyMkhZpAUKH+tIuRJBB9H7Q7NM/I8sJhrGr4y8k0kICDx8GNHO KDbhQfbDICrAfdBX/SS3FXPh82T0QFeBNdrXcB64Fu4buSAUovmREBZqGiMN7gZtfrR8 xWZKTc9xklJPMnfITQePUeeRQerh5N+RPIy1vaNG0p5gZCfEcHFIlngVjn3p6KhzQHKm rsVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629176; x=1710233976; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BL1pmIo7s1MX4N9LU8kIbt0i/wU5mZK2rTJkOzRk4Zc=; b=XVpsK0EmM49oYwIaJNxpgIbvw2y2sHYa289oDcpNtSK7W7Ynzp0opCox+9txEwJ6no L9mSDXuCor+tVDnBMsZp1g1xQIXTCYuUFJOVAnsETOVrwe7hAgAVMMQW3e2spO805GZG lOymK6934AWUDz2lT/8tBUa07lzb2YfOsllAUIy/+sHP4aDFGh50U9Lqav/arznFFiw9 LodrozE0zJ9DduSU0pla11B4JXWMF3Lk58nM3dMWIS3q51VoPwXlLSxhBK9I0e0Wqqj8 3gHhop+Ua3vJYMRGIPbgHhkV+zvYtiHCxl54E/qWOz7n3BpRz1AYBjJf91ETk5kXxmak 5YDg== X-Forwarded-Encrypted: i=1; AJvYcCW5gktTFXRsgp6knvKBL4qdUBKg4X36NifKVlSOWTkaOO0VNu15lz6ErL9FWkzLMzHbbRzk1K9inhqypi0eKpFK+OHf6No0gE1g4J6D X-Gm-Message-State: AOJu0YwgGNq3ko3eqyzZprPFSZdZVhiQ4VHLgqAx4PlRfygTPPHO9RWY 31Q7AdHnAbV2BZSeDRV86IqKn1S4WpA9c/mUgxkuxiTe0x19pEcLowVt1rfKopQ= X-Google-Smtp-Source: AGHT+IFECPH+najh1MX5zMcxH632u551jNgiqYN/FKRfvXxmD0N9/VMCEcGbJDINMY/jajNmROur7w== X-Received: by 2002:a17:906:7809:b0:a3f:29c:c8fa with SMTP id u9-20020a170906780900b00a3f029cc8famr7642550ejm.66.1709629176544; Tue, 05 Mar 2024 00:59:36 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:35 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 02/14] include/drm/drm_gem.h: add poll_table_struct forward declaration Date: Tue, 5 Mar 2024 09:59:07 +0100 Message-Id: <20240305085919.1601395-3-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable After eliminating includes of linux/mm.h, the following build failure occurred: ./include/drm/drm_file.h:443:45: warning: =E2=80=98struct poll_table_struc= t=E2=80=99 declared inside parameter list will not be visible outside of th= is definition or declaration 443 | __poll_t drm_poll(struct file *filp, struct poll_table_struct *wai= t); | ^~~~~~~~~~~~~~~~~ In file included from drivers/gpu/drm/imagination/pvr_gem.h:12, from drivers/gpu/drm/imagination/pvr_fw.h:9: ./include/drm/drm_gem.h:447:27: error: initialization of =E2=80=98__poll_t= (*)(struct file *, struct poll_table_struct *)=E2=80=99 {aka =E2=80=98unsi= gned int (*)(struct file *, struct poll_table_struct *)=E2=80=99} from inco= mpatible pointer type =E2=80=98__poll_t (*)(struct file *, struct poll_tabl= e_struct *)=E2=80=99 {aka =E2=80=98unsigned int (*)(struct file *, struct p= oll_table_struct *)=E2=80=99} [-Werror=3Dincompatible-pointer-types] 447 | .poll =3D drm_poll,\ | ^~~~~~~~ The compiler is confused, and that can be fixed easily by forward-declaring the struct expicitly. Signed-off-by: Max Kellermann --- include/drm/drm_file.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index ab230d3af138..f24ade9f766f 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -44,6 +44,7 @@ struct drm_device; struct drm_printer; struct device; struct file; +struct poll_table_struct; =20 /* * FIXME: Not sure we want to have drm_minor here in the end, but to avoid --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C1F14F5FA for ; Tue, 5 Mar 2024 08:59:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629181; cv=none; b=L+IDwkR6S26tbQetEUVzTk+9C8Fyw/TtMzJQR+boU4S/8RzL/N+N/+SUudxBA1d6lI+LK6luvzOTFsLiG56+jt5E7cU5PPri8vlWpYAvkMMk4N9vGDf9Sr8bd6FlqJDnsNo3eL5iML/A635t0m0ogT2lUkNDdR0yEEXAczQSzoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629181; c=relaxed/simple; bh=qh8EAKq10ZxS5F7ALx5UyH9pEBGh9rG+saOTCW2YaOo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Hz3gfpMlFaR30G5M6xks3GY/yhV6NiUF+fUBiggZETTxungItc5P6LnCVEZh7B9pNW0Np7vP2NZaI2KNQt0m4UwZPAD5/d/b9qrFYrwurF/8yOjriCeJqAJinPg+/zL1KMGnoobMinX2Jxrm8kf87v8Dwp1PdwubnAxtZ6N7ES4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=aUroCv7v; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="aUroCv7v" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-a44628725e3so677969166b.0 for ; Tue, 05 Mar 2024 00:59:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629178; x=1710233978; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yHNy+forpiTP10uEWDszfRKNVIJTNDDzicOChwXOTNY=; b=aUroCv7vAr6zItJCGqnWrF6ltNP5kr4a0x9+141bFF9vX2wHd7S29OXNx0iHt04yZH yPIa3jRmLQK2TEKmnuZ3lBBYbmjPpkTklPtKLaEaLiiUfSxZgkFFa+6lSb+wJGcTH84g Mcm8lOwHwVbCcwYuJ5Wuaq/ApMOk0pusMotjie5QrceTKPUOw2dpN7GsbPttfClgbpPX IbOav2aOdS5Q9DuBjw39qF/9O5S2eVY9dTX6RIc3g9ehQWAeXn3aGuJMZklsyI08TTux Vh6aCk7159uImKVpF+VvW/cdpxFK6TkO8Y8eYaMIw9/stH34b8U6WlE3doY9XLlEnwEv 1Utg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629178; x=1710233978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yHNy+forpiTP10uEWDszfRKNVIJTNDDzicOChwXOTNY=; b=EdfX69NnA5woSGEVigl2uz5XiJ26pprljo8GxeJUf2SZXkxz2IkV9z9NfmcAFdIotx yntIlWPSGkmsd1y9q+9K++GaABlGY6OYbNHkBD5glymjA/05rfIXbrjgBAQtuYtvjUrV wc4+VbuiViNKm65BZ8Q1ccXG9+DdcOrEWai/lpxnYE+e+lU5JdTKZiIkX02FIwJX21pc CzGeu6PPqOcgz3S4tDuCYbAfkXquzuKgAkVBTwGYEfRX/1PLx1Scjw2ugLzf/MMHxX82 7jGFnKHvYShcfekHY3rgRvbWZbime8sMeIX2GEGirFrxApub6ujKZGkhW2PDL2eJe6T6 xeRg== X-Forwarded-Encrypted: i=1; AJvYcCWmBmmGeo8adUiUdU4iv1kpwmnvJd8X1rKSuq2FgrSis01tG0cpPTGVZe1mQKeJiyZnZYoWLiCmvRPQdISp21WHRkWG4T0DxQFGl1yn X-Gm-Message-State: AOJu0YyR4291nHCIP/iSEZPIRQb2MsB1OkzmGPuVY8+56F/NcLqSizHk UYzgCnMsyejjI9OpPn+cM7bcJDtToTuIheNfXKiuQpSm+C2DhTRB1HGoYuRD35w= X-Google-Smtp-Source: AGHT+IFyEMaXcRKYaPhF1ktAQM4+jtLzlghr9ZNeqLIJk/JzZPpWzQgHVLLePNuDZ+0vJD35Sgn1CA== X-Received: by 2002:a17:906:d8c9:b0:a45:a7e1:62c3 with SMTP id re9-20020a170906d8c900b00a45a7e162c3mr665645ejb.70.1709629177775; Tue, 05 Mar 2024 00:59:37 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:36 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 03/14] linux/mm.h: move page_kasan_tag() to mm/page_kasan_tag.h Date: Tue, 5 Mar 2024 09:59:08 +0100 Message-Id: <20240305085919.1601395-4-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. page_kasan_tag() is used by the page_to_virt() macro in ARM64 (but asm/memory.h does not include linux/mm.h). Thus, in order to be able to use anything that calls page_to_virt(), linux/mm.h needs to be included. This would prevent us from moving page_address() to a separate header, because it calls lowmem_page_address() which in turn calls page_to_virt(). To prepare for this move, we move page_kasan_tag() out of linux/mm.h into a separate lean header. A side effect of this patch is that the include line is moved inside the "#ifdef CONFIG_KASAN..." block, i.e. it is not included at all if KASAN is disabled. Signed-off-by: Max Kellermann --- MAINTAINERS | 1 + include/linux/mm.h | 56 +------------------------- include/linux/mm/page_kasan_tag.h | 66 +++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 55 deletions(-) create mode 100644 include/linux/mm/page_kasan_tag.h diff --git a/MAINTAINERS b/MAINTAINERS index 9e5bb60c55fe..dbfe08329154 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14210,6 +14210,7 @@ F: include/linux/mempolicy.h F: include/linux/mempool.h F: include/linux/memremap.h F: include/linux/mm.h +F: include/linux/mm/*.h F: include/linux/mm_*.h F: include/linux/mmzone.h F: include/linux/mmu_notifier.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 0436b919f1c7..e140ee45f49c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,6 +2,7 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 +#include #include #include #include @@ -27,7 +28,6 @@ #include #include #include -#include #include #include =20 @@ -1818,60 +1818,6 @@ static inline void vma_set_access_pid_bit(struct vm_= area_struct *vma) } #endif /* CONFIG_NUMA_BALANCING */ =20 -#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) - -/* - * KASAN per-page tags are stored xor'ed with 0xff. This allows to avoid - * setting tags for all pages to native kernel tag value 0xff, as the defa= ult - * value 0x00 maps to 0xff. - */ - -static inline u8 page_kasan_tag(const struct page *page) -{ - u8 tag =3D KASAN_TAG_KERNEL; - - if (kasan_enabled()) { - tag =3D (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK; - tag ^=3D 0xff; - } - - return tag; -} - -static inline void page_kasan_tag_set(struct page *page, u8 tag) -{ - unsigned long old_flags, flags; - - if (!kasan_enabled()) - return; - - tag ^=3D 0xff; - old_flags =3D READ_ONCE(page->flags); - do { - flags =3D old_flags; - flags &=3D ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT); - flags |=3D (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT; - } while (unlikely(!try_cmpxchg(&page->flags, &old_flags, flags))); -} - -static inline void page_kasan_tag_reset(struct page *page) -{ - if (kasan_enabled()) - page_kasan_tag_set(page, KASAN_TAG_KERNEL); -} - -#else /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ - -static inline u8 page_kasan_tag(const struct page *page) -{ - return 0xff; -} - -static inline void page_kasan_tag_set(struct page *page, u8 tag) { } -static inline void page_kasan_tag_reset(struct page *page) { } - -#endif /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ - static inline struct zone *page_zone(const struct page *page) { return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; diff --git a/include/linux/mm/page_kasan_tag.h b/include/linux/mm/page_kasa= n_tag.h new file mode 100644 index 000000000000..1210c62170a3 --- /dev/null +++ b/include/linux/mm/page_kasan_tag.h @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_PAGE_KASAN_TAG_H +#define _LINUX_MM_PAGE_KASAN_TAG_H + +#include + +struct page; + +#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) + +#include +#include // for struct page + +/* + * KASAN per-page tags are stored xor'ed with 0xff. This allows to avoid + * setting tags for all pages to native kernel tag value 0xff, as the defa= ult + * value 0x00 maps to 0xff. + */ + +static inline u8 page_kasan_tag(const struct page *page) +{ + u8 tag =3D KASAN_TAG_KERNEL; + + if (kasan_enabled()) { + tag =3D (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK; + tag ^=3D 0xff; + } + + return tag; +} + +static inline void page_kasan_tag_set(struct page *page, u8 tag) +{ + unsigned long old_flags, flags; + + if (!kasan_enabled()) + return; + + tag ^=3D 0xff; + old_flags =3D READ_ONCE(page->flags); + do { + flags =3D old_flags; + flags &=3D ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT); + flags |=3D (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT; + } while (unlikely(!try_cmpxchg(&page->flags, &old_flags, flags))); +} + +static inline void page_kasan_tag_reset(struct page *page) +{ + if (kasan_enabled()) + page_kasan_tag_set(page, KASAN_TAG_KERNEL); +} + +#else /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ + +static inline u8 page_kasan_tag(const struct page *page) +{ + return 0xff; +} + +static inline void page_kasan_tag_set(struct page *page, u8 tag) { } +static inline void page_kasan_tag_reset(struct page *page) { } + +#endif /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ + +#endif /* _LINUX_MM_PAGE_KASAN_TAG_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 438B54F613 for ; Tue, 5 Mar 2024 08:59:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629182; cv=none; b=awmDvqw/rBu/11MMeR0gKYVWZIUsxc5ZKur1QlID2i4pJCm1AoYu/t/NAetQyBmRzEjOHsH3H3VuC6gvpYP1Hrd7MMdYnyvcdHscD1GageVE5SaPIZ+caX3ToX5XocJJGHIyRM/wqlHGFToZog6HyNFmpEcHT3q5FXA0H9nBw20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629182; c=relaxed/simple; bh=WbgrH40EXEUiQSR1Yyn9b7sUNNxFQNIbVUvs4s+s9y8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OAclSrPPonRIvDf8jU4LOjbZxPh+HusNWuvIkr8HapKCIODvWLFyj7S2hnDZwcAbjHmnnbs4dyFlgQhwYpjX1l40ktwodp6WCJyxGrDgnmWc3GOo6VgKWo6R8+R1T9i9RGnMQb8Tz+fyoQ0ivrepz4zLWOBgy9VwIc/c/gRIedU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=H/j5i58F; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="H/j5i58F" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-a450615d1c4so399291866b.0 for ; Tue, 05 Mar 2024 00:59:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629178; x=1710233978; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9wE2HsEwQuIKqCaqriShH9hKkj+cYk+gvkRx/+6+3to=; b=H/j5i58F5d6+JwQmTL4vK1SY2m/f3ZgbJYujReQEdA3kNiIjxk4mEVrjAnoQm+X0jJ 9vymzw9OWABGj67ZT5FG+EftuhmO3IJX4hiLTcst04lYA71+NZ02DxmInPYohs2LGaud ZakuF+ByQPPaT6dSoSQc8XfWhRDpihotG89IW1yC5ZwwV2ARmym9AO6GTBeA8zwlY+wH 9Mjjy9QJm9QwL0BdZBSz2ngA46hDOakw4J3vKpi8NFAMPmLQDI57F7mBWcMMQ8TtmJnH 0/6crAJbOQ4LZPNkAcTX2yIIUrfQb6ko+789ZVVJ5dR9dX7cztdAOw3gHplu2ImC2wf0 0VYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629178; x=1710233978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9wE2HsEwQuIKqCaqriShH9hKkj+cYk+gvkRx/+6+3to=; b=AeNip4Gc2bRPRI01SLZQL1PDiNvG9lzGJ2Oqsc9ZYgcCwXK4TJ5gkDQeD9x+8yFnVf hIuc/9M5jcG5V/MZFuasNwl+HnkfKJxefG37uBwAP/DFbE3X+ocbbpfEtGbb8vRCYGMq J8Le0xo32oCR2CgdGnU9g8OHa9WFixvt7jzfIT9Pd8uWl6xFzm/IqNRcuuz1sHxwCJ3l 2Va72SgNxt23DIUvYR/1Z72qcQ7BLumhnKB+RaaYePMxPbEUFuXUhF6QrVm4uFeXq3bY K56rs55qTzqsDXNlLDWd+AB4n4H4hRh2nm2SIxZlhcT6VMzO/lbvE6nxZbMTW3zz6FM0 RLRw== X-Forwarded-Encrypted: i=1; AJvYcCWqgZp+qxwaud2eye/jFzaOXb2IOmhmo18cBJWh1oiMiCd59s3S35ppfVjDDKogmEE3jAGCWBDlmPjltpmPr3jqxrP+kCTZHMP/HvJ6 X-Gm-Message-State: AOJu0YyLglfMowhtSSvgbXvL+xEcQjTW19uLSjlzpVbN44yPBvuaxh1W RvlrsClK5KBTrb6yQQIhF992sfjzG8dk1vUNl3hgIeBGdwfMrH9+YQZYBrsvjQer/aqJYsOzRBL 3 X-Google-Smtp-Source: AGHT+IGclT8SPmvhKpvWUoSnvxxkyS58f2fpOwNpOo6zfJOP/D8VtwzwkRcJh8gYClLS0+CBEo/eNw== X-Received: by 2002:a17:906:6806:b0:a43:67fe:d484 with SMTP id k6-20020a170906680600b00a4367fed484mr2236562ejr.22.1709629178518; Tue, 05 Mar 2024 00:59:38 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:38 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 04/14] linux/mm.h: move section functions to mm/page_section.h Date: Tue, 5 Mar 2024 09:59:09 +0100 Message-Id: <20240305085919.1601395-5-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. page_to_section() is used by __page_to_pfn() (but asm-generic/memory_model.h does not include linux/mm.h). Thus, in order to be able to use anything that calls page_to_pfn(), linux/mm.h needs to be included. This would prevent us from moving page_address() to a separate header, because it calls lowmem_page_address() which in turn calls page_to_virt() and then page_to_pfn(). To prepare for this move, we move page_to_section() out of linux/mm.h into a separate lean header. Signed-off-by: Max Kellermann --- include/linux/mm.h | 18 +----------------- include/linux/mm/page_section.h | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 include/linux/mm/page_section.h diff --git a/include/linux/mm.h b/include/linux/mm.h index e140ee45f49c..79c1f924d4b5 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3,6 +3,7 @@ #define _LINUX_MM_H =20 #include +#include #include #include #include @@ -1637,10 +1638,6 @@ static inline bool is_nommu_shared_mapping(vm_flags_= t flags) } #endif =20 -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) -#define SECTION_IN_PAGE_FLAGS -#endif - /* * The identification function is mainly used by the buddy allocator for * determining if two pages could be buddies. We are not really identifying @@ -1838,19 +1835,6 @@ static inline pg_data_t *folio_pgdat(const struct fo= lio *folio) return page_pgdat(&folio->page); } =20 -#ifdef SECTION_IN_PAGE_FLAGS -static inline void set_page_section(struct page *page, unsigned long secti= on) -{ - page->flags &=3D ~(SECTIONS_MASK << SECTIONS_PGSHIFT); - page->flags |=3D (section & SECTIONS_MASK) << SECTIONS_PGSHIFT; -} - -static inline unsigned long page_to_section(const struct page *page) -{ - return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; -} -#endif - /** * folio_pfn - Return the Page Frame Number of a folio. * @folio: The folio. diff --git a/include/linux/mm/page_section.h b/include/linux/mm/page_sectio= n.h new file mode 100644 index 000000000000..e4558c2691b8 --- /dev/null +++ b/include/linux/mm/page_section.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_PAGE_SECTION_H +#define _LINUX_MM_PAGE_SECTION_H + +#include // for struct page +#include // for SECTIONS_* + +#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#define SECTION_IN_PAGE_FLAGS + +static inline void set_page_section(struct page *page, unsigned long secti= on) +{ + page->flags &=3D ~(SECTIONS_MASK << SECTIONS_PGSHIFT); + page->flags |=3D (section & SECTIONS_MASK) << SECTIONS_PGSHIFT; +} + +static inline unsigned long page_to_section(const struct page *page) +{ + return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; +} +#endif + +#endif /* _LINUX_MM_PAGE_SECTION_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79D31524BC for ; Tue, 5 Mar 2024 08:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629183; cv=none; b=rsFYETTUFfSZJHznlTdZp0cPtwULsbv+1+MX0zl+ZowsEY6wrSxT01BpPk+KifKH27QkzE9EfrZOvzmfRC1mr7WNBWYniWdXth33xtojlM30OhA5m8/+mUL6DVUWJj61H+lJXSA6DKPYLu/jERfvoGvBaC6pLyFSX8gu/T0X4+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629183; c=relaxed/simple; bh=7TBD917famya0UMoNWGhR2gZVEy1ZqrdJunlSs1U06E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ADln2p4Ue3RytwzWhOqsow3gQceCF1Qf06l3GOLi5zzf5vGPV0trqLzlfBlh39DArVTFFCogNpR3osGjcp8hPr+rW/vRXtXvPep7WYcwV9u/ILYyhGOL8cY/hJx19a2KfsE1BWE4K/wggiALg2l1e3swOJ/Ore1zz+VKbQhhQng= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=LZG8Jhex; arc=none smtp.client-ip=209.85.208.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="LZG8Jhex" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5654f700705so7369279a12.1 for ; Tue, 05 Mar 2024 00:59:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629180; x=1710233980; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9QtTxRX/inj0OtKTHCIe6FPb0V6jffrKP/nT087XKzU=; b=LZG8JhexkCR1aPdYJudJUIUnHFDJjL5tzAwVlRrIzR85RCqmJewAsPdTQ/Wvdi/hly qMhScuNL1LPflSHd/y/aG29LcdppHtlcj18bAhuwZ4vziOvV45oq8C3hQBp/iNOb2/0m X4oYAJkiKJ8j7GM3EaDxzs/gPH3nkh3VAveb2JBFDF60KWObHZSw7JNVd5oOpAOy/kjx anb6AqyL55fMmEQ0ST+qcfA0itmVr/asmY+2j0SrAO1wD7WsKICQ3p/CFdP3OCeEuOeh Zf4IgkYp/+IhDH9+E+F1oewzPFKKdLhZ69ypVOS4pTw0ola3FJ8vFmmheBKoVzxurwO4 S52g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629180; x=1710233980; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9QtTxRX/inj0OtKTHCIe6FPb0V6jffrKP/nT087XKzU=; b=oEqPFVbOGln/5KlMSnleK2eEPSzbgYXDTLles5Bl2MTkBOXYxCaPfi/z2XKYNbCfs3 iNoJaBetFediAIBmYhvgSWG+996UgfnNnRwg4NGVejTG0rr/goyRckFmuRp3jHd91hyL 8zluOF7CKTFVFpi/xVzi6QNaKbvWcDmjJG8EcxOQlePBoyFEtYYoljKciwmuIsufHYPJ jkmEY97k2kDjawQ+5lKn1yEqC1F+pa+lAl2dk8MA0a6HQ2mGNLyHy3USmErpmRpOUBYZ 0z4TV2Id9+8CkLFqtG74miEBXUypyzpHgvuH6ArW/898FD2JU1wZKXkcxedGtfKFH2t4 T2jw== X-Forwarded-Encrypted: i=1; AJvYcCXGx9122h78RVJi8erRloiI01H6tJrCV20Pr3YKgTnqDTqiMBEsM2N8M0GvEOyJOPEDWqadUfDn3wBNGx8VxQOlnCabtsbbmIIKmTd1 X-Gm-Message-State: AOJu0YzBhKG6mPnQ+Hdjg3M5AtwGGjM10Y2E67GFqyYRSK9y7L3uPi2b BUQji8ORItpkVMxxA+oLYkgpMZRDBC0tQkpZbOF2JCh6z4SuTYma6POGfyjiSjCOvj8J9OUCa1x b X-Google-Smtp-Source: AGHT+IGLVXgC2Q8vwJVeBVQ7VcbMya+GmcQDX1B/t3cUkKCgkZulprKrnzJI+ititEHBWTC1kz24QQ== X-Received: by 2002:a17:906:3442:b0:a44:3ec9:1fd3 with SMTP id d2-20020a170906344200b00a443ec91fd3mr6469936ejb.30.1709629179998; Tue, 05 Mar 2024 00:59:39 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:38 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 05/14] linux/mm.h: move page_address() and others to mm/page_address.h Date: Tue, 5 Mar 2024 09:59:10 +0100 Message-Id: <20240305085919.1601395-6-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. page_address() is used by the following popular headers: - linux/bio.h - linux/bvec.h - linux/highmem.h - linux/scatterlist.h - linux/skbuff.h Moving it to a separate lean header will allow us to avoid the dependency on linux/mm.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 56 +------------------------- include/linux/mm/page_address.h | 71 +++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 55 deletions(-) create mode 100644 include/linux/mm/page_address.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 79c1f924d4b5..713cedc03b88 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,7 +2,7 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 -#include +#include #include #include #include @@ -104,10 +104,6 @@ extern int mmap_rnd_compat_bits __read_mostly; #define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x), 0)) #endif =20 -#ifndef page_to_virt -#define page_to_virt(x) __va(PFN_PHYS(page_to_pfn(x))) -#endif - #ifndef lm_alias #define lm_alias(x) __va(__pa_symbol(x)) #endif @@ -211,14 +207,6 @@ int overcommit_kbytes_handler(struct ctl_table *, int,= void *, size_t *, int overcommit_policy_handler(struct ctl_table *, int, void *, size_t *, loff_t *); =20 -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) -#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) -#define folio_page_idx(folio, p) (page_to_pfn(p) - folio_pfn(folio)) -#else -#define nth_page(page,n) ((page) + (n)) -#define folio_page_idx(folio, p) ((p) - &(folio)->page) -#endif - /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) =20 @@ -2137,44 +2125,6 @@ static inline int arch_make_folio_accessible(struct = folio *folio) */ #include =20 -static __always_inline void *lowmem_page_address(const struct page *page) -{ - return page_to_virt(page); -} - -#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) -#define HASHED_PAGE_VIRTUAL -#endif - -#if defined(WANT_PAGE_VIRTUAL) -static inline void *page_address(const struct page *page) -{ - return page->virtual; -} -static inline void set_page_address(struct page *page, void *address) -{ - page->virtual =3D address; -} -#define page_address_init() do { } while(0) -#endif - -#if defined(HASHED_PAGE_VIRTUAL) -void *page_address(const struct page *page); -void set_page_address(struct page *page, void *virtual); -void page_address_init(void); -#endif - -#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) -#define page_address(page) lowmem_page_address(page) -#define set_page_address(page, address) do { } while(0) -#define page_address_init() do { } while(0) -#endif - -static inline void *folio_address(const struct folio *folio) -{ - return page_address(&folio->page); -} - extern pgoff_t __page_file_index(struct page *page); =20 /* @@ -2237,10 +2187,6 @@ static inline void clear_page_pfmemalloc(struct page= *page) */ extern void pagefault_out_of_memory(void); =20 -#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) -#define offset_in_thp(page, p) ((unsigned long)(p) & (thp_size(page) - 1)) -#define offset_in_folio(folio, p) ((unsigned long)(p) & (folio_size(folio)= - 1)) - /* * Parameter block passed down to zap_pte_range in exceptional cases. */ diff --git a/include/linux/mm/page_address.h b/include/linux/mm/page_addres= s.h new file mode 100644 index 000000000000..e1aaacc5003f --- /dev/null +++ b/include/linux/mm/page_address.h @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_PAGE_ADDRESS_H +#define _LINUX_MM_PAGE_ADDRESS_H + +#include // for struct page +#include // needed by the page_to_virt() macro= on some architectures (e.g. arm64) +#include // for PAGE_MASK, page_to_virt() + +#if defined(CONFIG_FLATMEM) +#include // for memmap (used by __pfn_to_page()) +#elif defined(CONFIG_SPARSEMEM_VMEMMAP) +#include // for vmemmap (used by __pfn_to_page()) +#elif defined(CONFIG_SPARSEMEM) +#include // for page_to_section() (used by __pag= e_to_pfn()) +#endif + +#ifndef page_to_virt +#define page_to_virt(x) __va(PFN_PHYS(page_to_pfn(x))) +#endif + +#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) +#define folio_page_idx(folio, p) (page_to_pfn(p) - folio_pfn(folio)) +#else +#define nth_page(page,n) ((page) + (n)) +#define folio_page_idx(folio, p) ((p) - &(folio)->page) +#endif + +static __always_inline void *lowmem_page_address(const struct page *page) +{ + return page_to_virt(page); +} + +#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) +#define HASHED_PAGE_VIRTUAL +#endif + +#if defined(WANT_PAGE_VIRTUAL) +static inline void *page_address(const struct page *page) +{ + return page->virtual; +} +static inline void set_page_address(struct page *page, void *address) +{ + page->virtual =3D address; +} +#define page_address_init() do { } while(0) +#endif + +#if defined(HASHED_PAGE_VIRTUAL) +void *page_address(const struct page *page); +void set_page_address(struct page *page, void *virtual); +void page_address_init(void); +#endif + +#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) +#define page_address(page) lowmem_page_address(page) +#define set_page_address(page, address) do { } while(0) +#define page_address_init() do { } while(0) +#endif + +static inline void *folio_address(const struct folio *folio) +{ + return page_address(&folio->page); +} + +#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) +#define offset_in_thp(page, p) ((unsigned long)(p) & (thp_size(page) - 1)) +#define offset_in_folio(folio, p) ((unsigned long)(p) & (folio_size(folio)= - 1)) + +#endif /* _LINUX_MM_PAGE_ADDRESS_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EEE352F99 for ; Tue, 5 Mar 2024 08:59:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629184; cv=none; b=lDvaoRC5fBi1XmND8xJbOLu7Mzy1Dm30861xF0ftgMMoQLRa3QtreXXjx886dfsk/ojyp+9FnsUVJLjBHG/wZbCvoJHC+27IqESMXg3/pofVQIwrzUJr2BKT131FYBE7ifgKG2yjLTggqpkfNtjHHHZNova0rUoI68zUMLfn8AU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629184; c=relaxed/simple; bh=oP7Nqn8yuoYUkUvIrSzyGSI4sXVkm22lBDg3rwCJ9kE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Zfnlt5cWHtMCXmHdLWAvg4ccaqJqJGKnzH4nssRLaVflKAWiuGxNaBaRrAG0f2g9JKu4rsA9ZPYJ9HZgN0J3xLgk+SYyb6QVseAx4fv2GkzqaK1lpHCz1B++tXG3+0IV7qPbt+CqBQ9dDkz/f6aosqYtJyNEREEBHD6P2Zqjr/0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=diy9ABWE; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="diy9ABWE" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-a450bedffdfso262644366b.3 for ; Tue, 05 Mar 2024 00:59:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629181; x=1710233981; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pOCd08dVcNL3Vsd080U9IACgrN+4/kX0/WIiYLCuiY0=; b=diy9ABWEgBK0mLMVE7HtEmQWIP6Dn+Y8F4+OYErmkEpPn41025AKYNQAwf0/779sWn q+xyxz1g59ieR2YLZWjiKd9QPi9j0k033JoTGaw3IMcPcFQ4tMW0iIZ6EOSV9XalLy9M uJ86HBYslFAzqxc8ofnqLoRTMnNlmO4k1C1r6XHu9fdcpAffMPXp8kv+snAx1gapjDPL n9EnenUJUjQ6mn+b4UFEkMyY13hTylbmST7DLl1KrMhSRQrCKqzdbtUiEpHP9KzW/2tz l9HDQjTS823YUQ3OARnap3YS4Q3VHNxUJKyaQGqcqTKicnKyAJZmh7P32LoKEFhAxSxS xtfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629181; x=1710233981; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pOCd08dVcNL3Vsd080U9IACgrN+4/kX0/WIiYLCuiY0=; b=AYHAL9yhZZ8a12fTeU5vHdPffoODmHVpJTqcu5A4OWWy+fuCyhsudsKbFyA9q1Ld0d 9geutzytBiZtoGYWIor8JOMnF/W6NkkTLKvzUt3B1SyWCNwLKhFW0NNkvmQdfIOw2T1/ xGreuIbVkJ0lMuvGw5cNoohq0+Vv4kmFJmvnyVjZ4HmVO7LDQJfS7fJu0qGBMJhFt5jd R/cVMWskApoSXmmy5VzFVeiJkPe36MUoi7yZUCsAvVaG5j/wdfD/6nSUHj+Uz1ZIN8Sz ayGV5QuoBQq5xVwnjHOGdSCWssnt6uhIqFOAvNY4y52eeiBGD64g+DCVPWdGKTP+tGwo /dPg== X-Forwarded-Encrypted: i=1; AJvYcCXGJBZwo1YrzwaMXCGxGgnklCrKd06kkvGFrBB70KWCD9Q8r1GN5/GXeAVL82UqlvKLcMKCqMOA6TnFj9uBCsvaEkaJF2gVhDICqQD+ X-Gm-Message-State: AOJu0Ywsc4NI7kAqt9FotC40mw3xbo3UhpqKUhmtuVi2iwASNyhPrPi3 63FmljwVIUvnZYvKpgwyRFZ1Agfro+WueIvTLqOpri9qPqOKBkbCeyf7sYg23Yg= X-Google-Smtp-Source: AGHT+IGqfqDUczGGo3QetAY7OAT6x3XRZvle5Qp1hnV3EYWTVeS5PH/gGnq4+ZcDT1bZzO9ng+chBA== X-Received: by 2002:a17:906:ca46:b0:a3f:2ef9:598a with SMTP id jx6-20020a170906ca4600b00a3f2ef9598amr7729507ejb.36.1709629180945; Tue, 05 Mar 2024 00:59:40 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:40 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 06/14] linux/mm.h: move folio_size(), ... to mm/folio_size.h Date: Tue, 5 Mar 2024 09:59:11 +0100 Message-Id: <20240305085919.1601395-7-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. folio_size()/page_size() are used by the following popular headers: - linux/highmem.h - linux/iov_iter.h - linux/pagemap.h Moving them to a separate lean header will allow us to avoid the dependency on linux/mm.h. Additionally, it allows us to move folio_next() to a separate header, because it needs folio_nr_pages() which is also moved to folio_size.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 140 +------------------------------ include/linux/mm/folio_size.h | 150 ++++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 139 deletions(-) create mode 100644 include/linux/mm/folio_size.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 713cedc03b88..0d291ff61db3 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,6 +2,7 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 +#include #include #include #include @@ -1068,38 +1069,6 @@ int vma_is_stack_for_current(struct vm_area_struct *= vma); struct mmu_gather; struct inode; =20 -/* - * compound_order() can be called without holding a reference, which means - * that niceties like page_folio() don't work. These callers should be - * prepared to handle wild return values. For example, PG_head may be - * set before the order is initialised, or this may be a tail page. - * See compaction.c for some good examples. - */ -static inline unsigned int compound_order(struct page *page) -{ - struct folio *folio =3D (struct folio *)page; - - if (!test_bit(PG_head, &folio->flags)) - return 0; - return folio->_flags_1 & 0xff; -} - -/** - * folio_order - The allocation order of a folio. - * @folio: The folio. - * - * A folio is composed of 2^order pages. See get_order() for the definiti= on - * of order. - * - * Return: The order of the folio. - */ -static inline unsigned int folio_order(struct folio *folio) -{ - if (!folio_test_large(folio)) - return 0; - return folio->_flags_1 & 0xff; -} - #include =20 /* @@ -1306,39 +1275,6 @@ unsigned long nr_free_buffer_pages(void); =20 void destroy_large_folio(struct folio *folio); =20 -/* Returns the number of bytes in this potentially compound page. */ -static inline unsigned long page_size(struct page *page) -{ - return PAGE_SIZE << compound_order(page); -} - -/* Returns the number of bits needed for the number of bytes in a page */ -static inline unsigned int page_shift(struct page *page) -{ - return PAGE_SHIFT + compound_order(page); -} - -/** - * thp_order - Order of a transparent huge page. - * @page: Head page of a transparent huge page. - */ -static inline unsigned int thp_order(struct page *page) -{ - VM_BUG_ON_PGFLAGS(PageTail(page), page); - return compound_order(page); -} - -/** - * thp_size - Size of a transparent huge page. - * @page: Head page of a transparent huge page. - * - * Return: Number of bytes in this page. - */ -static inline unsigned long thp_size(struct page *page) -{ - return PAGE_SIZE << thp_order(page); -} - #ifdef CONFIG_MMU /* * Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when @@ -1979,23 +1915,6 @@ static inline void set_page_links(struct page *page,= enum zone_type zone, #endif } =20 -/** - * folio_nr_pages - The number of pages in the folio. - * @folio: The folio. - * - * Return: A positive power of two. - */ -static inline long folio_nr_pages(struct folio *folio) -{ - if (!folio_test_large(folio)) - return 1; -#ifdef CONFIG_64BIT - return folio->_folio_nr_pages; -#else - return 1L << (folio->_flags_1 & 0xff); -#endif -} - /* Only hugetlbfs can allocate folios larger than MAX_ORDER */ #ifdef CONFIG_ARCH_HAS_GIGANTIC_PAGE #define MAX_FOLIO_NR_PAGES (1UL << PUD_ORDER) @@ -2003,33 +1922,6 @@ static inline long folio_nr_pages(struct folio *foli= o) #define MAX_FOLIO_NR_PAGES MAX_ORDER_NR_PAGES #endif =20 -/* - * compound_nr() returns the number of pages in this potentially compound - * page. compound_nr() can be called on a tail page, and is defined to - * return 1 in that case. - */ -static inline unsigned long compound_nr(struct page *page) -{ - struct folio *folio =3D (struct folio *)page; - - if (!test_bit(PG_head, &folio->flags)) - return 1; -#ifdef CONFIG_64BIT - return folio->_folio_nr_pages; -#else - return 1L << (folio->_flags_1 & 0xff); -#endif -} - -/** - * thp_nr_pages - The number of regular pages in this huge page. - * @page: The head page of a huge page. - */ -static inline int thp_nr_pages(struct page *page) -{ - return folio_nr_pages((struct folio *)page); -} - /** * folio_next - Move to the next physical folio. * @folio: The folio we're currently operating on. @@ -2049,36 +1941,6 @@ static inline struct folio *folio_next(struct folio = *folio) return (struct folio *)folio_page(folio, folio_nr_pages(folio)); } =20 -/** - * folio_shift - The size of the memory described by this folio. - * @folio: The folio. - * - * A folio represents a number of bytes which is a power-of-two in size. - * This function tells you which power-of-two the folio is. See also - * folio_size() and folio_order(). - * - * Context: The caller should have a reference on the folio to prevent - * it from being split. It is not necessary for the folio to be locked. - * Return: The base-2 logarithm of the size of this folio. - */ -static inline unsigned int folio_shift(struct folio *folio) -{ - return PAGE_SHIFT + folio_order(folio); -} - -/** - * folio_size - The number of bytes in a folio. - * @folio: The folio. - * - * Context: The caller should have a reference on the folio to prevent - * it from being split. It is not necessary for the folio to be locked. - * Return: The number of bytes in this folio. - */ -static inline size_t folio_size(struct folio *folio) -{ - return PAGE_SIZE << folio_order(folio); -} - /** * folio_estimated_sharers - Estimate the number of sharers of a folio. * @folio: The folio. diff --git a/include/linux/mm/folio_size.h b/include/linux/mm/folio_size.h new file mode 100644 index 000000000000..dd8af39ef572 --- /dev/null +++ b/include/linux/mm/folio_size.h @@ -0,0 +1,150 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_FOLIO_SIZE_H +#define _LINUX_MM_FOLIO_SIZE_H + +#include // for test_bit() +#include // for VM_BUG_ON_PGFLAGS() +#include // for struct page +#include // for folio_test_large() +#include // for PAGE_SIZE, PAGE_SHIFT + +/* + * compound_order() can be called without holding a reference, which means + * that niceties like page_folio() don't work. These callers should be + * prepared to handle wild return values. For example, PG_head may be + * set before the order is initialised, or this may be a tail page. + * See compaction.c for some good examples. + */ +static inline unsigned int compound_order(struct page *page) +{ + struct folio *folio =3D (struct folio *)page; + + if (!test_bit(PG_head, &folio->flags)) + return 0; + return folio->_flags_1 & 0xff; +} + +/** + * folio_order - The allocation order of a folio. + * @folio: The folio. + * + * A folio is composed of 2^order pages. See get_order() for the definiti= on + * of order. + * + * Return: The order of the folio. + */ +static inline unsigned int folio_order(struct folio *folio) +{ + if (!folio_test_large(folio)) + return 0; + return folio->_flags_1 & 0xff; +} + +/* Returns the number of bytes in this potentially compound page. */ +static inline unsigned long page_size(struct page *page) +{ + return PAGE_SIZE << compound_order(page); +} + +/* Returns the number of bits needed for the number of bytes in a page */ +static inline unsigned int page_shift(struct page *page) +{ + return PAGE_SHIFT + compound_order(page); +} + +/** + * thp_order - Order of a transparent huge page. + * @page: Head page of a transparent huge page. + */ +static inline unsigned int thp_order(struct page *page) +{ + VM_BUG_ON_PGFLAGS(PageTail(page), page); + return compound_order(page); +} + +/** + * thp_size - Size of a transparent huge page. + * @page: Head page of a transparent huge page. + * + * Return: Number of bytes in this page. + */ +static inline unsigned long thp_size(struct page *page) +{ + return PAGE_SIZE << thp_order(page); +} + +/** + * folio_nr_pages - The number of pages in the folio. + * @folio: The folio. + * + * Return: A positive power of two. + */ +static inline long folio_nr_pages(struct folio *folio) +{ + if (!folio_test_large(folio)) + return 1; +#ifdef CONFIG_64BIT + return folio->_folio_nr_pages; +#else + return 1L << (folio->_flags_1 & 0xff); +#endif +} + +/* + * compound_nr() returns the number of pages in this potentially compound + * page. compound_nr() can be called on a tail page, and is defined to + * return 1 in that case. + */ +static inline unsigned long compound_nr(struct page *page) +{ + struct folio *folio =3D (struct folio *)page; + + if (!test_bit(PG_head, &folio->flags)) + return 1; +#ifdef CONFIG_64BIT + return folio->_folio_nr_pages; +#else + return 1L << (folio->_flags_1 & 0xff); +#endif +} + +/** + * thp_nr_pages - The number of regular pages in this huge page. + * @page: The head page of a huge page. + */ +static inline int thp_nr_pages(struct page *page) +{ + return folio_nr_pages((struct folio *)page); +} + +/** + * folio_shift - The size of the memory described by this folio. + * @folio: The folio. + * + * A folio represents a number of bytes which is a power-of-two in size. + * This function tells you which power-of-two the folio is. See also + * folio_size() and folio_order(). + * + * Context: The caller should have a reference on the folio to prevent + * it from being split. It is not necessary for the folio to be locked. + * Return: The base-2 logarithm of the size of this folio. + */ +static inline unsigned int folio_shift(struct folio *folio) +{ + return PAGE_SHIFT + folio_order(folio); +} + +/** + * folio_size - The number of bytes in a folio. + * @folio: The folio. + * + * Context: The caller should have a reference on the folio to prevent + * it from being split. It is not necessary for the folio to be locked. + * Return: The number of bytes in this folio. + */ +static inline size_t folio_size(struct folio *folio) +{ + return PAGE_SIZE << folio_order(folio); +} + +#endif /* _LINUX_MM_FOLIO_SIZE_H_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16CCD537FF for ; Tue, 5 Mar 2024 08:59:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629186; cv=none; b=akgxxGVNeBJ+0vr7YSkObBTWjEnIzsmfYKSSQjGCE7Lpl5GXn+wR+VSozEB8Zm+kKBS2QijKqKWdhnVy8lcNDznTKx2dTAiAvtmwgpNgtoK8+EGRmlVf1o5BdAsWqblR92Yhkl1m49w7/nkYEb3UE7iK3A9uhY5EHoEu8SFX0Ow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629186; c=relaxed/simple; bh=vokolUNNjWemvOpIVyP0bPJJZO5YFTXD/1zFkqXp+GE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=s0x2RVq6/1n04CwWzQHXa+yp0f2g/7MvkQ/g6zj0ZcrrFsDmQJlO7FyhCdMMHjN+Ng0F1JnVGHY1Udzvr9KYXsjUUZj2o9rfNOqPeV4dW2bt/NEKKo3zXO/EWddLrGmPI2zFHFk1zdfL8niR7BsOjjQKsTzMsMMvihSHRU4IVfU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=JIOjgppD; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="JIOjgppD" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-a28a6cef709so869757866b.1 for ; Tue, 05 Mar 2024 00:59:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629182; x=1710233982; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tPRAHmknVEgQF0+eI0cWSAplWfhzwY2EyeY5NbL7yXE=; b=JIOjgppDMyvjQA+LXNPXxlROhoBuhE3PDuqaZC40kzuCdd7moO/mR97RA3oPUKj6rZ LwNxACZzpCfc4Z/Ms23AFFrCTpX/GtduDMzndBh6LDoee2zmojtAi+vraRRMS1dXX5bW tHCf60ka4DT2UxnblTSVwhsuo4sZZZm84sRDwaAI79wKi/J82KtfFFvvgmzDXgu8RNwp vRMUijXyC1MZZTau8hYFUFM9Ce74fKTcSmGtcfP02XXcbjSAOb2Wmy/BWLdHTMomrvFx DI97z7cYpeKuBeHmpSO56sA9kyQmKXWpogm9zXnmVQV44vOMssL/b8TICxNw4iGbqeTM 21ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629182; x=1710233982; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tPRAHmknVEgQF0+eI0cWSAplWfhzwY2EyeY5NbL7yXE=; b=YRPvat1akoMohCrNuAz5YB8qI3ENuvyuxT5IRSdZcFtFu9PrdL9LeCSAr3vq8Jz8Ls iV8cTpFgkO6KlcRarmZ0MVrMTI8KlJB3PTUshOrlCO8jI0jdmAt9TQ5uWuldP8Jx2c4N v4LEivKHdwQfuO46TlT+/b7l5bTYWcquph8G3ZuV8EdTJbpHPiALWG/vVkZYPdbZSb2c cMAXCnq7u/yUVKpvjqwKaUndHn6a9XXRzom446XzvrojPP9YlHoH6Aqq3dr2blNnpnZg w1bOZmM+WlCnkq1ZoV6BSorVH7+LsXJMIwXHLNs7zURgaVU4z+qdkvF+QSeeD7khSaec jEqg== X-Forwarded-Encrypted: i=1; AJvYcCUkYGFu4D9IaooT8jIiZ+fWmu7Ia76LKQg5RNLmc7y67VFxeLz2JYyepndX7yNmEUzzLqdokB7c9IQdmN6KPlhbEUYlPFPH8kHooyeu X-Gm-Message-State: AOJu0YzzBQVPk1+xKummRuzqre+8tr8ULvHz47tYnirmDLphqsNp4aFQ ZQvCyfqIofPqCUm7YDOXFMCgxThu+pcbw7RtpKFAe6pVKAj2TxlCDOcgZ88cwhs= X-Google-Smtp-Source: AGHT+IF3qHNB69qnbIhdOhCn87w4BHGGC/TCaWgfYQYaremgBcPzr7gTWpssGSWJR1NdgYL1iKdKJA== X-Received: by 2002:a17:906:37d6:b0:a45:f05:7e10 with SMTP id o22-20020a17090637d600b00a450f057e10mr4709827ejc.24.1709629182494; Tue, 05 Mar 2024 00:59:42 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:41 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 07/14] linux/mm.h: move folio_next() to mm/folio_next.h Date: Tue, 5 Mar 2024 09:59:12 +0100 Message-Id: <20240305085919.1601395-8-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. folio_next() is used by linux/bio.h. Moving it to a separate lean header will allow us to avoid the dependency on linux/mm.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 20 +------------------- include/linux/mm/folio_next.h | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 include/linux/mm/folio_next.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 0d291ff61db3..e6c2df977abc 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,6 +2,7 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 +#include #include #include #include @@ -1922,25 +1923,6 @@ static inline void set_page_links(struct page *page,= enum zone_type zone, #define MAX_FOLIO_NR_PAGES MAX_ORDER_NR_PAGES #endif =20 -/** - * folio_next - Move to the next physical folio. - * @folio: The folio we're currently operating on. - * - * If you have physically contiguous memory which may span more than - * one folio (eg a &struct bio_vec), use this function to move from one - * folio to the next. Do not use it if the memory is only virtually - * contiguous as the folios are almost certainly not adjacent to each - * other. This is the folio equivalent to writing ``page++``. - * - * Context: We assume that the folios are refcounted and/or locked at a - * higher level and do not adjust the reference counts. - * Return: The next struct folio. - */ -static inline struct folio *folio_next(struct folio *folio) -{ - return (struct folio *)folio_page(folio, folio_nr_pages(folio)); -} - /** * folio_estimated_sharers - Estimate the number of sharers of a folio. * @folio: The folio. diff --git a/include/linux/mm/folio_next.h b/include/linux/mm/folio_next.h new file mode 100644 index 000000000000..7016e303439c --- /dev/null +++ b/include/linux/mm/folio_next.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_FOLIO_NEXT_H +#define _LINUX_MM_FOLIO_NEXT_H + +#include // for folio_nr_pages() +#include // for nth_page(), needed by folio_page= () + +/** + * folio_next - Move to the next physical folio. + * @folio: The folio we're currently operating on. + * + * If you have physically contiguous memory which may span more than + * one folio (eg a &struct bio_vec), use this function to move from one + * folio to the next. Do not use it if the memory is only virtually + * contiguous as the folios are almost certainly not adjacent to each + * other. This is the folio equivalent to writing ``page++``. + * + * Context: We assume that the folios are refcounted and/or locked at a + * higher level and do not adjust the reference counts. + * Return: The next struct folio. + */ +static inline struct folio *folio_next(struct folio *folio) +{ + return (struct folio *)folio_page(folio, folio_nr_pages(folio)); +} + +#endif /* _LINUX_MM_FOLIO_NEXT_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76626548EB for ; Tue, 5 Mar 2024 08:59:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629187; cv=none; b=Nw63A8I01OcGLnGrtgh9OLCkKuHrEaAwW9kr3MaMBb3dJpvJsDxeZpl4YIhwDAuCZiCiN1BRxlKZrt0jOoYmxbZrIQxWc8okz38d6xikySnuLAHkrDs5FZ4i1sfQQH2zXYfSPqgk85e9Uo4fJXG2B1NguFYJdcvEwWX8e9HeUH0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629187; c=relaxed/simple; bh=MIHkIFvab96I9R+obMDPY3PJG78+nlUxbYh17e4Y/Ic=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=th2oFXtNEZ9nbFQnnvLtRRAGvz/IVKgCPh92w6ur2HKKLSTZcOSqDo/vJQRaAEjrYhx6GOr8hyDXzIP7x2aOnnGDiIjhI7+uyVQMPqrajzH/lo9YrQHiFICpaYpYmfTuTQWxddnv+SA756tnPc4tgbfoiPanrQsx+02gGKRM3+E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=MS0YRrc3; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="MS0YRrc3" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-a4499ef8b5aso388710166b.0 for ; Tue, 05 Mar 2024 00:59:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629184; x=1710233984; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TT7smv1j1+eH6dLDpyJyxapeCn0BRAoD8ideYTGL8g4=; b=MS0YRrc3yW10g1NPSI7oFkqq3W3SgNf1fZQ8YhgkJlKKsrGz87H+V6sjCCAjMrmX4h 3YybXiFpjxY7av378YGn+8+7yi7H20nYfXAElGcFrXLdH3fsTKTc/C/IaaWSH38Vcgcj Dm8gc5RWKs46SXMQjdFxJyZ1Ae95If6jTNoLSJERA/lwFJGVe/j9xbZy/ojRs/TVztyI wseCFP9jOmyWNfHWkVAvsOKXK3Ct3LRDq/OVWq32bfBiqEZ+ONOGLKLInqijYBiIpnAZ g3pM6vxnicvYY4KtzcCoAwEJjtiZovVzMHIeEPdOLTqw9Uoihq/1jt+a3pMML3MhJa5t JVJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629184; x=1710233984; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TT7smv1j1+eH6dLDpyJyxapeCn0BRAoD8ideYTGL8g4=; b=M71IFGax0eifmh+ftQYHUpHheDqBKLWzWipgS7w1wUoX1oOm8iLo4a+kOaa8BKbSBy taNPLPpENmOqwmP17DErBej9wY01QWBt3QaKUqz7/1gtdkMLOlu+XQ54oGGWiArHJV9T d1Lsr5DJUR2hgkkaYQRuPb7d3k0ktyvVo7jDUjosP4aVL4+KyjlFcETLdQUW/s+wEWFZ qdDeuhT3PFzimsYcnqwRv7POWXMhhAAP6uwppmE6ydwd4dKJBg7VTp9muwEgB91846LT ZLLlrYSjHmoUosBzqtpY8ISWehBnKFUwwQBG/0oLPIjpXrK/tV2SY6OKuIoiRzb7eX3s q3Ew== X-Forwarded-Encrypted: i=1; AJvYcCWRtAeYUvrvAUzvlPDhwpNsiOapsOn8wadPm9K1FgbDkfPsxQ4Rh+MJfYzUnmF7upFW5xTA+Odqie3eR00iboxQ786PezFs/KzEDmgU X-Gm-Message-State: AOJu0Ywl+9wQXdgPDNBSzpTeFryLenlKZ2k7jm/BHOEskikkt+UOqY1D vBQ5YAscwpJDl3qZ1th8aSwLZCkEBrHIIocIXwEgs85l+soFeuibJq/HE3XU784= X-Google-Smtp-Source: AGHT+IHtBtgNb5X5tWn9KArmVzxl5Jnk/MnYuiE1JbQjADDKG/XuWp5/tNkMjxChRCvuGWsrlF/Kqg== X-Received: by 2002:a17:906:c7c3:b0:a3e:34e8:626f with SMTP id dc3-20020a170906c7c300b00a3e34e8626fmr8169467ejb.66.1709629183860; Tue, 05 Mar 2024 00:59:43 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:42 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 08/14] linux/mm.h: move devmap-related declarations to mm/devmap_managed.h Date: Tue, 5 Mar 2024 09:59:13 +0100 Message-Id: <20240305085919.1601395-9-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. put_devmap_managed_page() is called by put_page(). Moving it to a separate header allows us to move put_page() to a separate lean header as well. Signed-off-by: Max Kellermann --- include/linux/mm.h | 25 +-------------------- include/linux/mm/devmap_managed.h | 37 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 24 deletions(-) create mode 100644 include/linux/mm/devmap_managed.h diff --git a/include/linux/mm.h b/include/linux/mm.h index e6c2df977abc..61f1312a626e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,6 +2,7 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 +#include #include #include #include @@ -1357,30 +1358,6 @@ vm_fault_t finish_fault(struct vm_fault *vmf); * back into memory. */ =20 -#if defined(CONFIG_ZONE_DEVICE) && defined(CONFIG_FS_DAX) -DECLARE_STATIC_KEY_FALSE(devmap_managed_key); - -bool __put_devmap_managed_page_refs(struct page *page, int refs); -static inline bool put_devmap_managed_page_refs(struct page *page, int ref= s) -{ - if (!static_branch_unlikely(&devmap_managed_key)) - return false; - if (!is_zone_device_page(page)) - return false; - return __put_devmap_managed_page_refs(page, refs); -} -#else /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ -static inline bool put_devmap_managed_page_refs(struct page *page, int ref= s) -{ - return false; -} -#endif /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ - -static inline bool put_devmap_managed_page(struct page *page) -{ - return put_devmap_managed_page_refs(page, 1); -} - /* 127: arbitrary random number, small enough to assemble well */ #define folio_ref_zero_or_close_to_overflow(folio) \ ((unsigned int) folio_ref_count(folio) + 127u <=3D 127u) diff --git a/include/linux/mm/devmap_managed.h b/include/linux/mm/devmap_ma= naged.h new file mode 100644 index 000000000000..0773529d80b2 --- /dev/null +++ b/include/linux/mm/devmap_managed.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_DEVMAP_MANAGED_H +#define _LINUX_MM_DEVMAP_MANAGED_H + +#include // for bool + +struct page; + +#if defined(CONFIG_ZONE_DEVICE) && defined(CONFIG_FS_DAX) + +#include // for DECLARE_STATIC_KEY_FALSE(), static_br= anch_unlikely() +#include // is_zone_device_page() + +DECLARE_STATIC_KEY_FALSE(devmap_managed_key); + +bool __put_devmap_managed_page_refs(struct page *page, int refs); +static inline bool put_devmap_managed_page_refs(struct page *page, int ref= s) +{ + if (!static_branch_unlikely(&devmap_managed_key)) + return false; + if (!is_zone_device_page(page)) + return false; + return __put_devmap_managed_page_refs(page, refs); +} +#else /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ +static inline bool put_devmap_managed_page_refs(struct page *page, int ref= s) +{ + return false; +} +#endif /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ + +static inline bool put_devmap_managed_page(struct page *page) +{ + return put_devmap_managed_page_refs(page, 1); +} + +#endif /* _LINUX_MM_DEVMAP_MANAGED_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9946A50246 for ; Tue, 5 Mar 2024 08:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629189; cv=none; b=CeXDmEQBb6WGuN8I8Px1zaJqRCtrRxhDbklfeujMjWtvLjLRkAEs3QsELImrPS3eOMUX9BPYWepehc9rKnIjOEVRsSbip/9g0DKU1lyiVt0OriQumq29QzhHo0Or6ZexVB7yhQ3Z8GIlKj+vgWZrhX3RZJnUlfD9v+LVY0CasIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629189; c=relaxed/simple; bh=EQUfjee+ktFtbPacxxVNShczG8NOQAbKrjDXd0cHtHY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TGr30Zxh5qlz3xpeIqxUBVC3InSizmmLQPRzgKm1nO+uR8RkCzipTKSwBWhEiqg4Ez9p9ZD291qn2/jc/z0aSVUQOIb3LigafZvzUo2D78qISut96wtOU7K1Qg4umrGbIGCYaS/QYC/VNKqbbUJbRUesN7FiO6C3wDhyWWlwNvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=i4KoDULJ; arc=none smtp.client-ip=209.85.208.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="i4KoDULJ" Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-2d3ee1c9ea9so7065061fa.3 for ; Tue, 05 Mar 2024 00:59:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629185; x=1710233985; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cowoIpweWt3L2bjBHT1kUeTpunMOhbiTNwgqFnKsuAs=; b=i4KoDULJGF1TugeIqJW3swhK3Dt1P6VvURV3h03c2V143ALkPJt1cJzjumZrlRyK3B IFe5uAd2T6+KV9iIiB3wwglMH7gkex4ZEKW6EhdWx/77OaWNUyTFFc4kX3db3hFDlOKA HneXQeElUfSgVXmHzMfyEXhA6Cdufvr5vxCmPQ7E0PcgOTB1vwoH5H/OoXztmbatFOGl GwZB88p2LUCfxEWfdd2FgI2UovLfny7mJft1VBiC9NKTwqjZcnMGaDa9xty+mzMpsyws THUiWvYV9gOdydPyv2JcNlX0yHWQlYOOhu2/IJYOyMVuW56armUSXko4LHM0nOuAn6dY Lbzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629185; x=1710233985; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cowoIpweWt3L2bjBHT1kUeTpunMOhbiTNwgqFnKsuAs=; b=vcx3+NBf3+9rTS2BUB5SmhSknbkr0s5jQlYWeqnuvshVbIbyJiW4QUYQPDztCc1XJl MEfrsK2AszjZorF3LFFgMVmSrNfL8cAU9pfNTNhRMKtaCdeuw8/2Ub5/tCyZy8qfhUu0 g5aDNLNJmKC/9dw/+Vmyuv1u+z+MArd5dQaxQb77KTCVvLnRLcQN+v/+IAas2vGQ2v3t stTUnjsAtjIBmuwKEfz/eIt/Ln9xqbpk0urS/f5B+af8KZhX9xRn4fdGxNOYlHFd1Z6w IbI4cEeF9kXNMyELSsf1QcBeJXSdnk3Ld3yE3/GUZUhZSJ5BgE681CdGPfRQVXIGmKEm B9GA== X-Forwarded-Encrypted: i=1; AJvYcCWsGbVhKWYawzhgO2jLJzHb//HOzw9U5kgGqUmdREI37CdZ6MpsCpYdQ0hJqph0CF6eBDupH0wBiJKMUXUpco4dIef9hak54QWW2NGw X-Gm-Message-State: AOJu0Yw1UcLmMlqhUdZ8SQcHUhlTUwFsT+KnpGTvTbpZajv84rb2UUgA X57zQqdGq7RZXCRM0xp1kLW4Z09cWbZrvme9WtD3QP61gRuXLZ1f8vlapNsy8j0= X-Google-Smtp-Source: AGHT+IGKngCTmPmeb81IUjSVUV+bTdylSFgdpzvBNEX+ZfYgXiwTu8YQIgQN2zwEsxNYEM8vJK3Vuw== X-Received: by 2002:a05:6512:1152:b0:513:5203:e255 with SMTP id m18-20020a056512115200b005135203e255mr793839lfg.7.1709629184681; Tue, 05 Mar 2024 00:59:44 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:44 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 09/14] linux/mm.h: move usage count functions to mm/folio_usage.h Date: Tue, 5 Mar 2024 09:59:14 +0100 Message-Id: <20240305085919.1601395-10-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare to reduce dependencies on linux/mm.h. This new header contains wrappers for the low-level functions from page_ref.h. By having those higher-level functions in a separate header, we can avoid their additional dependencies in the page_ref.h. Having these in a separate header will allow eliminating the dependency on linux/mm.h from these headers: - linux/skbuff.h - linux/swap.h Signed-off-by: Max Kellermann --- include/linux/mm.h | 172 +------------------------------ include/linux/mm/folio_usage.h | 182 +++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+), 171 deletions(-) create mode 100644 include/linux/mm/folio_usage.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 61f1312a626e..e8a914e7bebd 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2,9 +2,9 @@ #ifndef _LINUX_MM_H #define _LINUX_MM_H =20 -#include #include #include +#include #include #include #include @@ -1073,51 +1073,6 @@ struct inode; =20 #include =20 -/* - * Methods to modify the page usage count. - * - * What counts for a page usage: - * - cache mapping (page->mapping) - * - private data (page->private) - * - page mapped in a task's page tables, each mapping - * is counted separately - * - * Also, many kernel routines increase the page count before a critical - * routine so they can be sure the page doesn't go away from under them. - */ - -/* - * Drop a ref, return true if the refcount fell to zero (the page has no u= sers) - */ -static inline int put_page_testzero(struct page *page) -{ - VM_BUG_ON_PAGE(page_ref_count(page) =3D=3D 0, page); - return page_ref_dec_and_test(page); -} - -static inline int folio_put_testzero(struct folio *folio) -{ - return put_page_testzero(&folio->page); -} - -/* - * Try to grab a ref unless the page has a refcount of zero, return false = if - * that is the case. - * This can be called when MMU is off so it must not access - * any of the virtual mappings. - */ -static inline bool get_page_unless_zero(struct page *page) -{ - return page_ref_add_unless(page, 1, 0); -} - -static inline struct folio *folio_get_nontail_page(struct page *page) -{ - if (unlikely(!get_page_unless_zero(page))) - return NULL; - return (struct folio *)page; -} - extern int page_is_ram(unsigned long pfn); =20 enum { @@ -1266,8 +1221,6 @@ static inline struct folio *virt_to_folio(const void = *x) return page_folio(page); } =20 -void __folio_put(struct folio *folio); - void put_pages_list(struct list_head *pages); =20 void split_page(struct page *page, unsigned int order); @@ -1358,129 +1311,6 @@ vm_fault_t finish_fault(struct vm_fault *vmf); * back into memory. */ =20 -/* 127: arbitrary random number, small enough to assemble well */ -#define folio_ref_zero_or_close_to_overflow(folio) \ - ((unsigned int) folio_ref_count(folio) + 127u <=3D 127u) - -/** - * folio_get - Increment the reference count on a folio. - * @folio: The folio. - * - * Context: May be called in any context, as long as you know that - * you have a refcount on the folio. If you do not already have one, - * folio_try_get() may be the right interface for you to use. - */ -static inline void folio_get(struct folio *folio) -{ - VM_BUG_ON_FOLIO(folio_ref_zero_or_close_to_overflow(folio), folio); - folio_ref_inc(folio); -} - -static inline void get_page(struct page *page) -{ - folio_get(page_folio(page)); -} - -static inline __must_check bool try_get_page(struct page *page) -{ - page =3D compound_head(page); - if (WARN_ON_ONCE(page_ref_count(page) <=3D 0)) - return false; - page_ref_inc(page); - return true; -} - -/** - * folio_put - Decrement the reference count on a folio. - * @folio: The folio. - * - * If the folio's reference count reaches zero, the memory will be - * released back to the page allocator and may be used by another - * allocation immediately. Do not access the memory or the struct folio - * after calling folio_put() unless you can be sure that it wasn't the - * last reference. - * - * Context: May be called in process or interrupt context, but not in NMI - * context. May be called while holding a spinlock. - */ -static inline void folio_put(struct folio *folio) -{ - if (folio_put_testzero(folio)) - __folio_put(folio); -} - -/** - * folio_put_refs - Reduce the reference count on a folio. - * @folio: The folio. - * @refs: The amount to subtract from the folio's reference count. - * - * If the folio's reference count reaches zero, the memory will be - * released back to the page allocator and may be used by another - * allocation immediately. Do not access the memory or the struct folio - * after calling folio_put_refs() unless you can be sure that these weren't - * the last references. - * - * Context: May be called in process or interrupt context, but not in NMI - * context. May be called while holding a spinlock. - */ -static inline void folio_put_refs(struct folio *folio, int refs) -{ - if (folio_ref_sub_and_test(folio, refs)) - __folio_put(folio); -} - -void folios_put_refs(struct folio_batch *folios, unsigned int *refs); - -/* - * union release_pages_arg - an array of pages or folios - * - * release_pages() releases a simple array of multiple pages, and - * accepts various different forms of said page array: either - * a regular old boring array of pages, an array of folios, or - * an array of encoded page pointers. - * - * The transparent union syntax for this kind of "any of these - * argument types" is all kinds of ugly, so look away. - */ -typedef union { - struct page **pages; - struct folio **folios; - struct encoded_page **encoded_pages; -} release_pages_arg __attribute__ ((__transparent_union__)); - -void release_pages(release_pages_arg, int nr); - -/** - * folios_put - Decrement the reference count on an array of folios. - * @folios: The folios. - * - * Like folio_put(), but for a batch of folios. This is more efficient - * than writing the loop yourself as it will optimise the locks which need - * to be taken if the folios are freed. The folios batch is returned - * empty and ready to be reused for another batch; there is no need to - * reinitialise it. - * - * Context: May be called in process or interrupt context, but not in NMI - * context. May be called while holding a spinlock. - */ -static inline void folios_put(struct folio_batch *folios) -{ - folios_put_refs(folios, NULL); -} - -static inline void put_page(struct page *page) -{ - struct folio *folio =3D page_folio(page); - - /* - * For some devmap managed pages we need to catch refcount transition - * from 2 to 1: - */ - if (put_devmap_managed_page(&folio->page)) - return; - folio_put(folio); -} - /* * GUP_PIN_COUNTING_BIAS, and the associated functions that use it, overlo= ad * the page's refcount so that two separate items are tracked: the origina= l page diff --git a/include/linux/mm/folio_usage.h b/include/linux/mm/folio_usage.h new file mode 100644 index 000000000000..4a7e9cd74909 --- /dev/null +++ b/include/linux/mm/folio_usage.h @@ -0,0 +1,182 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_FOLIO_USAGE_H +#define _LINUX_MM_FOLIO_USAGE_H + +#include // for put_devmap_managed_page() +#include // for VM_BUG_ON_PAGE() +#include // for struct folio +#include + +struct folio_batch; + +/* + * Methods to modify the page usage count. + * + * What counts for a page usage: + * - cache mapping (page->mapping) + * - private data (page->private) + * - page mapped in a task's page tables, each mapping + * is counted separately + * + * Also, many kernel routines increase the page count before a critical + * routine so they can be sure the page doesn't go away from under them. + */ + +/* + * Drop a ref, return true if the refcount fell to zero (the page has no u= sers) + */ +static inline int put_page_testzero(struct page *page) +{ + VM_BUG_ON_PAGE(page_ref_count(page) =3D=3D 0, page); + return page_ref_dec_and_test(page); +} + +static inline int folio_put_testzero(struct folio *folio) +{ + return put_page_testzero(&folio->page); +} + +/* + * Try to grab a ref unless the page has a refcount of zero, return false = if + * that is the case. + * This can be called when MMU is off so it must not access + * any of the virtual mappings. + */ +static inline bool get_page_unless_zero(struct page *page) +{ + return page_ref_add_unless(page, 1, 0); +} + +static inline struct folio *folio_get_nontail_page(struct page *page) +{ + if (unlikely(!get_page_unless_zero(page))) + return NULL; + return (struct folio *)page; +} + +void __folio_put(struct folio *folio); + +/* 127: arbitrary random number, small enough to assemble well */ +#define folio_ref_zero_or_close_to_overflow(folio) \ + ((unsigned int) folio_ref_count(folio) + 127u <=3D 127u) + +/** + * folio_get - Increment the reference count on a folio. + * @folio: The folio. + * + * Context: May be called in any context, as long as you know that + * you have a refcount on the folio. If you do not already have one, + * folio_try_get() may be the right interface for you to use. + */ +static inline void folio_get(struct folio *folio) +{ + VM_BUG_ON_FOLIO(folio_ref_zero_or_close_to_overflow(folio), folio); + folio_ref_inc(folio); +} + +static inline void get_page(struct page *page) +{ + folio_get(page_folio(page)); +} + +static inline __must_check bool try_get_page(struct page *page) +{ + page =3D compound_head(page); + if (WARN_ON_ONCE(page_ref_count(page) <=3D 0)) + return false; + page_ref_inc(page); + return true; +} + +/** + * folio_put - Decrement the reference count on a folio. + * @folio: The folio. + * + * If the folio's reference count reaches zero, the memory will be + * released back to the page allocator and may be used by another + * allocation immediately. Do not access the memory or the struct folio + * after calling folio_put() unless you can be sure that it wasn't the + * last reference. + * + * Context: May be called in process or interrupt context, but not in NMI + * context. May be called while holding a spinlock. + */ +static inline void folio_put(struct folio *folio) +{ + if (folio_put_testzero(folio)) + __folio_put(folio); +} + +/** + * folio_put_refs - Reduce the reference count on a folio. + * @folio: The folio. + * @refs: The amount to subtract from the folio's reference count. + * + * If the folio's reference count reaches zero, the memory will be + * released back to the page allocator and may be used by another + * allocation immediately. Do not access the memory or the struct folio + * after calling folio_put_refs() unless you can be sure that these weren't + * the last references. + * + * Context: May be called in process or interrupt context, but not in NMI + * context. May be called while holding a spinlock. + */ +static inline void folio_put_refs(struct folio *folio, int refs) +{ + if (folio_ref_sub_and_test(folio, refs)) + __folio_put(folio); +} + +void folios_put_refs(struct folio_batch *folios, unsigned int *refs); + +/* + * union release_pages_arg - an array of pages or folios + * + * release_pages() releases a simple array of multiple pages, and + * accepts various different forms of said page array: either + * a regular old boring array of pages, an array of folios, or + * an array of encoded page pointers. + * + * The transparent union syntax for this kind of "any of these + * argument types" is all kinds of ugly, so look away. + */ +typedef union { + struct page **pages; + struct folio **folios; + struct encoded_page **encoded_pages; +} release_pages_arg __attribute__ ((__transparent_union__)); + +void release_pages(release_pages_arg, int nr); + +/** + * folios_put - Decrement the reference count on an array of folios. + * @folios: The folios. + * + * Like folio_put(), but for a batch of folios. This is more efficient + * than writing the loop yourself as it will optimise the locks which need + * to be taken if the folios are freed. The folios batch is returned + * empty and ready to be reused for another batch; there is no need to + * reinitialise it. + * + * Context: May be called in process or interrupt context, but not in NMI + * context. May be called while holding a spinlock. + */ +static inline void folios_put(struct folio_batch *folios) +{ + folios_put_refs(folios, NULL); +} + +static inline void put_page(struct page *page) +{ + struct folio *folio =3D page_folio(page); + + /* + * For some devmap managed pages we need to catch refcount transition + * from 2 to 1: + */ + if (put_devmap_managed_page(&folio->page)) + return; + folio_put(folio); +} + +#endif /* _LINUX_MM_FOLIO_USAGE_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0360154911 for ; Tue, 5 Mar 2024 08:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629188; cv=none; b=iBSCADBT82Ov2DVO94J+rtCnfPFW9RGVIaQTdm5x7qkXdlUrrMeyR1a1jY3axxQ7s55vMA1hYsTOJMpXJH5hSpdd7W+6cethxwNT+CLImjbtxMUB8jTWLfNHCqmgWMEQ4Qd1WPCL8knJkop/ujrmsqBpIVVYu/rmqM6gpJLX36M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629188; c=relaxed/simple; bh=NEV56k/1bcmu9rz0L5zz1lY42ec57ywMmk7znO1WYnM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PBSGZ5hvDHDQjGSa5JMzKfVkt8tjgfgsdB0UoMPttAA4W0Xpsrp2pL33pT+sk5LZSx5E3CQcyZbo2isO49l3yHxFKE9SNEUq72tsH+GacPlTKkIdxklYY0Sdt00+D3Oy0QqJlw8sQPhpO2+56vqaDsfrLmHHisRypUITfVUV5Uo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=jOcq6G74; arc=none smtp.client-ip=209.85.167.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="jOcq6G74" Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-5131c0691feso6867360e87.1 for ; Tue, 05 Mar 2024 00:59:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629185; x=1710233985; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KC2kNgBeF7Vel8Ro1rxtb7kBWctFnYPn6ChmmeyuWYw=; b=jOcq6G74Rc07ASO8mK3PxKL1NYEk44fmDWasW4EvglPNWz2/4zlfEh2dtZfSUyseRD P4H5UmGPLZgYjEXP4MaNUkpUoyyniPTmrZFZMrQB9IebvpXi00b9HyIgwwhzwZHnYiNx piG4EfHNQQGXv5ArkwoZ5fdOXio4zF7i6I8ZywL3tv2KI+OnD6d4slM/zm9tXemrjiy3 jlbc9Ek+o48+EzeSquaAbxD+zPtMQgUeCcqi7t8QV5hQyW9JfRDuUSWPyml08prI97nO oOWidUgqLziEYJHe5UmqoQFrKj52dBXa9r8HjO5BXPV/4hXYM4V9Ok6YRxXNqUB1Dknk sg+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629185; x=1710233985; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KC2kNgBeF7Vel8Ro1rxtb7kBWctFnYPn6ChmmeyuWYw=; b=rHDSCPpc/IINEMNoOpllUjpBObJ5CIKvVk0v3qJH4h4us87Z3O7cF1JwJfNFO0dxPY Zif+59wJFZ1c3hSciOxSMnEWYkJTmyaNDjWP7q8yl6BnPOdbUCXXJ83Cnx0Q7cX3rRCB wZgCyWTdpD/oLW9107nhNn0ggnclK8ZJ6U3Kz9rDnFItdppUEpWa6EC5nA0YMEqf7OAy SxW+Vh7WVMCOGeTHAulQAlRmCn15ijh5xMAEUlW9U/O3ET2abALLf36bJyFv5W0kR4L7 MTYyRQ67KjiHrx4AWl8KaNrSq6YWoT08ibdWikMgRejfHIGBxh5xtnJTdtXG/TQ+lKjp V/xQ== X-Forwarded-Encrypted: i=1; AJvYcCXPyDtPYRjjgASP8zPoiWRmKGAdfzbiG/yqz34Bp4bL9cU/myjtXVdd+j7DmttTDCeEClAm2ChdaaI7etyl23diHzxhnLSdkjQFF0xs X-Gm-Message-State: AOJu0YwYqcSYcScBGsiAUfsOAXGSO2l04ZOGhCu6NNxQ2PC931fT0qNv 6IBT6uV+aIMPL9fKjLr5oI1t2wk52BT6WxuYucsbzrSsm71jS/dbbZteJg6L9hy7QCnRCe5ICBw 4 X-Google-Smtp-Source: AGHT+IEOCYDpUQLk3buGpFhw7wVnYWZuernsI+pAHl/63TvTJG0550L21BMcbBfy9DsuHHJx6gg/Gw== X-Received: by 2002:ac2:5a48:0:b0:513:575f:cee0 with SMTP id r8-20020ac25a48000000b00513575fcee0mr318604lfn.16.1709629185320; Tue, 05 Mar 2024 00:59:45 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:45 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 10/14] linux/mm.h: move page_zone_id() and more to mm/folio_zone.h Date: Tue, 5 Mar 2024 09:59:15 +0100 Message-Id: <20240305085919.1601395-11-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is needed to eliminate linux/skbuff.h's dependency on linux/mm.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 28 +-------------------------- include/linux/mm/folio_zone.h | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 include/linux/mm/folio_zone.h diff --git a/include/linux/mm.h b/include/linux/mm.h index e8a914e7bebd..b3f83fb26aca 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -1370,33 +1371,6 @@ static inline bool is_nommu_shared_mapping(vm_flags_= t flags) } #endif =20 -/* - * The identification function is mainly used by the buddy allocator for - * determining if two pages could be buddies. We are not really identifying - * the zone since we could be using the section number id if we do not have - * node id available in page flags. - * We only guarantee that it will return the same value for two combinable - * pages in a zone. - */ -static inline int page_zone_id(struct page *page) -{ - return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK; -} - -#ifdef NODE_NOT_IN_PAGE_FLAGS -int page_to_nid(const struct page *page); -#else -static inline int page_to_nid(const struct page *page) -{ - return (PF_POISONED_CHECK(page)->flags >> NODES_PGSHIFT) & NODES_MASK; -} -#endif - -static inline int folio_nid(const struct folio *folio) -{ - return page_to_nid(&folio->page); -} - #ifdef CONFIG_NUMA_BALANCING /* page access time bits needs to hold at least 4 seconds */ #define PAGE_ACCESS_TIME_MIN_BITS 12 diff --git a/include/linux/mm/folio_zone.h b/include/linux/mm/folio_zone.h new file mode 100644 index 000000000000..572fe37068f1 --- /dev/null +++ b/include/linux/mm/folio_zone.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_FOLIO_ZONE_H +#define _LINUX_MM_FOLIO_ZONE_H + +#include // for struct page, struct folio +#include // for ZONEID_*, NODES_* +#include // for PF_POISONED_CHECK() + +/* + * The identification function is mainly used by the buddy allocator for + * determining if two pages could be buddies. We are not really identifying + * the zone since we could be using the section number id if we do not have + * node id available in page flags. + * We only guarantee that it will return the same value for two combinable + * pages in a zone. + */ +static inline int page_zone_id(struct page *page) +{ + return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK; +} + +#ifdef NODE_NOT_IN_PAGE_FLAGS +int page_to_nid(const struct page *page); +#else +static inline int page_to_nid(const struct page *page) +{ + return (PF_POISONED_CHECK(page)->flags >> NODES_PGSHIFT) & NODES_MASK; +} +#endif + +static inline int folio_nid(const struct folio *folio) +{ + return page_to_nid(&folio->page); +} + +#endif /* _LINUX_MM_FOLIO_ZONE_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE8BE54FB5 for ; Tue, 5 Mar 2024 08:59:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629190; cv=none; b=WwGVpSCnNkT0YA5y1YkHE7/3QMqGbFV+fJ8s7O91sxO+bBXBSBKtF9Sy6LWGjz5kil/dpCggTEBdT8FxCK2nOffpUOMSUnkZ52oiFYL9kXk2diDdHpAcCYOp9awqFbN47oWzGtwFCoWUzCFOmNkxhvbDTBkGFPAmjmDLCmA/7WI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629190; c=relaxed/simple; bh=gvv5QAtWzHwpsz/x1Apq4Lva4NNrjhRHP3W2M/SGVoQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LfcAxzZUfAkbuWSdSFAMlr17F4TgNqknuM+vtWbTjhw18uqfKeAUmTOjX+bQUd+++iH+BNrfwE0ReBUSlUNxAALTAAjakpLjD02JMHCFmXr721c6+qmvNT6qNpSb/wbPDg9pT6CwhL1/5RfZt+xzYPlG4Rq8ATgkH7bEc20Hf/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=Av01YWKG; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="Av01YWKG" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5672afabb86so2073549a12.3 for ; Tue, 05 Mar 2024 00:59:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629187; x=1710233987; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=i50xlwbZc74AakEZHNdRuLF9vXbOX6ErFGehWmkuapg=; b=Av01YWKG56143FLyXuR/VOF9CC2vjqn/UcUkxVJbrP4iYpGlPBcE5tVLf/CI3Onunt +M57gaSftQ3y3bD/dWYxEIgC8Ak/XbblxYlRG69wovBA9Jhwflx6RQnlCSHsCgrxw50l oDmHyV6lPRnkI1bVMH963jsamXvmkoeuG2AaX0R2aI4Ti9CMWC0m7+hwOaAyLfTl9tus zGlZn1du7xNIESkky4mMQz0J9RuU6gq6vAvNPPc0Bul34ig+u8kWekeFYjSlzyGZyr8G pgDalVlVGLWBQE0RfEZA7DUIB7BnjJmKxnHhqCs6BZb8S0JYWe3YlJdQUq3cNPh0437h WHiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629187; x=1710233987; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i50xlwbZc74AakEZHNdRuLF9vXbOX6ErFGehWmkuapg=; b=NfI/3y+NjsOb2qtNaqQ88mC8jr1A+dpIPKqO3I9JZiUO5kkvvcus7cY8atXePkM0rm MwXhYPHYEcT/OjFon5luCaMOzxkCxOM2S5DvvHVENy0WplaSDz39+kCQ9CT1F/6bsk+j KefLuWAQHFmhfqyUwf2WfCmOOFMJ0KXxC05faLpsGITOlcAKmBzvXHHD5YBrgzHM1yQC Rk1wJifoX82jrmtNVmesadmngBgwXMLxVrPcVVzIu4HAg5yGdurGgolWFezVbF9nUAbp gUujpGbelwtqu6rsm+DNSH8QidFogP2rGzLSvF7AyvLjA4is4mP7FkdOmjJ1431ex8eN D1wA== X-Forwarded-Encrypted: i=1; AJvYcCWeSZ0oG7uAnzUbS+hUDqwJ+0h//s5dw3NQ9thyjHvJ3NX8bOrzLpmJCjiWd9XHlyOlYJjjqLRObgPwyMgEPWXWN1Cfb3guStkAhJI2 X-Gm-Message-State: AOJu0Yxvm02+WJSne6Yi59kJj19CorwLbUWwI5wnPemTilg9Aa9JSfGR 9JpJZSb4gI9GrSlKY65cl5U/zhfvdqYEffVq/xM/FCgN58AHWBaGDzb8znqiGYYds0F2KzfQrK9 y X-Google-Smtp-Source: AGHT+IH5rQymVzDyRd5/kVEF3MMnB3QjDXj4i4rk7c4yzXXCC29AJ9nQ021BYHQfLPW889VaZHI1rw== X-Received: by 2002:a17:906:d114:b0:a45:ac31:4bde with SMTP id b20-20020a170906d11400b00a45ac314bdemr450647ejz.29.1709629187311; Tue, 05 Mar 2024 00:59:47 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:45 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 11/14] linux/mm.h: move pfmemalloc-related functions to pfmemalloc.h Date: Tue, 5 Mar 2024 09:59:16 +0100 Message-Id: <20240305085919.1601395-12-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is needed to eliminate linux/skbuff.h's dependency on linux/mm.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 45 +----------------------------- include/linux/mm/pfmemalloc.h | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 44 deletions(-) create mode 100644 include/linux/mm/pfmemalloc.h diff --git a/include/linux/mm.h b/include/linux/mm.h index b3f83fb26aca..07262ae43c5d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -1763,50 +1764,6 @@ static inline pgoff_t page_index(struct page *page) return page->index; } =20 -/* - * Return true only if the page has been allocated with - * ALLOC_NO_WATERMARKS and the low watermark was not - * met implying that the system is under some pressure. - */ -static inline bool page_is_pfmemalloc(const struct page *page) -{ - /* - * lru.next has bit 1 set if the page is allocated from the - * pfmemalloc reserves. Callers may simply overwrite it if - * they do not need to preserve that information. - */ - return (uintptr_t)page->lru.next & BIT(1); -} - -/* - * Return true only if the folio has been allocated with - * ALLOC_NO_WATERMARKS and the low watermark was not - * met implying that the system is under some pressure. - */ -static inline bool folio_is_pfmemalloc(const struct folio *folio) -{ - /* - * lru.next has bit 1 set if the page is allocated from the - * pfmemalloc reserves. Callers may simply overwrite it if - * they do not need to preserve that information. - */ - return (uintptr_t)folio->lru.next & BIT(1); -} - -/* - * Only to be called by the page allocator on a freshly allocated - * page. - */ -static inline void set_page_pfmemalloc(struct page *page) -{ - page->lru.next =3D (void *)BIT(1); -} - -static inline void clear_page_pfmemalloc(struct page *page) -{ - page->lru.next =3D NULL; -} - /* * Can be called by the pagefault handler when it gets a VM_FAULT_OOM. */ diff --git a/include/linux/mm/pfmemalloc.h b/include/linux/mm/pfmemalloc.h new file mode 100644 index 000000000000..345b215a3566 --- /dev/null +++ b/include/linux/mm/pfmemalloc.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_PFMEMALLOC_H +#define _LINUX_MM_PFMEMALLOC_H + +#include // for BIT() +#include // for struct page + +/* + * Return true only if the page has been allocated with + * ALLOC_NO_WATERMARKS and the low watermark was not + * met implying that the system is under some pressure. + */ +static inline bool page_is_pfmemalloc(const struct page *page) +{ + /* + * lru.next has bit 1 set if the page is allocated from the + * pfmemalloc reserves. Callers may simply overwrite it if + * they do not need to preserve that information. + */ + return (uintptr_t)page->lru.next & BIT(1); +} + +/* + * Return true only if the folio has been allocated with + * ALLOC_NO_WATERMARKS and the low watermark was not + * met implying that the system is under some pressure. + */ +static inline bool folio_is_pfmemalloc(const struct folio *folio) +{ + /* + * lru.next has bit 1 set if the page is allocated from the + * pfmemalloc reserves. Callers may simply overwrite it if + * they do not need to preserve that information. + */ + return (uintptr_t)folio->lru.next & BIT(1); +} + +/* + * Only to be called by the page allocator on a freshly allocated + * page. + */ +static inline void set_page_pfmemalloc(struct page *page) +{ + page->lru.next =3D (void *)BIT(1); +} + +static inline void clear_page_pfmemalloc(struct page *page) +{ + page->lru.next =3D NULL; +} + +#endif /* _LINUX_MM_PFMEMALLOC_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3796356460 for ; Tue, 5 Mar 2024 08:59:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629192; cv=none; b=Ruk+fTGnDPsGaKZojg1r5x3MEJEpCmtWSZ9vy9K9Wt+bLlBTl9+dEwRACEKIWE/c81CnIPkUr4txWiDTu0wKMZhRs9Ndszq0EtWTqpqD+f9SnogEIoxp7qsmZDXhz4DF5ltyPNhIm33m7l0zlX+20fCmTNTL4HvfYw++dZuV1SI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629192; c=relaxed/simple; bh=1xnF40lCeTl2Fq3HZQkpBaNZnb2sADMKOS6Vo+/oJd8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TzI5VE+6V/LwXMLcNTnzotTR3ywe9AEZrgsfHuyD/zZfxtmZPlKq4AAYKQLH7EGJKnYhYs/A/SRL6GFzPvBisRhZ0L8oSUbTKtrypfCvFo3VcvfKYbQyax5APfGHarOWTRDQIZj7NeUoGYnZ2iEfQ3rYhlPnvMBR2U51rxpK9U4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=aqs8qV37; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="aqs8qV37" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a4515f8e13cso257818266b.3 for ; Tue, 05 Mar 2024 00:59:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629188; x=1710233988; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ATfCxZ0IifVoQF3dNCoyZLQIGDsbM/UfOW1XioKp6uI=; b=aqs8qV37FpCFMqI/Pldi5QH437/ldcX2Komg1hjfA3+ZQscJ9XQ1sxFEqlPVPR2WDh cXEqJbnlWT9gTuXPeiMVtx97lqk/G8XxA3R/SSr8k0zZa84RCByLDoOfNKXfabLtL08y j3KamnTueYRx7xvWT0I29Kf7Y2RFxBr50djrkMtDU1AteUDFD3TTNj0Ea2g/vnKq3q4B j4rzZKsQb6gfK7iBRqt0pcVMDdq77irrlWcwqNu1wyRsCQ5HxVoN/VXdeirdWmSzarqT HbNOrdse409ai15OsqNll40J2b1EdjQo8T1cj5N9pTmQu5AQxw0l7XLV0qi1gmX1HxTf 90Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629188; x=1710233988; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ATfCxZ0IifVoQF3dNCoyZLQIGDsbM/UfOW1XioKp6uI=; b=nd/pdMWBgjiemT1+GmpbbNFs1rnvByCY1UiBNrhr0UcDbsfkwMmWdoPBCThfRiGloH NVtUrYql0X4tcTBZQZ3FAkgcpkxqzlqBpgGhuV6PzLqd0TanxB8U+UBcF0YI/4CpOhSU paIaRTbs8lPLlqmX316nMzpDG03uRRM7RsugR/qTsf/sjyZxt3YNxy7hOOHPNavcGNOp KEGbxmJEQ+Lfe+YncZPJFnUvokV4D/1r59sp6Jnh56z3KiuArzwEjWBM6xRMcGRi4X+3 Ef7FwXbpfo0IhAVnYTr+I2mTUm87KqV/D14AkL3P/k77n3nXaLBGUXNIcmViAHzTkmdP q1gA== X-Forwarded-Encrypted: i=1; AJvYcCXNEj2BQPyhTmex4NDQnThi907nvGgnlEnHlNX3YohuXMBSzfqhtX6wmtTt5vD4uZRl42p2z5O849let6owaeAgSWiOWNtURq9jSJ+A X-Gm-Message-State: AOJu0YyS26vTqvH+4lOem2B7WDphYYGwtQKH84hYaFIBpfgqbnCdfVG0 oWJXs57sFxupND9UuUU6COfa+IqBvVb88S9aX+zyZ7+2L+UTsLtzuxlBglwM2rs= X-Google-Smtp-Source: AGHT+IGDWjdTWBhp9yoamhZMNLezFfIn6Lq1nEJWjHZkb5MGsCgGfbPtzgnfRK1QoTBK5gAAf0Xdmg== X-Received: by 2002:a17:907:20d9:b0:a44:1b98:1829 with SMTP id qq25-20020a17090720d900b00a441b981829mr8277971ejb.57.1709629188722; Tue, 05 Mar 2024 00:59:48 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:47 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 12/14] linux/mm.h: move is_vmalloc_addr() to mm/vmalloc_addr.h Date: Tue, 5 Mar 2024 09:59:17 +0100 Message-Id: <20240305085919.1601395-13-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is needed to eliminate linux/dma-mapping.h's dependency on linux/mm.h. Signed-off-by: Max Kellermann --- include/linux/mm.h | 25 +------------------------ include/linux/mm/vmalloc_addr.h | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 24 deletions(-) create mode 100644 include/linux/mm/vmalloc_addr.h diff --git a/include/linux/mm.h b/include/linux/mm.h index 07262ae43c5d..80fc7df2856a 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -1086,30 +1087,6 @@ enum { int region_intersects(resource_size_t offset, size_t size, unsigned long f= lags, unsigned long desc); =20 -/* Support for virtually mapped pages */ -struct page *vmalloc_to_page(const void *addr); -unsigned long vmalloc_to_pfn(const void *addr); - -/* - * Determine if an address is within the vmalloc range - * - * On nommu, vmalloc/vfree wrap through kmalloc/kfree directly, so there - * is no special casing required. - */ -#ifdef CONFIG_MMU -extern bool is_vmalloc_addr(const void *x); -extern int is_vmalloc_or_module_addr(const void *x); -#else -static inline bool is_vmalloc_addr(const void *x) -{ - return false; -} -static inline int is_vmalloc_or_module_addr(const void *x) -{ - return 0; -} -#endif - /* * How many times the entire folio is mapped as a single unit (eg by a * PMD or PUD entry). This is probably not what you want, except for diff --git a/include/linux/mm/vmalloc_addr.h b/include/linux/mm/vmalloc_add= r.h new file mode 100644 index 000000000000..86ad2dc94960 --- /dev/null +++ b/include/linux/mm/vmalloc_addr.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_VMALLOC_ADDR_H +#define _LINUX_MM_VMALLOC_ADDR_H + +#include // for bool + +struct page; + +/* Support for virtually mapped pages */ +struct page *vmalloc_to_page(const void *addr); +unsigned long vmalloc_to_pfn(const void *addr); + +/* + * Determine if an address is within the vmalloc range + * + * On nommu, vmalloc/vfree wrap through kmalloc/kfree directly, so there + * is no special casing required. + */ +#ifdef CONFIG_MMU +extern bool is_vmalloc_addr(const void *x); +extern int is_vmalloc_or_module_addr(const void *x); +#else +static inline bool is_vmalloc_addr(const void *x) +{ + return false; +} +static inline int is_vmalloc_or_module_addr(const void *x) +{ + return 0; +} +#endif + +#endif /* _LINUX_MM_VMALLOC_ADDR_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6186E5676E for ; Tue, 5 Mar 2024 08:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629193; cv=none; b=LF5jOCMaazoLxDHEjeTdyLxaM3cirgsyj91cTecfpqpO/8yk5hIw4Iq0WYdVb5iRsYACx78Wz/CHMtT8c49KXr6urCeo8FV0HDxkHWvshvSQ0yaHmugcPPOmS4qgAOzrp440ve6LE9CP21SzjT4sqfF9iauNHPM5prXjsdO/tnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629193; c=relaxed/simple; bh=P1j230muQbkNjSYF4M1Cq6qrXTdqj73dTqv5lqd1keg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=pVi2FtwetVn7bRnyGX6gvd+IYaCFICER75kLEhqze7aGbJ8eamvo+fep1LjiIPa+aJDtH40Frlj1cKNo5IPJxc6V7G0SEnvckXO1XjsPSzXZgCuh7rDGL+Dj4SI59eYIiVuIMKZzYcynnW9//n4VgIE3s86jq+wtdoRZNA7aR9M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=gl+sJLCC; arc=none smtp.client-ip=209.85.208.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="gl+sJLCC" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-5654f700705so7369534a12.1 for ; Tue, 05 Mar 2024 00:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629190; x=1710233990; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rAj7+x69ZY+4IfKY/7bKK9Eao6rfkUHshm8TstoFK2I=; b=gl+sJLCCduZrFUrrnxee8U1ik1wPnJKhGT1Rn4Xe6XbNStJmzHiPjg/Mc4fIh1CJ2N igW3Zzs9ZlxLz+OTXm4VXrxzqvqa09znHBQOlQF13TwVhqHyGxjfXMD3nWVOBlkd4O5s YQpSfTSJYa+E8EUV9XVVtWxp9Iw0lSQ9mYLIne3KMFyi0hUdMF1eFfKNElRyAuWBCexK rNng+rgDgkzuqLq1IJQtvfVg0e3NqzmzP7xWWOM9kYacM4mZwTB3cRPG8oE8gylq77Jh gRmDAqwfUJgumlmjiSTf3bi5VcobaX0zZgj2ZDqX5OA4yoAd6PAOFell2/VKYIfqriVk 6FwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629190; x=1710233990; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rAj7+x69ZY+4IfKY/7bKK9Eao6rfkUHshm8TstoFK2I=; b=VKeGnzyuB1EXxCkUftgObMqyyUYte3os2RSCdJryIqfonNXriyrZLoPqMtKlJutOHd +8HkD0799LAlkG9eF/kD0lQ+rEX0FC+B83203Lnu5v7FgZQ3MNMmtDbeUuTrJS/i+SPC x/lNh9xyFGs679ty4iawnpdnxVnmAc5ZnL+Vx1G6RbExiU1asH+nuyi0jvAHuaJ0QbM2 XVX5E0zqzbNW04U56lj7cEvgEyl1QRTsZJprB6HHm8q2pbA+tJI+kFWXUxUCMFSKyHvI Gqa9z+s6/LVPdCPF+885da064LGzJaRCceBSxJt/v738HZLjW4xyQ4gffB3MGZ0GOmtH va4A== X-Forwarded-Encrypted: i=1; AJvYcCWNAZM4dgrSGf/2m9xoJPHEhF1ix2Uo3F9YIl0ZMQjhBQu+cEetGvvlzf354JtuEzz67UCTMJgXrQGn6gFTlo9Q0eFuUDKGK9pQmtAU X-Gm-Message-State: AOJu0YyFivsXL1/MzDvsItJCaKsXocd5yUtvoXQfrgTqihIBHjHDNaT8 BcG5j5M595FHy547gv916B5Ltnx2FkAG16IAJjlMCnYe1FF+khOVZeDi5HUZfwJh2zNtvwdNXxS f X-Google-Smtp-Source: AGHT+IGszUMHFAY8nQqRc7qWBrdOVwxqgaSpJbhboGAmezWe2V+nz5/IYJkGc34N3h/3F3gINvIIXA== X-Received: by 2002:a17:906:b893:b0:a45:5cd9:81ac with SMTP id hb19-20020a170906b89300b00a455cd981acmr3215788ejb.22.1709629189950; Tue, 05 Mar 2024 00:59:49 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:49 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 13/14] linux/mm.h: move high_memory to mm/high_memory.h Date: Tue, 5 Mar 2024 09:59:18 +0100 Message-Id: <20240305085919.1601395-14-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This variable is used by lots of arch/*/include/asm/ headers, but these do not (and should not) include the huge linux/mm.h header. Let's move this "extern" variable to a separate header and include this one in arch/. Signed-off-by: Max Kellermann --- arch/arm/include/asm/memory.h | 4 ++++ arch/arm/include/asm/pgtable.h | 2 ++ arch/csky/include/asm/page.h | 1 + arch/hexagon/include/asm/mem-layout.h | 4 ++++ arch/m68k/include/asm/page_mm.h | 1 + arch/m68k/include/asm/pgtable_mm.h | 1 + arch/parisc/include/asm/floppy.h | 1 + arch/powerpc/include/asm/book3s/32/pgtable.h | 4 ++++ arch/powerpc/include/asm/nohash/32/pgtable.h | 1 + arch/powerpc/include/asm/page.h | 1 + arch/x86/include/asm/floppy.h | 1 + arch/x86/include/asm/pgtable_32_areas.h | 4 ++++ drivers/mtd/nand/onenand/onenand_samsung.c | 1 + include/linux/mm.h | 2 +- include/linux/mm/high_memory.h | 7 +++++++ 15 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 include/linux/mm/high_memory.h diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index ef2aa79ece5a..a67afb213e2e 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h @@ -387,6 +387,10 @@ static inline unsigned long __virt_to_idmap(unsigned l= ong x) */ #define ARCH_PFN_OFFSET PHYS_PFN_OFFSET =20 +#ifndef __ASSEMBLY__ +#include +#endif + #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >=3D PAGE_OFFSET &= & (unsigned long)(kaddr) < (unsigned long)high_memory) \ && pfn_valid(virt_to_pfn(kaddr))) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index be91e376df79..eb80f6a65619 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -11,6 +11,8 @@ #include =20 #ifndef __ASSEMBLY__ +#include + /* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc.. diff --git a/arch/csky/include/asm/page.h b/arch/csky/include/asm/page.h index 4a0502e324a6..016f722fbe43 100644 --- a/arch/csky/include/asm/page.h +++ b/arch/csky/include/asm/page.h @@ -32,6 +32,7 @@ =20 #ifndef __ASSEMBLY__ =20 +#include #include =20 #define virt_addr_valid(kaddr) ((void *)(kaddr) >=3D (void *)PAGE_OFFSET = && \ diff --git a/arch/hexagon/include/asm/mem-layout.h b/arch/hexagon/include/a= sm/mem-layout.h index e2f99413fe56..a09116c50043 100644 --- a/arch/hexagon/include/asm/mem-layout.h +++ b/arch/hexagon/include/asm/mem-layout.h @@ -10,6 +10,10 @@ =20 #include =20 +#ifndef __ASSEMBLY__ +#include +#endif + /* * Have to do this for ginormous numbers, else they get printed as * negative numbers, which the linker no likey when you try to diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_m= m.h index e0ae4d5fc985..f958655d1931 100644 --- a/arch/m68k/include/asm/page_mm.h +++ b/arch/m68k/include/asm/page_mm.h @@ -5,6 +5,7 @@ #ifndef __ASSEMBLY__ =20 #include +#include #include =20 /* diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgt= able_mm.h index dbdf1c2b2f66..ec593656bdc5 100644 --- a/arch/m68k/include/asm/pgtable_mm.h +++ b/arch/m68k/include/asm/pgtable_mm.h @@ -13,6 +13,7 @@ =20 #ifndef __ASSEMBLY__ #include +#include #include #include =20 diff --git a/arch/parisc/include/asm/floppy.h b/arch/parisc/include/asm/flo= ppy.h index b318a7df52f6..98ed37c5dc59 100644 --- a/arch/parisc/include/asm/floppy.h +++ b/arch/parisc/include/asm/floppy.h @@ -8,6 +8,7 @@ #ifndef __ASM_PARISC_FLOPPY_H #define __ASM_PARISC_FLOPPY_H =20 +#include #include =20 =20 diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/in= clude/asm/book3s/32/pgtable.h index 52971ee30717..03e0a32e1c2c 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -4,6 +4,10 @@ =20 #include =20 +#ifndef __ASSEMBLY__ +#include +#endif + /* * The "classic" 32-bit implementation of the PowerPC MMU uses a hash * table containing PTEs, together with a set of 16 segment registers, diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/in= clude/asm/nohash/32/pgtable.h index 9164a9e41b02..8a9f5b546e4a 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -5,6 +5,7 @@ #include =20 #ifndef __ASSEMBLY__ +#include #include #include #include /* For sub-arch specific PPC_PIN_SIZE */ diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/pag= e.h index e5fcc79b5bfb..c541e71d3d5c 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h @@ -7,6 +7,7 @@ */ =20 #ifndef __ASSEMBLY__ +#include #include #include #include diff --git a/arch/x86/include/asm/floppy.h b/arch/x86/include/asm/floppy.h index 6ec3fc969ad5..7756e984f146 100644 --- a/arch/x86/include/asm/floppy.h +++ b/arch/x86/include/asm/floppy.h @@ -10,6 +10,7 @@ #ifndef _ASM_X86_FLOPPY_H #define _ASM_X86_FLOPPY_H =20 +#include #include =20 /* diff --git a/arch/x86/include/asm/pgtable_32_areas.h b/arch/x86/include/asm= /pgtable_32_areas.h index b6355416a15a..b339137b4f4e 100644 --- a/arch/x86/include/asm/pgtable_32_areas.h +++ b/arch/x86/include/asm/pgtable_32_areas.h @@ -3,6 +3,10 @@ =20 #include =20 +#ifndef __ASSEMBLY__ +#include +#endif + /* * Just any arbitrary offset to the start of the vmalloc VM area: the * current 8MB value just means that there will be a 8MB "hole" after the diff --git a/drivers/mtd/nand/onenand/onenand_samsung.c b/drivers/mtd/nand/= onenand/onenand_samsung.c index fd6890a03d55..7c3cc270386d 100644 --- a/drivers/mtd/nand/onenand/onenand_samsung.c +++ b/drivers/mtd/nand/onenand/onenand_samsung.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include diff --git a/include/linux/mm.h b/include/linux/mm.h index 80fc7df2856a..1d7b4c781995 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -82,7 +83,6 @@ static inline void totalram_pages_add(long count) atomic_long_add(count, &_totalram_pages); } =20 -extern void * high_memory; extern int page_cluster; extern const int page_cluster_max; =20 diff --git a/include/linux/mm/high_memory.h b/include/linux/mm/high_memory.h new file mode 100644 index 000000000000..e504aafd0d48 --- /dev/null +++ b/include/linux/mm/high_memory.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_MM_HIGH_MEMORY_H +#define _LINUX_MM_HIGH_MEMORY_H + +extern void * high_memory; + +#endif /* _LINUX_MM_HIGH_MEMORY_H */ --=20 2.39.2 From nobody Sat Feb 7 17:07:24 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 161E056B8A for ; Tue, 5 Mar 2024 08:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629194; cv=none; b=YUWTs9X/trrBwbbNnmsqxiFpECxVlMk0v/mO5BD/Wcj6aD6HXlItdVDqSUBp9gKMiWMKHz2Qc4q1/BNdcSaadtKM2le/GHo6NAxAqQorTHRerqih2n1bR9GuqDw3nicmFbTyqqJeIpsgJi9MPxYRwmdTa4u66gdKChwJgWZXENw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709629194; c=relaxed/simple; bh=a6yUlj9K/s9w4PWmNlaDvHMam1xAfTG1bDm7NR+5dP4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YtV5ytuu7lbcntbmZmfF5J2i/060/3lvlySEeugaQr+TEL1Dc5CAO6eLtHCePlJNj56Xhe8xGaFyGEktw1Jrs6o/jlPql3YEZmhwu7BjTOsXQYu62JVl3EPLGGcIiz0SS+OEmDh6XkEysszQj4BKiDvb6M4ILy8A0/WfghmMUdg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com; spf=pass smtp.mailfrom=ionos.com; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b=WboVTnRH; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ionos.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionos.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ionos.com header.i=@ionos.com header.b="WboVTnRH" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-a3ddc13bbb3so1063753466b.0 for ; Tue, 05 Mar 2024 00:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; t=1709629190; x=1710233990; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kg2bpXGSRrzoISiqX7O1pb+MwUieZ+xnjYvseU34GPw=; b=WboVTnRHUMpEJswQT0aG/FyO6+oh80kbqqNlnl+GWnQ4g2JhyQMKPABxcYkVpimC9o 0ZnR8ZmKyfw0uWp+t1u8u7ChmmOA5uOZuQUATtWcDvOhH7vdjNq9e5dEgJa3XNWFmXpa BsOJLUdQaXAte64aXUchJv1heho6+isJv/hyYpF19VGfaJx1e2Pld6+JPMo4fMZqq8ca BK/8mUMWBthqz9gi8qEwSyxHTF8kyEVTt9DfiYaWZfFknlthm8AeSXO2WA45/USl8gqg 4zYEOOG3nSS5+9nL08blNCq/QgvJa/dvTgA1Q4cLKKl5CFmbusroH2blr9XLcxaF9v0S zlZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709629190; x=1710233990; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kg2bpXGSRrzoISiqX7O1pb+MwUieZ+xnjYvseU34GPw=; b=uC7IhLlhgYy7Sppy+bQDY/pqICUVX17uLX0qWQCXeLopcDxAgpuzC5dWt1Fb4hegCe 07nfEyhOqPK4ndqlWlDgCd1sMccYzSweSPqZRT8h4q7UYpMD/oqvkNYyoylA8PHpy6OF bf8Q7F71TWdDEr/bOnIfxqFy8RF+8kRNk693qzf5HkovCLQwbP5vlTAPnArkd/vDCcWK WNmbK17IFuoW+sUSC1CvlA8MoYol21Ai6y1JwGaZ81N6QxoHAgfc2ibuLOCl6x6nNc6c 13TW2yQ5v6G4d+JLP4IuXWLdtEVlCcPNRxvWNXDEXZJGlOdzUzXXUDfsDF8QmIVsgzPI iBfw== X-Forwarded-Encrypted: i=1; AJvYcCVLB1sB42ROly5zTlHZk3gOstPk57v8Xzf5j9LG6asViCWPXy2F5WN9/53NWHCuKOwsSP+egAwN3j9QyLcdnnh9PIH9aHbnxAnyGon+ X-Gm-Message-State: AOJu0YzKcEn4ab7eqs2QnNjTVkcEspkd2BNjo8Sfec95t3NrHqkBPx30 J48VZYtqGEUrJ3bskm0pJdBx8t7bP5VE980/mPaRlDyff0GGRsOMrYNSBF7iQqo= X-Google-Smtp-Source: AGHT+IEzQL7M2UuAo9MnJ/pbyNhFbLssWyCiOGjpuRhDJu5ujpFN+An9p4+sh1nmIhJdXaRA1x3R/g== X-Received: by 2002:a17:906:190e:b0:a43:ab6f:ef6b with SMTP id a14-20020a170906190e00b00a43ab6fef6bmr1942409eje.32.1709629190675; Tue, 05 Mar 2024 00:59:50 -0800 (PST) Received: from raven.blarg.de (p200300dc6f010900023064fffe740809.dip0.t-ipconnect.de. [2003:dc:6f01:900:230:64ff:fe74:809]) by smtp.gmail.com with ESMTPSA id gs4-20020a170906f18400b00a449d12cdc5sm4453005ejb.119.2024.03.05.00.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 00:59:50 -0800 (PST) From: Max Kellermann To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: willy@infradead.org, sfr@canb.auug.org.au, Max Kellermann Subject: [PATCH v3 14/14] include: reduce dependencies on linux/mm.h Date: Tue, 5 Mar 2024 09:59:19 +0100 Message-Id: <20240305085919.1601395-15-max.kellermann@ionos.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240305085919.1601395-1-max.kellermann@ionos.com> References: <20240305085919.1601395-1-max.kellermann@ionos.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace with the smaller pieces that were just splitted out. This affects a few headers that are included by many, e.g. bio.h and highmem.h, which now no longer depend on the fat header. For this, several missing includes need to be added because they are no longer indirectly included, e.g. . Signed-off-by: Max Kellermann --- include/linux/bio.h | 2 ++ include/linux/dma-mapping.h | 1 + include/linux/highmem-internal.h | 2 ++ include/linux/highmem.h | 4 +++- include/linux/scatterlist.h | 2 +- include/linux/skbuff.h | 4 ++++ lib/scatterlist.c | 1 + 7 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/linux/bio.h b/include/linux/bio.h index 875d792bffff..e2f24d7235d3 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h @@ -5,7 +5,9 @@ #ifndef __LINUX_BIO_H #define __LINUX_BIO_H =20 +#include // for struct kiocb, IOCB_NOWAIT #include +#include /* struct bio, bio_vec and BIO_* flags are defined in blk_types.h */ #include #include diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 4a658de44ee9..37d5591039c7 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -11,6 +11,7 @@ #include #include #include +#include =20 /** * List of possible attributes associated with a DMA mapping. The semantics diff --git a/include/linux/highmem-internal.h b/include/linux/highmem-inter= nal.h index a3028e400a9c..a479e6b7c54c 100644 --- a/include/linux/highmem-internal.h +++ b/include/linux/highmem-internal.h @@ -2,6 +2,8 @@ #ifndef _LINUX_HIGHMEM_INTERNAL_H #define _LINUX_HIGHMEM_INTERNAL_H =20 +#include + /* * Outside of CONFIG_HIGHMEM to support X86 32bit iomap_atomic() cruft. */ diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 00341b56d291..10a165a913ad 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -7,7 +7,9 @@ #include #include #include -#include +#include // for page_size() +#include // for folio_put() +#include #include #include =20 diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 0516e64dc03e..9221bba82b23 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include =20 #ifdef CONFIG_UML diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index d577e0bee18d..ac121262bedb 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -16,6 +16,10 @@ #include #include #include +#include // for alloc_pages_node() +#include // for get_page(), put_page() +#include // for page_to_nid() +#include // for page_is_pfmemalloc() #include #include #include diff --git a/lib/scatterlist.c b/lib/scatterlist.c index 68b45c82c37a..03599396f15d 100644 --- a/lib/scatterlist.c +++ b/lib/scatterlist.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include =20 --=20 2.39.2