linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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

* [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

* 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

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).