Messages in this thread | | | From | (Eric W. Biederman) | Subject | Re: [PATCH] msi: Only keep one msi_desc in each slab entry. | Date | Tue, 11 Jul 2006 00:42:43 -0600 |
| |
"Pekka Enberg" <penberg@cs.helsinki.fi> writes:
> On 7/11/06, Eric W. Biederman <ebiederm@xmission.com> wrote: >> >> It looks like someone confused kmem_cache_create with a different >> allocator and was attempting to give it knowledge of how many cache >> entries there were. >> >> With the unfortunate result that each slab entry was big enough to >> hold every irq. >> >> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> >> --- >> drivers/pci/msi.c | 4 ++-- >> 1 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c >> index 0cd4a3e..082e942 100644 >> --- a/drivers/pci/msi.c >> +++ b/drivers/pci/msi.c >> @@ -40,13 +40,13 @@ msi_register(struct msi_ops *ops) >> >> static void msi_cache_ctor(void *p, kmem_cache_t *cache, unsigned long flags) >> { >> - memset(p, 0, NR_IRQS * sizeof(struct msi_desc)); >> + memset(p, 0, sizeof(struct msi_desc)); > > You can use kmem_cache_zalloc() for this.
Please look at what the code changes. Please recognize how very bad the current code is behaving.
As for the rest sure go ahead and create a patch to address it but that really is a separate issue and thus a separate patch.
I'm just trying to keep the kernel from calling BUG_ON the first time a msi irq is allocated on a kernel with a maximum NR_CPUS configuration, and from wasting memory the rest of the time.
Or you know how bad the msi code is when every patch to fix a major issue is followed up comments on how to improve the code even further.
Eric
>> } >> >> static int msi_cache_init(void) >> { >> msi_cachep = kmem_cache_create("msi_cache", >> - NR_IRQS * sizeof(struct msi_desc), >> + sizeof(struct msi_desc), >> 0, SLAB_HWCACHE_ALIGN, msi_cache_ctor, NULL); >> if (!msi_cachep) >> return -ENOMEM; >> -- >> 1.4.1.gac83a >> >> - >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ >> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |