All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-21 15:16 ` Stefan Roscher
  0 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-21 15:16 UTC (permalink / raw)
  To: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier
  Cc: fenkes, raisch, alexschm, stefan.roscher, hnguyen

From: Anton Blanchard <antonb at au1.ibm.com>

To improve performance of driver ressource allocation,
replace the vmalloc() call with kmalloc().

Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>
---
 drivers/infiniband/hw/ehca/ipz_pt_fn.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
index c3a3284..a260559 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -220,7 +220,7 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 	queue->small_page = NULL;
 
 	/* allocate queue page pointers */
-	queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
+	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
 	if (!queue->queue_pages) {
 		ehca_gen_err("Couldn't allocate queue page list");
 		return 0;
@@ -240,7 +240,7 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 ipz_queue_ctor_exit0:
 	ehca_gen_err("Couldn't alloc pages queue=%p "
 		 "nr_of_pages=%x",  queue, nr_of_pages);
-	vfree(queue->queue_pages);
+	kfree(queue->queue_pages);
 
 	return 0;
 }
@@ -262,7 +262,7 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
 			free_page((unsigned long)queue->queue_pages[i]);
 	}
 
-	vfree(queue->queue_pages);
+	kfree(queue->queue_pages);
 
 	return 1;
 }
-- 
1.5.5


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-21 15:16 ` Stefan Roscher
  0 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-21 15:16 UTC (permalink / raw)
  To: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier
  Cc: alexschm, fenkes, stefan.roscher, raisch

From: Anton Blanchard <antonb at au1.ibm.com>

To improve performance of driver ressource allocation,
replace the vmalloc() call with kmalloc().

Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>
---
 drivers/infiniband/hw/ehca/ipz_pt_fn.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
index c3a3284..a260559 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -220,7 +220,7 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 	queue->small_page = NULL;
 
 	/* allocate queue page pointers */
-	queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
+	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
 	if (!queue->queue_pages) {
 		ehca_gen_err("Couldn't allocate queue page list");
 		return 0;
@@ -240,7 +240,7 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 ipz_queue_ctor_exit0:
 	ehca_gen_err("Couldn't alloc pages queue=%p "
 		 "nr_of_pages=%x",  queue, nr_of_pages);
-	vfree(queue->queue_pages);
+	kfree(queue->queue_pages);
 
 	return 0;
 }
@@ -262,7 +262,7 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
 			free_page((unsigned long)queue->queue_pages[i]);
 	}
 
-	vfree(queue->queue_pages);
+	kfree(queue->queue_pages);
 
 	return 1;
 }
-- 
1.5.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-21 15:16 ` Stefan Roscher
@ 2009-04-21 17:34   ` Roland Dreier
  -1 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-21 17:34 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier, fenkes, raisch,
	alexschm, stefan.roscher, hnguyen

 > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);

How big might this buffer be?  Any chance of allocation failure due to
memory fragmentation?

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-21 17:34   ` Roland Dreier
  0 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-21 17:34 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

 > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);

How big might this buffer be?  Any chance of allocation failure due to
memory fragmentation?

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-21 17:34   ` Roland Dreier
  (?)
@ 2009-04-22  9:11   ` Stefan Roscher
  -1 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-22  9:11 UTC (permalink / raw)
  To: Roland Dreier
  Cc: Joachim Fenkes, OF-EWG, LKML, LinuxPPC-Dev, Christoph Raisch,
	Hoang-Nam Nguyen, Alexander Schmidt1, Stefan Roscher

[-- Attachment #1: Type: text/plain, Size: 2137 bytes --]

Hi Roland, 
thanks for the quick review. I was hoping you could apply these changes 
for 2.6.30 because this will be the codebase for the next OFED release.
The patch is well tested in HPC environment and we haven't seen any 
issues.
Regarding Antons patch you are right. If a user allocates an 
unrealistically large queue pair it could happen that kmalloc() is not 
able to allocate the memory. In this case we will return ENOMEM to the 
user so the kernel will not be affected at all. We plan to add vmalloc() 
call in case kmalloc() fails for the next kernel release.
 
Mit freundlichen Grüßen / Kind regards
 
Stefan Roscher
 
eHCA/eHEA Linux Driver Development
IBM Systems &Technology Group, Systems Software Development / FW I/O 
Firmware Entwicklung 2
-------------------------------------------------------------------------------------------------------------------------------------------
IBM Deutschland
Schoenaicher Str. 220
71032 Boeblingen
Phone: +49-7031-16-2015
E-Mail: stefan.roscher@de.ibm.com
-------------------------------------------------------------------------------------------------------------------------------------------
IBM Deutschland Research & Development GmbH / Vorsitzender des 
Aufsichtsrats: Martin Jetter
Geschäftsführung: Herbert Kircher
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, 
HRB 243294



From:
Roland Dreier <rdreier@cisco.com>
To:
Stefan Roscher <ossrosch@linux.vnet.ibm.com>
Cc:
"LinuxPPC-Dev" <linuxppc-dev@ozlabs.org>, LKML 
<linux-kernel@vger.kernel.org>, "OF-EWG" <ewg@lists.openfabrics.org>, 
Roland Dreier <rolandd@cisco.com>, Joachim Fenkes/Germany/IBM@IBMDE, 
Christoph Raisch/Germany/IBM@IBMDE, Alexander Schmidt1/Germany/IBM@IBMDE, 
Stefan Roscher/Germany/IBM@IBMDE, Hoang-Nam Nguyen/Germany/IBM@IBMDE
Date:
21.04.2009 19:34
Subject:
Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc



 > +             queue->queue_pages = kmalloc(nr_of_pages * sizeof(void 
*), GFP_KERNEL);

How big might this buffer be?  Any chance of allocation failure due to
memory fragmentation?

 - R.



[-- Attachment #2: Type: text/html, Size: 3277 bytes --]

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-21 17:34   ` Roland Dreier
@ 2009-04-22 14:02     ` Stefan Roscher
  -1 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-22 14:02 UTC (permalink / raw)
  To: Roland Dreier
  Cc: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier, fenkes, raisch,
	alexschm, stefan.roscher, hnguyen

In case of large queue pairs there is the possibillity of allocation failures 
due to memory fragmentationo with kmalloc().To ensure the memory is allocated even
if kmalloc() can not find chunks which are big enough, we try to allocate the memory
with vmalloc().

Signed-off-by: Stefan Roscher <stefan.roscher@de.ibm.com>
---

On Tuesday 21 April 2009 07:34:30 pm Roland Dreier wrote:
>  > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
> 
> How big might this buffer be?  Any chance of allocation failure due to
> memory fragmentation?
> 
>  - R.
Hey Roland, 
yes you are right and here is the patch to circumvent the described problem.
It will apply on top of the patchset.
regards Stefan


 
 drivers/infiniband/hw/ehca/ipz_pt_fn.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
index a260559..1227c59 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -222,8 +222,11 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 	/* allocate queue page pointers */
 	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
 	if (!queue->queue_pages) {
-		ehca_gen_err("Couldn't allocate queue page list");
-		return 0;
+		queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
+		if (!queue->queue_pages) {
+			ehca_gen_err("Couldn't allocate queue page list");
+			return 0;
+		}
 	}
 	memset(queue->queue_pages, 0, nr_of_pages * sizeof(void *));
 
@@ -240,7 +243,10 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 ipz_queue_ctor_exit0:
 	ehca_gen_err("Couldn't alloc pages queue=%p "
 		 "nr_of_pages=%x",  queue, nr_of_pages);
-	kfree(queue->queue_pages);
+	if (is_vmalloc_addr(queue->queue_pages))
+		vfree(queue->queue_pages);
+	else
+		kfree(queue->queue_pages);
 
 	return 0;
 }
@@ -262,7 +268,10 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
 			free_page((unsigned long)queue->queue_pages[i]);
 	}
 
-	kfree(queue->queue_pages);
+	if (is_vmalloc_addr(queue->queue_pages))
+		vfree(queue->queue_pages);
+	else
+		kfree(queue->queue_pages);
 
 	return 1;
 }
-- 
1.5.5





^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-22 14:02     ` Stefan Roscher
  0 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-22 14:02 UTC (permalink / raw)
  To: Roland Dreier
  Cc: fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

In case of large queue pairs there is the possibillity of allocation failures 
due to memory fragmentationo with kmalloc().To ensure the memory is allocated even
if kmalloc() can not find chunks which are big enough, we try to allocate the memory
with vmalloc().

Signed-off-by: Stefan Roscher <stefan.roscher@de.ibm.com>
---

On Tuesday 21 April 2009 07:34:30 pm Roland Dreier wrote:
>  > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
> 
> How big might this buffer be?  Any chance of allocation failure due to
> memory fragmentation?
> 
>  - R.
Hey Roland, 
yes you are right and here is the patch to circumvent the described problem.
It will apply on top of the patchset.
regards Stefan


 
 drivers/infiniband/hw/ehca/ipz_pt_fn.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
index a260559..1227c59 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -222,8 +222,11 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 	/* allocate queue page pointers */
 	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
 	if (!queue->queue_pages) {
-		ehca_gen_err("Couldn't allocate queue page list");
-		return 0;
+		queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
+		if (!queue->queue_pages) {
+			ehca_gen_err("Couldn't allocate queue page list");
+			return 0;
+		}
 	}
 	memset(queue->queue_pages, 0, nr_of_pages * sizeof(void *));
 
@@ -240,7 +243,10 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
 ipz_queue_ctor_exit0:
 	ehca_gen_err("Couldn't alloc pages queue=%p "
 		 "nr_of_pages=%x",  queue, nr_of_pages);
-	kfree(queue->queue_pages);
+	if (is_vmalloc_addr(queue->queue_pages))
+		vfree(queue->queue_pages);
+	else
+		kfree(queue->queue_pages);
 
 	return 0;
 }
@@ -262,7 +268,10 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
 			free_page((unsigned long)queue->queue_pages[i]);
 	}
 
-	kfree(queue->queue_pages);
+	if (is_vmalloc_addr(queue->queue_pages))
+		vfree(queue->queue_pages);
+	else
+		kfree(queue->queue_pages);
 
 	return 1;
 }
-- 
1.5.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-22 14:02     ` Stefan Roscher
  (?)
@ 2009-04-22 14:10     ` michael
  2009-04-22 16:00       ` Stefan Roscher
  -1 siblings, 1 reply; 21+ messages in thread
From: michael @ 2009-04-22 14:10 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: Roland Dreier, fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch,
	alexschm, stefan.roscher

Hi,

Stefan Roscher wrote:
> In case of large queue pairs there is the possibillity of allocation failures 
> due to memory fragmentationo with kmalloc().To ensure the memory is allocated even
> if kmalloc() can not find chunks which are big enough, we try to allocate the memory
> with vmalloc().
>
> Signed-off-by: Stefan Roscher <stefan.roscher@de.ibm.com>
> ---
>
> On Tuesday 21 April 2009 07:34:30 pm Roland Dreier wrote:
>   
>>  > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
>>
>> How big might this buffer be?  Any chance of allocation failure due to
>> memory fragmentation?
>>
>>  - R.
>>     
> Hey Roland, 
> yes you are right and here is the patch to circumvent the described problem.
> It will apply on top of the patchset.
> regards Stefan
>
>   
I don't take the point, if it is not import use the vmalloc. Why you try 
with a kmalloc
alloc first? and why do not use kzalloc?
>  
>  drivers/infiniband/hw/ehca/ipz_pt_fn.c |   17 +++++++++++++----
>  1 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> index a260559..1227c59 100644
> --- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> +++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> @@ -222,8 +222,11 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
>  	/* allocate queue page pointers */
>  	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
>  	if (!queue->queue_pages) {
> -		ehca_gen_err("Couldn't allocate queue page list");
> -		return 0;
> +		queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
> +		if (!queue->queue_pages) {
> +			ehca_gen_err("Couldn't allocate queue page list");
> +			return 0;
> +		}
>  	}
>  	memset(queue->queue_pages, 0, nr_of_pages * sizeof(void *));
>  
> @@ -240,7 +243,10 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
>  ipz_queue_ctor_exit0:
>  	ehca_gen_err("Couldn't alloc pages queue=%p "
>  		 "nr_of_pages=%x",  queue, nr_of_pages);
> -	kfree(queue->queue_pages);
> +	if (is_vmalloc_addr(queue->queue_pages))
> +		vfree(queue->queue_pages);
> +	else
> +		kfree(queue->queue_pages);
>  
>  	return 0;
>  }
> @@ -262,7 +268,10 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
>  			free_page((unsigned long)queue->queue_pages[i]);
>  	}
>  
> -	kfree(queue->queue_pages);
> +	if (is_vmalloc_addr(queue->queue_pages))
> +		vfree(queue->queue_pages);
> +	else
> +		kfree(queue->queue_pages);
>  
>  	return 1;
>  }
>   

Regards Michael

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-22 14:10     ` michael
@ 2009-04-22 16:00       ` Stefan Roscher
  2009-04-22 16:12         ` michael
  0 siblings, 1 reply; 21+ messages in thread
From: Stefan Roscher @ 2009-04-22 16:00 UTC (permalink / raw)
  To: michael
  Cc: Roland Dreier, fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch,
	alexschm, stefan.roscher

On Wednesday 22 April 2009 04:10:18 pm michael wrote:
> Hi,
> 

> I don't take the point, if it is not import use the vmalloc. Why you try 
> with a kmalloc
> alloc first? and why do not use kzalloc?

Because kmalloc() is faster than vmalloc() causing a huge performance win
when someone allocates a large number of queue pairs. We fall back to
vmalloc() only if kmalloc() can't deliver the memory chunk.
We don't need kzalloc because we fill the list right after the alloc.

regards Stefan


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-22 16:00       ` Stefan Roscher
@ 2009-04-22 16:12         ` michael
  0 siblings, 0 replies; 21+ messages in thread
From: michael @ 2009-04-22 16:12 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: Roland Dreier, fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch,
	alexschm, stefan.roscher

Hi,

Stefan Roscher wrote:
> On Wednesday 22 April 2009 04:10:18 pm michael wrote:
>   
>> Hi,
>>
>>     
>
>   
>> I don't take the point, if it is not import use the vmalloc. Why you try 
>> with a kmalloc
>> alloc first? and why do not use kzalloc?
>>     
>
> Because kmalloc() is faster than vmalloc() causing a huge performance win
> when someone allocates a large number of queue pairs. We fall back to
> vmalloc() only if kmalloc() can't deliver the memory chunk.
>   
Sorry I catch later the performace issue.
> We don't need kzalloc because we fill the list right after the alloc.
>
> regards Stefan
>   
Regards Michael
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
>
>   


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [ewg] Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-22 14:02     ` Stefan Roscher
  (?)
  (?)
@ 2009-04-28 13:07     ` Alexander Schmidt
  2009-04-28 14:01         ` Roland Dreier
  -1 siblings, 1 reply; 21+ messages in thread
From: Alexander Schmidt @ 2009-04-28 13:07 UTC (permalink / raw)
  To: Stefan Roscher, Roland Dreier
  Cc: fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

Hi Roland,

did you have a chance to take a look at the patchset and will you apply it, or
are there any outstanding issues we need to address?

Regards,
Alex

On Wed, 22 Apr 2009 16:02:28 +0200
Stefan Roscher <ossrosch@linux.vnet.ibm.com> wrote:

> In case of large queue pairs there is the possibillity of allocation failures 
> due to memory fragmentationo with kmalloc().To ensure the memory is allocated even
> if kmalloc() can not find chunks which are big enough, we try to allocate the memory
> with vmalloc().
> 
> Signed-off-by: Stefan Roscher <stefan.roscher@de.ibm.com>
> ---
> 
> On Tuesday 21 April 2009 07:34:30 pm Roland Dreier wrote:
> >  > +	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
> > 
> > How big might this buffer be?  Any chance of allocation failure due to
> > memory fragmentation?
> > 
> >  - R.
> Hey Roland, 
> yes you are right and here is the patch to circumvent the described problem.
> It will apply on top of the patchset.
> regards Stefan
> 
> 
> 
>  drivers/infiniband/hw/ehca/ipz_pt_fn.c |   17 +++++++++++++----
>  1 files changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> index a260559..1227c59 100644
> --- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> +++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> @@ -222,8 +222,11 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
>  	/* allocate queue page pointers */
>  	queue->queue_pages = kmalloc(nr_of_pages * sizeof(void *), GFP_KERNEL);
>  	if (!queue->queue_pages) {
> -		ehca_gen_err("Couldn't allocate queue page list");
> -		return 0;
> +		queue->queue_pages = vmalloc(nr_of_pages * sizeof(void *));
> +		if (!queue->queue_pages) {
> +			ehca_gen_err("Couldn't allocate queue page list");
> +			return 0;
> +		}
>  	}
>  	memset(queue->queue_pages, 0, nr_of_pages * sizeof(void *));
> 
> @@ -240,7 +243,10 @@ int ipz_queue_ctor(struct ehca_pd *pd, struct ipz_queue *queue,
>  ipz_queue_ctor_exit0:
>  	ehca_gen_err("Couldn't alloc pages queue=%p "
>  		 "nr_of_pages=%x",  queue, nr_of_pages);
> -	kfree(queue->queue_pages);
> +	if (is_vmalloc_addr(queue->queue_pages))
> +		vfree(queue->queue_pages);
> +	else
> +		kfree(queue->queue_pages);
> 
>  	return 0;
>  }
> @@ -262,7 +268,10 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
>  			free_page((unsigned long)queue->queue_pages[i]);
>  	}
> 
> -	kfree(queue->queue_pages);
> +	if (is_vmalloc_addr(queue->queue_pages))
> +		vfree(queue->queue_pages);
> +	else
> +		kfree(queue->queue_pages);
> 
>  	return 1;
>  }

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [ewg] Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-28 13:07     ` [ewg] " Alexander Schmidt
@ 2009-04-28 14:01         ` Roland Dreier
  0 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-28 14:01 UTC (permalink / raw)
  To: Alexander Schmidt
  Cc: Stefan Roscher, fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch,
	alexschm, stefan.roscher

 > did you have a chance to take a look at the patchset and will you apply it, or
 > are there any outstanding issues we need to address?

I guess it's OK, but definitely 2.6.31 material.  I guess I'll stick it
linux-next soon.

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [ewg] Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-28 14:01         ` Roland Dreier
  0 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-28 14:01 UTC (permalink / raw)
  To: Alexander Schmidt
  Cc: fenkes, OF-EWG, LKML, LinuxPPC-Dev, raisch, alexschm,
	Stefan Roscher, stefan.roscher

 > did you have a chance to take a look at the patchset and will you apply it, or
 > are there any outstanding issues we need to address?

I guess it's OK, but definitely 2.6.31 material.  I guess I'll stick it
linux-next soon.

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [ewg] Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-28 14:01         ` Roland Dreier
@ 2009-04-28 14:13           ` Alexander Schmidt
  -1 siblings, 0 replies; 21+ messages in thread
From: Alexander Schmidt @ 2009-04-28 14:13 UTC (permalink / raw)
  To: Roland Dreier
  Cc: Stefan Roscher, fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch,
	alexschm, stefan.roscher

On Tue, 28 Apr 2009 07:01:32 -0700
Roland Dreier <rdreier@cisco.com> wrote:

>  > did you have a chance to take a look at the patchset and will you apply it, or
>  > are there any outstanding issues we need to address?
> 
> I guess it's OK, but definitely 2.6.31 material.  I guess I'll stick it
> linux-next soon.
> 
>  - R.

Okay with us, thank you very much!

Alex

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [ewg] Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-28 14:13           ` Alexander Schmidt
  0 siblings, 0 replies; 21+ messages in thread
From: Alexander Schmidt @ 2009-04-28 14:13 UTC (permalink / raw)
  To: Roland Dreier
  Cc: fenkes, OF-EWG, LKML, LinuxPPC-Dev, raisch, alexschm,
	Stefan Roscher, stefan.roscher

On Tue, 28 Apr 2009 07:01:32 -0700
Roland Dreier <rdreier@cisco.com> wrote:

>  > did you have a chance to take a look at the patchset and will you apply it, or
>  > are there any outstanding issues we need to address?
> 
> I guess it's OK, but definitely 2.6.31 material.  I guess I'll stick it
> linux-next soon.
> 
>  - R.

Okay with us, thank you very much!

Alex

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-21 15:16 ` Stefan Roscher
@ 2009-04-28 15:12   ` Dave Hansen
  -1 siblings, 0 replies; 21+ messages in thread
From: Dave Hansen @ 2009-04-28 15:12 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier, fenkes, raisch,
	alexschm, stefan.roscher, hnguyen

On Tue, 2009-04-21 at 17:16 +0200, Stefan Roscher wrote:
> From: Anton Blanchard <antonb at au1.ibm.com>
> 
> To improve performance of driver ressource allocation,
> replace the vmalloc() call with kmalloc().

Just curious, but how big are these allocations?  Why was vmalloc() even
ever used if we know they'll be small?

-- Dave


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-28 15:12   ` Dave Hansen
  0 siblings, 0 replies; 21+ messages in thread
From: Dave Hansen @ 2009-04-28 15:12 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

On Tue, 2009-04-21 at 17:16 +0200, Stefan Roscher wrote:
> From: Anton Blanchard <antonb at au1.ibm.com>
> 
> To improve performance of driver ressource allocation,
> replace the vmalloc() call with kmalloc().

Just curious, but how big are these allocations?  Why was vmalloc() even
ever used if we know they'll be small?

-- Dave

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-28 15:12   ` Dave Hansen
@ 2009-04-28 16:02     ` Stefan Roscher
  -1 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-28 16:02 UTC (permalink / raw)
  To: Dave Hansen
  Cc: LinuxPPC-Dev, LKML, Roland Dreier, fenkes, raisch, alexschm,
	stefan.roscher, hnguyen

On Tuesday 28 April 2009 05:12:51 pm Dave Hansen wrote:
> On Tue, 2009-04-21 at 17:16 +0200, Stefan Roscher wrote:
> > From: Anton Blanchard <antonb at au1.ibm.com>
> > 
> > To improve performance of driver ressource allocation,
> > replace the vmalloc() call with kmalloc().
> 
> Just curious, but how big are these allocations?  Why was vmalloc() even
> ever used if we know they'll be small?
> 
> -- Dave
> 
> 

The theoretical maximum size can be 512k, but for common queue pairs 
less than 128k is used.Because of the theoretical maximum we implemented
vmalloc() first, but recognized a huge performance impact.

-- Stefan 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-28 16:02     ` Stefan Roscher
  0 siblings, 0 replies; 21+ messages in thread
From: Stefan Roscher @ 2009-04-28 16:02 UTC (permalink / raw)
  To: Dave Hansen; +Cc: fenkes, LKML, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

On Tuesday 28 April 2009 05:12:51 pm Dave Hansen wrote:
> On Tue, 2009-04-21 at 17:16 +0200, Stefan Roscher wrote:
> > From: Anton Blanchard <antonb at au1.ibm.com>
> > 
> > To improve performance of driver ressource allocation,
> > replace the vmalloc() call with kmalloc().
> 
> Just curious, but how big are these allocations?  Why was vmalloc() even
> ever used if we know they'll be small?
> 
> -- Dave
> 
> 

The theoretical maximum size can be 512k, but for common queue pairs 
less than 128k is used.Because of the theoretical maximum we implemented
vmalloc() first, but recognized a huge performance impact.

-- Stefan 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
  2009-04-21 15:16 ` Stefan Roscher
@ 2009-04-28 16:45   ` Roland Dreier
  -1 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-28 16:45 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: LinuxPPC-Dev, LKML, OF-EWG, Roland Dreier, fenkes, raisch,
	alexschm, stefan.roscher, hnguyen

thanks, applied.

 > From: Anton Blanchard <antonb at au1.ibm.com>
 > Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>

please use '@' signs so these are real email addresses.

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc
@ 2009-04-28 16:45   ` Roland Dreier
  0 siblings, 0 replies; 21+ messages in thread
From: Roland Dreier @ 2009-04-28 16:45 UTC (permalink / raw)
  To: Stefan Roscher
  Cc: fenkes, LKML, OF-EWG, LinuxPPC-Dev, raisch, alexschm, stefan.roscher

thanks, applied.

 > From: Anton Blanchard <antonb at au1.ibm.com>
 > Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>

please use '@' signs so these are real email addresses.

 - R.

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2009-04-28 16:45 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-21 15:16 [PATCH 1/3] IB/ehca: Replace vmalloc with kmalloc Stefan Roscher
2009-04-21 15:16 ` Stefan Roscher
2009-04-21 17:34 ` Roland Dreier
2009-04-21 17:34   ` Roland Dreier
2009-04-22  9:11   ` Stefan Roscher
2009-04-22 14:02   ` Stefan Roscher
2009-04-22 14:02     ` Stefan Roscher
2009-04-22 14:10     ` michael
2009-04-22 16:00       ` Stefan Roscher
2009-04-22 16:12         ` michael
2009-04-28 13:07     ` [ewg] " Alexander Schmidt
2009-04-28 14:01       ` Roland Dreier
2009-04-28 14:01         ` Roland Dreier
2009-04-28 14:13         ` Alexander Schmidt
2009-04-28 14:13           ` Alexander Schmidt
2009-04-28 15:12 ` Dave Hansen
2009-04-28 15:12   ` Dave Hansen
2009-04-28 16:02   ` Stefan Roscher
2009-04-28 16:02     ` Stefan Roscher
2009-04-28 16:45 ` Roland Dreier
2009-04-28 16:45   ` Roland Dreier

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.