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>, "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>, Dan Williams <dan.j.williams@intel.com>, Toshi Kani <toshi.kani@hpe.com> Subject: [PATCH v3 01/17] resource: Add System RAM resource type Date: Tue, 5 Jan 2016 11:54:25 -0700 [thread overview] Message-ID: <1452020081-26534-1-git-send-email-toshi.kani@hpe.com> (raw) I/O resource type, IORESOURCE_MEM, is used for all types of memory-mapped ranges, ex. System RAM, System ROM, Video RAM, Persistent Memory, PCI Bus, PCI MMCONFIG, ACPI Tables, IOAPIC, reserved, and so on. This requires walk_system_ram_range(), walk_system_ram_res(), and region_intersects() to use strcmp() against string "System RAM" to search for System RAM ranges in the iomem table, which is inefficient. __ioremap_caller() and reserve_memtype() on x86, for instance, call walk_system_ram_range() for every request to check if a given range is in System RAM ranges. However, adding a new I/O resource type for System RAM is not a viable option [1]. There are approx. 3800 references to IORESOURCE_MEM in the kernel/drivers, which make it very difficult to distinguish their usages between new type and IORESOURCE_MEM. The I/O resource types are also used by the PNP subsystem. Therefore, this patch introduces an extended I/O resource type, IORESOURCE_SYSTEM_RAM, which consists of IORESOURCE_MEM and a new modifier flag IORESOURCE_SYSRAM [2]. To keep the code 'if (resource_type(r) == IORESOURCE_MEM)' to work continuously for System RAM, resource_ext_type() is added for extracting extended type bits. Link[1]: http://lkml.kernel.org/r/<1449168859.9855.54.camel@hpe.com> Link[2]: http://lkml.kernel.org/r/<CA+55aFy4WQrWexC4u2LxX9Mw2NVoznw7p3Yh=iF4Xtf7zKWnRw@mail.gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- include/linux/ioport.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 24bea08..4b65d94 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -49,12 +49,19 @@ struct resource { #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ +#define IORESOURCE_EXT_TYPE_BITS 0x01000000 /* Resource extended types */ +#define IORESOURCE_SYSRAM 0x01000000 /* System RAM (modifier) */ + #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ + #define IORESOURCE_DISABLED 0x10000000 #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ #define IORESOURCE_AUTO 0x40000000 #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ +/* I/O resource extended types */ +#define IORESOURCE_SYSTEM_RAM (IORESOURCE_MEM|IORESOURCE_SYSRAM) + /* PnP IRQ specific bits (IORESOURCE_BITS) */ #define IORESOURCE_IRQ_HIGHEDGE (1<<0) #define IORESOURCE_IRQ_LOWEDGE (1<<1) @@ -170,6 +177,10 @@ static inline unsigned long resource_type(const struct resource *res) { return res->flags & IORESOURCE_TYPE_BITS; } +static inline unsigned long resource_ext_type(const struct resource *res) +{ + return res->flags & IORESOURCE_EXT_TYPE_BITS; +} /* True iff r1 completely contains r2 */ static inline bool resource_contains(struct resource *r1, struct resource *r2) {
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>, "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>, Dan Williams <dan.j.williams@intel.com>, Toshi Kani <toshi.kani@hpe.com> Subject: [PATCH v3 01/17] resource: Add System RAM resource type Date: Tue, 5 Jan 2016 11:54:25 -0700 [thread overview] Message-ID: <1452020081-26534-1-git-send-email-toshi.kani@hpe.com> (raw) I/O resource type, IORESOURCE_MEM, is used for all types of memory-mapped ranges, ex. System RAM, System ROM, Video RAM, Persistent Memory, PCI Bus, PCI MMCONFIG, ACPI Tables, IOAPIC, reserved, and so on. This requires walk_system_ram_range(), walk_system_ram_res(), and region_intersects() to use strcmp() against string "System RAM" to search for System RAM ranges in the iomem table, which is inefficient. __ioremap_caller() and reserve_memtype() on x86, for instance, call walk_system_ram_range() for every request to check if a given range is in System RAM ranges. However, adding a new I/O resource type for System RAM is not a viable option [1]. There are approx. 3800 references to IORESOURCE_MEM in the kernel/drivers, which make it very difficult to distinguish their usages between new type and IORESOURCE_MEM. The I/O resource types are also used by the PNP subsystem. Therefore, this patch introduces an extended I/O resource type, IORESOURCE_SYSTEM_RAM, which consists of IORESOURCE_MEM and a new modifier flag IORESOURCE_SYSRAM [2]. To keep the code 'if (resource_type(r) == IORESOURCE_MEM)' to work continuously for System RAM, resource_ext_type() is added for extracting extended type bits. Link[1]: http://lkml.kernel.org/r/<1449168859.9855.54.camel@hpe.com> Link[2]: http://lkml.kernel.org/r/<CA+55aFy4WQrWexC4u2LxX9Mw2NVoznw7p3Yh=iF4Xtf7zKWnRw@mail.gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- include/linux/ioport.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 24bea08..4b65d94 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -49,12 +49,19 @@ struct resource { #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ +#define IORESOURCE_EXT_TYPE_BITS 0x01000000 /* Resource extended types */ +#define IORESOURCE_SYSRAM 0x01000000 /* System RAM (modifier) */ + #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ + #define IORESOURCE_DISABLED 0x10000000 #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ #define IORESOURCE_AUTO 0x40000000 #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ +/* I/O resource extended types */ +#define IORESOURCE_SYSTEM_RAM (IORESOURCE_MEM|IORESOURCE_SYSRAM) + /* PnP IRQ specific bits (IORESOURCE_BITS) */ #define IORESOURCE_IRQ_HIGHEDGE (1<<0) #define IORESOURCE_IRQ_LOWEDGE (1<<1) @@ -170,6 +177,10 @@ static inline unsigned long resource_type(const struct resource *res) { return res->flags & IORESOURCE_TYPE_BITS; } +static inline unsigned long resource_ext_type(const struct resource *res) +{ + return res->flags & IORESOURCE_EXT_TYPE_BITS; +} /* True iff r1 completely contains r2 */ static inline bool resource_contains(struct resource *r1, struct resource *r2) { -- 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>
next reply other threads:[~2016-01-05 18:55 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-05 18:54 Toshi Kani [this message] 2016-01-05 18:54 ` [PATCH v3 01/17] resource: Add System RAM resource type Toshi Kani 2016-01-05 18:54 ` [PATCH v3 02/17] resource: make resource flags handled properly Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 03/17] resource: Add I/O resource descriptor Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 04/17] x86/e820: Set System RAM type and descriptor Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 05/17] ia64: " Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 19:04 ` Luck, Tony 2016-01-05 19:04 ` Luck, Tony 2016-01-05 19:04 ` Luck, Tony 2016-01-05 18:54 ` [PATCH v3 06/17] arch: Set IORESOURCE_SYSTEM_RAM to System RAM Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-24 18:00 ` Borislav Petkov 2016-01-24 18:00 ` Borislav Petkov 2016-01-24 18:00 ` Borislav Petkov 2016-01-05 18:54 ` [PATCH v3 07/17] kexec: " Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-07 12:38 ` Dave Young 2016-01-07 12:38 ` Dave Young 2016-01-07 12:38 ` Dave Young 2016-01-05 18:54 ` [PATCH v3 08/17] xen, mm: " Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 09/17] drivers: Initialize resource entry to zero Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 20:57 ` Helge Deller 2016-01-05 20:57 ` Helge Deller 2016-01-05 20:57 ` Helge Deller 2016-01-05 18:54 ` [PATCH v3 10/17] resource: Change walk_system_ram to use System RAM type Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 11/17] arm/samsung: Change s3c_pm_run_res() " Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 12/17] memremap: Change region_intersects() to take @flags and @desc Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 13/17] resource: Add walk_iomem_res_desc() Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` [PATCH v3 14/17] x86,nvdimm,kexec: Use walk_iomem_res_desc() for iomem search Toshi Kani 2016-01-05 18:54 ` [PATCH v3 14/17] x86, nvdimm, kexec: " Toshi Kani 2016-01-05 18:54 ` [PATCH v3 14/17] x86,nvdimm,kexec: " Toshi Kani 2016-01-05 18:54 ` [PATCH v3 14/17] x86, nvdimm, kexec: " Toshi Kani 2016-01-05 18:54 ` [PATCH v3 14/17] x86,nvdimm,kexec: " Toshi Kani 2016-01-07 12:39 ` Dave Young 2016-01-07 12:39 ` [PATCH v3 14/17] x86, nvdimm, kexec: " Dave Young 2016-01-07 12:39 ` [PATCH v3 14/17] x86,nvdimm,kexec: " Dave Young 2016-01-05 18:54 ` [PATCH v3 15/17] x86/kexec: Remove walk_iomem_res() call with GART Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-07 12:37 ` Dave Young 2016-01-07 12:37 ` Dave Young 2016-01-07 12:37 ` Dave Young 2016-01-05 18:54 ` [PATCH v3 16/17] resource: Kill walk_iomem_res() Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-07 12:40 ` Dave Young 2016-01-07 12:40 ` Dave Young 2016-01-05 18:54 ` [PATCH v3 17/17] ACPI/EINJ: Allow memory error injection to NVDIMM Toshi Kani 2016-01-05 18:54 ` Toshi Kani 2016-01-05 18:54 ` 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=1452020081-26534-1-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=rafael.j.wysocki@intel.com \ --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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.