* [PATCH v3 09/17] drivers: Initialize resource entry to zero [not found] <1452020081-26534-1-git-send-email-toshi.kani@hpe.com> @ 2016-01-05 18:54 ` Toshi Kani 2016-01-05 20:57 ` Helge Deller 2016-01-05 18:54 ` [PATCH v3 17/17] ACPI/EINJ: Allow memory error injection to NVDIMM Toshi Kani 1 sibling, 1 reply; 3+ messages in thread From: Toshi Kani @ 2016-01-05 18:54 UTC (permalink / raw) To: akpm, bp Cc: linux-arch, linux-mm, linux-kernel, linux-acpi, linux-parisc, linux-sh, Toshi Kani I/O resource descriptor, 'desc' in struct resource, needs to be initialized to zero by default. Some drivers call kmalloc() to allocate a resource entry, but does not initialize it to zero by memset(). Change these drivers to call kzalloc(), instead. Cc: linux-acpi@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linux-sh@vger.kernel.org Acked-by: Simon Horman <horms+renesas@verge.net.au> # sh Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- drivers/acpi/acpi_platform.c | 2 +- drivers/parisc/eisa_enumerator.c | 4 ++-- drivers/rapidio/rio.c | 8 ++++---- drivers/sh/superhyway/superhyway.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index 296b7a1..b6f7fa3 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -62,7 +62,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) if (count < 0) { return NULL; } else if (count > 0) { - resources = kmalloc(count * sizeof(struct resource), + resources = kzalloc(count * sizeof(struct resource), GFP_KERNEL); if (!resources) { dev_err(&adev->dev, "No memory for resources\n"); diff --git a/drivers/parisc/eisa_enumerator.c b/drivers/parisc/eisa_enumerator.c index a656d9e..21905fe 100644 --- a/drivers/parisc/eisa_enumerator.c +++ b/drivers/parisc/eisa_enumerator.c @@ -91,7 +91,7 @@ static int configure_memory(const unsigned char *buf, for (i=0;i<HPEE_MEMORY_MAX_ENT;i++) { c = get_8(buf+len); - if (NULL != (res = kmalloc(sizeof(struct resource), GFP_KERNEL))) { + if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) { int result; res->name = name; @@ -183,7 +183,7 @@ static int configure_port(const unsigned char *buf, struct resource *io_parent, for (i=0;i<HPEE_PORT_MAX_ENT;i++) { c = get_8(buf+len); - if (NULL != (res = kmalloc(sizeof(struct resource), GFP_KERNEL))) { + if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) { res->name = board; res->start = get_16(buf+len+1); res->end = get_16(buf+len+1)+(c&HPEE_PORT_SIZE_MASK)+1; diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c index d7b87c6..e220edc 100644 --- a/drivers/rapidio/rio.c +++ b/drivers/rapidio/rio.c @@ -117,7 +117,7 @@ int rio_request_inb_mbox(struct rio_mport *mport, if (mport->ops->open_inb_mbox == NULL) goto out; - res = kmalloc(sizeof(struct resource), GFP_KERNEL); + res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (res) { rio_init_mbox_res(res, mbox, mbox); @@ -185,7 +185,7 @@ int rio_request_outb_mbox(struct rio_mport *mport, if (mport->ops->open_outb_mbox == NULL) goto out; - res = kmalloc(sizeof(struct resource), GFP_KERNEL); + res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (res) { rio_init_mbox_res(res, mbox, mbox); @@ -285,7 +285,7 @@ int rio_request_inb_dbell(struct rio_mport *mport, { int rc = 0; - struct resource *res = kmalloc(sizeof(struct resource), GFP_KERNEL); + struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (res) { rio_init_dbell_res(res, start, end); @@ -360,7 +360,7 @@ int rio_release_inb_dbell(struct rio_mport *mport, u16 start, u16 end) struct resource *rio_request_outb_dbell(struct rio_dev *rdev, u16 start, u16 end) { - struct resource *res = kmalloc(sizeof(struct resource), GFP_KERNEL); + struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (res) { rio_init_dbell_res(res, start, end); diff --git a/drivers/sh/superhyway/superhyway.c b/drivers/sh/superhyway/superhyway.c index 2d9e7f3..bb1fb771 100644 --- a/drivers/sh/superhyway/superhyway.c +++ b/drivers/sh/superhyway/superhyway.c @@ -66,7 +66,7 @@ int superhyway_add_device(unsigned long base, struct superhyway_device *sdev, superhyway_read_vcr(dev, base, &dev->vcr); if (!dev->resource) { - dev->resource = kmalloc(sizeof(struct resource), GFP_KERNEL); + dev->resource = kzalloc(sizeof(struct resource), GFP_KERNEL); if (!dev->resource) { kfree(dev); return -ENOMEM; -- 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> ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3 09/17] drivers: Initialize resource entry to zero 2016-01-05 18:54 ` [PATCH v3 09/17] drivers: Initialize resource entry to zero Toshi Kani @ 2016-01-05 20:57 ` Helge Deller 0 siblings, 0 replies; 3+ messages in thread From: Helge Deller @ 2016-01-05 20:57 UTC (permalink / raw) To: Toshi Kani, akpm, bp Cc: linux-arch, linux-mm, linux-kernel, linux-acpi, linux-parisc, linux-sh On 05.01.2016 19:54, Toshi Kani wrote: > I/O resource descriptor, 'desc' in struct resource, needs to be > initialized to zero by default. Some drivers call kmalloc() to > allocate a resource entry, but does not initialize it to zero by > memset(). Change these drivers to call kzalloc(), instead. > > Cc: linux-acpi@vger.kernel.org > Cc: linux-parisc@vger.kernel.org > Cc: linux-sh@vger.kernel.org > Acked-by: Simon Horman <horms+renesas@verge.net.au> # sh > Signed-off-by: Toshi Kani <toshi.kani@hpe.com> > --- > drivers/acpi/acpi_platform.c | 2 +- > drivers/parisc/eisa_enumerator.c | 4 ++-- The parisc changes look good. For those: Acked-by: Helge Deller <deller@gmx.de> > drivers/rapidio/rio.c | 8 ++++---- > drivers/sh/superhyway/superhyway.c | 2 +- > 4 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c > index 296b7a1..b6f7fa3 100644 > --- a/drivers/acpi/acpi_platform.c > +++ b/drivers/acpi/acpi_platform.c > @@ -62,7 +62,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) > if (count < 0) { > return NULL; > } else if (count > 0) { > - resources = kmalloc(count * sizeof(struct resource), > + resources = kzalloc(count * sizeof(struct resource), > GFP_KERNEL); > if (!resources) { > dev_err(&adev->dev, "No memory for resources\n"); > diff --git a/drivers/parisc/eisa_enumerator.c b/drivers/parisc/eisa_enumerator.c > index a656d9e..21905fe 100644 > --- a/drivers/parisc/eisa_enumerator.c > +++ b/drivers/parisc/eisa_enumerator.c > @@ -91,7 +91,7 @@ static int configure_memory(const unsigned char *buf, > for (i=0;i<HPEE_MEMORY_MAX_ENT;i++) { > c = get_8(buf+len); > > - if (NULL != (res = kmalloc(sizeof(struct resource), GFP_KERNEL))) { > + if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) { > int result; > > res->name = name; > @@ -183,7 +183,7 @@ static int configure_port(const unsigned char *buf, struct resource *io_parent, > for (i=0;i<HPEE_PORT_MAX_ENT;i++) { > c = get_8(buf+len); > > - if (NULL != (res = kmalloc(sizeof(struct resource), GFP_KERNEL))) { > + if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) { > res->name = board; > res->start = get_16(buf+len+1); > res->end = get_16(buf+len+1)+(c&HPEE_PORT_SIZE_MASK)+1; > diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c > index d7b87c6..e220edc 100644 > --- a/drivers/rapidio/rio.c > +++ b/drivers/rapidio/rio.c > @@ -117,7 +117,7 @@ int rio_request_inb_mbox(struct rio_mport *mport, > if (mport->ops->open_inb_mbox == NULL) > goto out; > > - res = kmalloc(sizeof(struct resource), GFP_KERNEL); > + res = kzalloc(sizeof(struct resource), GFP_KERNEL); > > if (res) { > rio_init_mbox_res(res, mbox, mbox); > @@ -185,7 +185,7 @@ int rio_request_outb_mbox(struct rio_mport *mport, > if (mport->ops->open_outb_mbox == NULL) > goto out; > > - res = kmalloc(sizeof(struct resource), GFP_KERNEL); > + res = kzalloc(sizeof(struct resource), GFP_KERNEL); > > if (res) { > rio_init_mbox_res(res, mbox, mbox); > @@ -285,7 +285,7 @@ int rio_request_inb_dbell(struct rio_mport *mport, > { > int rc = 0; > > - struct resource *res = kmalloc(sizeof(struct resource), GFP_KERNEL); > + struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL); > > if (res) { > rio_init_dbell_res(res, start, end); > @@ -360,7 +360,7 @@ int rio_release_inb_dbell(struct rio_mport *mport, u16 start, u16 end) > struct resource *rio_request_outb_dbell(struct rio_dev *rdev, u16 start, > u16 end) > { > - struct resource *res = kmalloc(sizeof(struct resource), GFP_KERNEL); > + struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL); > > if (res) { > rio_init_dbell_res(res, start, end); > diff --git a/drivers/sh/superhyway/superhyway.c b/drivers/sh/superhyway/superhyway.c > index 2d9e7f3..bb1fb771 100644 > --- a/drivers/sh/superhyway/superhyway.c > +++ b/drivers/sh/superhyway/superhyway.c > @@ -66,7 +66,7 @@ int superhyway_add_device(unsigned long base, struct superhyway_device *sdev, > superhyway_read_vcr(dev, base, &dev->vcr); > > if (!dev->resource) { > - dev->resource = kmalloc(sizeof(struct resource), GFP_KERNEL); > + dev->resource = kzalloc(sizeof(struct resource), GFP_KERNEL); > if (!dev->resource) { > kfree(dev); > return -ENOMEM; > -- > To unsubscribe from this list: send the line "unsubscribe linux-parisc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- 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> ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v3 17/17] ACPI/EINJ: Allow memory error injection to NVDIMM [not found] <1452020081-26534-1-git-send-email-toshi.kani@hpe.com> 2016-01-05 18:54 ` [PATCH v3 09/17] drivers: Initialize resource entry to zero Toshi Kani @ 2016-01-05 18:54 ` Toshi Kani 1 sibling, 0 replies; 3+ messages in thread From: Toshi Kani @ 2016-01-05 18:54 UTC (permalink / raw) To: akpm, bp Cc: linux-arch, linux-mm, linux-kernel, Rafael J. Wysocki, Vishal Verma, linux-nvdimm, linux-acpi, Toshi Kani In the case of memory error injection, einj_error_inject() checks if a target address is System RAM. Change this check to allow injecting a memory error to NVDIMM by calling region_intersects() with IORES_DESC_PERSISTENT_MEMORY. This enables memory error testing on both System RAM and NVDIMM. In addition, page_is_ram() is replaced with region_intersects() with IORESOURCE_SYSTEM_RAM, so that it can verify a target address range with the requested size. Cc: Rafael J. Wysocki <rjw@rjwysocki.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Vishal Verma <vishal.l.verma@intel.com> Cc: linux-nvdimm@lists.01.org Cc: linux-acpi@vger.kernel.org Acked-by: Tony Luck <tony.luck@intel.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> --- drivers/acpi/apei/einj.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/acpi/apei/einj.c b/drivers/acpi/apei/einj.c index 0431883..16cae66 100644 --- a/drivers/acpi/apei/einj.c +++ b/drivers/acpi/apei/einj.c @@ -519,7 +519,7 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3, u64 param4) { int rc; - unsigned long pfn; + u64 base_addr, size; /* If user manually set "flags", make sure it is legal */ if (flags && (flags & @@ -545,10 +545,17 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, /* * Disallow crazy address masks that give BIOS leeway to pick * injection address almost anywhere. Insist on page or - * better granularity and that target address is normal RAM. + * better granularity and that target address is normal RAM or + * NVDIMM. */ - pfn = PFN_DOWN(param1 & param2); - if (!page_is_ram(pfn) || ((param2 & PAGE_MASK) != PAGE_MASK)) + base_addr = param1 & param2; + size = ~param2 + 1; + + if (((param2 & PAGE_MASK) != PAGE_MASK) || + ((region_intersects(base_addr, size, IORESOURCE_SYSTEM_RAM, + IORES_DESC_NONE) != REGION_INTERSECTS) && + (region_intersects(base_addr, size, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY) != REGION_INTERSECTS))) return -EINVAL; inject: ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-01-05 20:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1452020081-26534-1-git-send-email-toshi.kani@hpe.com>
2016-01-05 18:54 ` [PATCH v3 09/17] drivers: Initialize resource entry to zero Toshi Kani
2016-01-05 20:57 ` Helge Deller
2016-01-05 18:54 ` [PATCH v3 17/17] ACPI/EINJ: Allow memory error injection to NVDIMM Toshi Kani
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).