From: Toshi Kani <toshi.kani@hpe.com> To: akpm@linux-foundation.org, bp@alien8.de Cc: linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@linux-foundation.org>, Dan Williams <dan.j.williams@intel.com>, Toshi Kani <toshi.kani@hpe.com> Subject: [PATCH v2 03/16] resource: Add I/O resource descriptor Date: Fri, 25 Dec 2015 15:09:12 -0700 [thread overview] Message-ID: <1451081365-15190-3-git-send-email-toshi.kani@hpe.com> (raw) In-Reply-To: <1451081365-15190-1-git-send-email-toshi.kani@hpe.com> walk_iomem_res() and region_intersects() still need to use strcmp() for searching a resource entry by @name in the iomem table. This patch introduces I/O resource descriptor, 'desc' in struct resoruce, for the iomem search interfaces. Drivers can assign their unique descritor to a range when they support the search interfaces. Otherwise, 'desc' is set to IORES_DESC_NONE (0). This avoids changing most of the drivers as they typically allocate resource entries statically, or by calling alloc_resource(), kzalloc(), or alloc_bootmem_low(), which set the field to zero by default. A later patch will address some drivers that use kmalloc() without zero'ing the field. Also change release_mem_region_adjustable() to set 'desc' when its resource entry gets separated. Other resource interfaces are also changed to initialize 'desc' explicitly although alloc_resource() sets it to 0. Link: http://lkml.kernel.org/r/<20151216181712.GJ29775@pd.tnic> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- include/linux/ioport.h | 19 +++++++++++++++++++ kernel/resource.c | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 4b65d94..b7350c0 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -20,6 +20,7 @@ struct resource { resource_size_t end; const char *name; unsigned long flags; + unsigned long desc; struct resource *parent, *sibling, *child; }; @@ -112,6 +113,23 @@ struct resource { /* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ #define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ +/* + * I/O Resource Descriptors + * + * Descriptors are used by walk_iomem_res_desc() and region_intersects() + * for searching a specific resource range in the iomem table. Assign + * a new descriptor when a resource range supports the search interfaces. + * Otherwise, resource.desc must be set to IORES_DESC_NONE (0). + */ +enum { + IORES_DESC_NONE = 0, + IORES_DESC_CRASH_KERNEL = 1, + IORES_DESC_ACPI_TABLES = 2, + IORES_DESC_ACPI_NV_STORAGE = 3, + IORES_DESC_GART = 4, + IORES_DESC_PERSISTENT_MEMORY = 5, + IORES_DESC_PERSISTENT_MEMORY_LEGACY = 6, +}; /* helpers to define resources */ #define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ @@ -120,6 +138,7 @@ struct resource { .end = (_start) + (_size) - 1, \ .name = (_name), \ .flags = (_flags), \ + .desc = IORES_DESC_NONE, \ } #define DEFINE_RES_IO_NAMED(_start, _size, _name) \ diff --git a/kernel/resource.c b/kernel/resource.c index d30a175..65eca4d 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -949,6 +949,7 @@ static void __init __reserve_region_with_split(struct resource *root, res->start = start; res->end = end; res->flags = IORESOURCE_BUSY; + res->desc = IORES_DESC_NONE; while (1) { @@ -983,6 +984,7 @@ static void __init __reserve_region_with_split(struct resource *root, next_res->start = conflict->end + 1; next_res->end = end; next_res->flags = IORESOURCE_BUSY; + next_res->desc = IORES_DESC_NONE; } } else { res->start = conflict->end + 1; @@ -1074,6 +1076,7 @@ struct resource * __request_region(struct resource *parent, res->end = start + n - 1; res->flags = resource_type(parent) | resource_ext_type(parent); res->flags |= IORESOURCE_BUSY | flags; + res->desc = IORES_DESC_NONE; write_lock(&resource_lock); @@ -1238,6 +1241,7 @@ int release_mem_region_adjustable(struct resource *parent, new_res->start = end + 1; new_res->end = res->end; new_res->flags = res->flags; + new_res->desc = res->desc; new_res->parent = res->parent; new_res->sibling = res->sibling; new_res->child = NULL; @@ -1413,6 +1417,7 @@ static int __init reserve_setup(char *str) res->start = io_start; res->end = io_start + io_num - 1; res->flags = IORESOURCE_BUSY; + res->desc = IORES_DESC_NONE; res->child = NULL; if (request_resource(res->start >= 0x10000 ? &iomem_resource : &ioport_resource, res) == 0) reserved = x+1; -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Toshi Kani <toshi.kani@hpe.com> To: akpm@linux-foundation.org, bp@alien8.de Cc: linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@linux-foundation.org>, Dan Williams <dan.j.williams@intel.com>, Toshi Kani <toshi.kani@hpe.com> Subject: [PATCH v2 03/16] resource: Add I/O resource descriptor Date: Fri, 25 Dec 2015 15:09:12 -0700 [thread overview] Message-ID: <1451081365-15190-3-git-send-email-toshi.kani@hpe.com> (raw) Message-ID: <20151225220912.MUa_TZE0WL90U807Yx-Ib1-3Cx-jWLS9-lSO6Vn2uaA@z> (raw) In-Reply-To: <1451081365-15190-1-git-send-email-toshi.kani@hpe.com> walk_iomem_res() and region_intersects() still need to use strcmp() for searching a resource entry by @name in the iomem table. This patch introduces I/O resource descriptor, 'desc' in struct resoruce, for the iomem search interfaces. Drivers can assign their unique descritor to a range when they support the search interfaces. Otherwise, 'desc' is set to IORES_DESC_NONE (0). This avoids changing most of the drivers as they typically allocate resource entries statically, or by calling alloc_resource(), kzalloc(), or alloc_bootmem_low(), which set the field to zero by default. A later patch will address some drivers that use kmalloc() without zero'ing the field. Also change release_mem_region_adjustable() to set 'desc' when its resource entry gets separated. Other resource interfaces are also changed to initialize 'desc' explicitly although alloc_resource() sets it to 0. Link: http://lkml.kernel.org/r/<20151216181712.GJ29775@pd.tnic> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- include/linux/ioport.h | 19 +++++++++++++++++++ kernel/resource.c | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 4b65d94..b7350c0 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -20,6 +20,7 @@ struct resource { resource_size_t end; const char *name; unsigned long flags; + unsigned long desc; struct resource *parent, *sibling, *child; }; @@ -112,6 +113,23 @@ struct resource { /* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ #define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ +/* + * I/O Resource Descriptors + * + * Descriptors are used by walk_iomem_res_desc() and region_intersects() + * for searching a specific resource range in the iomem table. Assign + * a new descriptor when a resource range supports the search interfaces. + * Otherwise, resource.desc must be set to IORES_DESC_NONE (0). + */ +enum { + IORES_DESC_NONE = 0, + IORES_DESC_CRASH_KERNEL = 1, + IORES_DESC_ACPI_TABLES = 2, + IORES_DESC_ACPI_NV_STORAGE = 3, + IORES_DESC_GART = 4, + IORES_DESC_PERSISTENT_MEMORY = 5, + IORES_DESC_PERSISTENT_MEMORY_LEGACY = 6, +}; /* helpers to define resources */ #define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ @@ -120,6 +138,7 @@ struct resource { .end = (_start) + (_size) - 1, \ .name = (_name), \ .flags = (_flags), \ + .desc = IORES_DESC_NONE, \ } #define DEFINE_RES_IO_NAMED(_start, _size, _name) \ diff --git a/kernel/resource.c b/kernel/resource.c index d30a175..65eca4d 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -949,6 +949,7 @@ static void __init __reserve_region_with_split(struct resource *root, res->start = start; res->end = end; res->flags = IORESOURCE_BUSY; + res->desc = IORES_DESC_NONE; while (1) { @@ -983,6 +984,7 @@ static void __init __reserve_region_with_split(struct resource *root, next_res->start = conflict->end + 1; next_res->end = end; next_res->flags = IORESOURCE_BUSY; + next_res->desc = IORES_DESC_NONE; } } else { res->start = conflict->end + 1; @@ -1074,6 +1076,7 @@ struct resource * __request_region(struct resource *parent, res->end = start + n - 1; res->flags = resource_type(parent) | resource_ext_type(parent); res->flags |= IORESOURCE_BUSY | flags; + res->desc = IORES_DESC_NONE; write_lock(&resource_lock); @@ -1238,6 +1241,7 @@ int release_mem_region_adjustable(struct resource *parent, new_res->start = end + 1; new_res->end = res->end; new_res->flags = res->flags; + new_res->desc = res->desc; new_res->parent = res->parent; new_res->sibling = res->sibling; new_res->child = NULL; @@ -1413,6 +1417,7 @@ static int __init reserve_setup(char *str) res->start = io_start; res->end = io_start + io_num - 1; res->flags = IORESOURCE_BUSY; + res->desc = IORES_DESC_NONE; res->child = NULL; if (request_resource(res->start >= 0x10000 ? &iomem_resource : &ioport_resource, res) == 0) reserved = x+1;
next prev parent reply other threads:[~2015-12-25 22:09 UTC|newest] Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-12-25 22:09 [PATCH v2 01/16] resource: Add System RAM resource type Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 02/16] resource: make resource flags handled properly Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` Toshi Kani [this message] 2015-12-25 22:09 ` [PATCH v2 03/16] resource: Add I/O resource descriptor Toshi Kani 2015-12-25 22:09 ` [PATCH v2 04/16] x86/e820: Set System RAM type and descriptor Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 05/16] ia64: " Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 06/16] arch: Set IORESOURCE_SYSTEM_RAM to System RAM Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 07/16] kexec: " Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 08/16] xen, mm: " Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2016-01-04 11:41 ` [Xen-devel] " David Vrabel 2015-12-25 22:09 ` [PATCH v2 09/16] drivers: Initialize resource entry to zero Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-28 21:37 ` Simon Horman 2015-12-28 21:37 ` Simon Horman 2015-12-25 22:09 ` [PATCH v2 10/16] resource: Change walk_system_ram to use System RAM type Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 11/16] arm/samsung: Change s3c_pm_run_res() " Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 12/16] memremap: Change region_intersects() to take @flags and @desc Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 13/16] resource: Add walk_iomem_res_desc() Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 14/16] x86,nvdimm,kexec: Use walk_iomem_res_desc() for iomem search Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-26 10:38 ` Borislav Petkov 2015-12-27 0:31 ` Toshi Kani 2015-12-27 0:31 ` Toshi Kani 2015-12-27 2:12 ` [PATCH v2 14/16] x86, nvdimm, kexec: " Minfei Huang [not found] ` <20151227021257.GA13560-0VdLhd/A9Pl6Yz8KYMO23x/sF2h8X+2i0E9HWUfgJXw@public.gmane.org> 2015-12-27 10:24 ` Borislav Petkov 2015-12-27 10:24 ` Borislav Petkov 2016-01-04 9:29 ` Dave Young [not found] ` <20160104092937.GB7033-0VdLhd/A9Pl+NNSt+8eSiB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org> 2016-01-04 12:26 ` Borislav Petkov 2016-01-04 12:26 ` Borislav Petkov 2016-01-04 17:57 ` Toshi Kani 2016-01-04 17:57 ` Toshi Kani 2016-01-04 19:41 ` Borislav Petkov 2016-01-04 19:41 ` Borislav Petkov 2016-01-04 19:45 ` Toshi Kani 2016-01-05 5:20 ` Dave Young 2015-12-26 16:05 ` [PATCH v2 14/16] x86,nvdimm,kexec: " Minfei Huang 2015-12-26 16:05 ` Minfei Huang 2015-12-27 0:39 ` Toshi Kani 2015-12-27 0:39 ` Toshi Kani 2016-01-04 9:25 ` Dave Young 2016-01-04 9:25 ` Dave Young 2016-01-04 11:04 ` Dave Young 2015-12-25 22:09 ` [PATCH v2 15/16] checkpatch: Add warning on deprecated walk_iomem_res Toshi Kani 2015-12-25 22:09 ` Toshi Kani 2015-12-26 0:05 ` Joe Perches 2015-12-26 0:05 ` Joe Perches 2015-12-27 0:52 ` Toshi Kani 2015-12-27 0:52 ` Toshi Kani 2015-12-25 22:09 ` [PATCH v2 16/16] ACPI/EINJ: Allow memory error injection to NVDIMM Toshi Kani 2015-12-25 22:09 ` Toshi Kani
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1451081365-15190-3-git-send-email-toshi.kani@hpe.com \ --to=toshi.kani@hpe.com \ --cc=akpm@linux-foundation.org \ --cc=bp@alien8.de \ --cc=dan.j.williams@intel.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=torvalds@linux-foundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).