* [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen
@ 2010-07-27 1:25 Yinghai Lu
2010-07-27 2:05 ` Corey Minyard
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Yinghai Lu @ 2010-07-27 1:25 UTC (permalink / raw)
To: Corey Minyard, Andrew Morton, Matthew Garrett, Len Brown,
Myron Stowe
Cc: openipmi-developer, linux-kernel
also print out the reg spacing and size for spmi and smbios.
so bios guys could have idea to make them consistent.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/char/ipmi/ipmi_si_intf.c | 47 ++++++++++++++++++++++++++++++++-------
1 file changed, 39 insertions(+), 8 deletions(-)
Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
@@ -1804,9 +1804,12 @@ static int hotmod_handler(const char *va
info->irq_setup = std_irq_setup;
info->slave_addr = ipmb;
- if (!add_smi(info))
+ if (!add_smi(info)) {
if (try_smi_init(info))
cleanup_one_si(info);
+ } else {
+ kfree(info);
+ }
} else {
/* remove */
struct smi_info *e, *tmp_e;
@@ -1890,9 +1893,12 @@ static __devinit void hardcode_find_bmc(
info->irq_setup = std_irq_setup;
info->slave_addr = slave_addrs[i];
- if (!add_smi(info))
+ if (!add_smi(info)) {
if (try_smi_init(info))
cleanup_one_si(info);
+ } else {
+ kfree(info);
+ }
}
}
@@ -2088,7 +2094,13 @@ static __devinit int try_init_spmi(struc
}
info->io.addr_data = spmi->addr.address;
- add_smi(info);
+ pr_info("ipmi_si: SPMI: %s %#lx regsize %d spacing %d irq %d\n",
+ (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
+ info->io.addr_data, info->io.regsize, info->io.regspacing,
+ info->irq);
+
+ if (add_smi(info))
+ kfree(info);
return 0;
}
@@ -2204,7 +2216,10 @@ static int __devinit ipmi_pnp_probe(stru
res, info->io.regsize, info->io.regspacing,
info->irq);
- return add_smi(info);
+ if (add_smi(info))
+ goto err_free;
+
+ return 0;
err_free:
kfree(info);
@@ -2362,7 +2377,13 @@ static __devinit void try_init_dmi(struc
if (info->irq)
info->irq_setup = std_irq_setup;
- add_smi(info);
+ pr_info("ipmi_si: SMBIOS: %s %#lx regsize %d spacing %d irq %d\n",
+ (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
+ info->io.addr_data, info->io.regsize, info->io.regspacing,
+ info->irq);
+
+ if (add_smi(info))
+ kfree(info);
}
static void __devinit dmi_find_bmc(void)
@@ -2468,7 +2489,10 @@ static int __devinit ipmi_pci_probe(stru
&pdev->resource[0], info->io.regsize, info->io.regspacing,
info->irq);
- return add_smi(info);
+ if (add_smi(info))
+ kfree(info);
+
+ return 0;
}
static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
@@ -2581,7 +2605,12 @@ static int __devinit ipmi_of_probe(struc
dev_set_drvdata(&dev->dev, info);
- return add_smi(info);
+ if (add_smi(info)) {
+ kfree(info);
+ return -EBUSY;
+ }
+
+ return 0;
}
static int __devexit ipmi_of_remove(struct of_device *dev)
@@ -3018,6 +3047,8 @@ static __devinit void default_find_bmc(v
info->io.addr_data);
} else
cleanup_one_si(info);
+ } else {
+ kfree(info);
}
}
}
@@ -3045,7 +3076,7 @@ static int add_smi(struct smi_info *new_
si_to_str[new_smi->si_type]);
mutex_lock(&smi_infos_lock);
if (!is_new_interface(new_smi)) {
- printk(KERN_CONT PFX "duplicate interface\n");
+ printk(KERN_CONT " duplicate interface\n");
rv = -EBUSY;
goto out_err;
}
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen
2010-07-27 1:25 [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen Yinghai Lu
@ 2010-07-27 2:05 ` Corey Minyard
2010-07-27 4:41 ` Yinghai Lu
2010-07-27 4:57 ` [PATCH 1/2] " Yinghai Lu
2010-07-27 4:58 ` [PATCH 2/2] ipmi: print info for spmi and smbios path like acpi and pci Yinghai Lu
2 siblings, 1 reply; 7+ messages in thread
From: Corey Minyard @ 2010-07-27 2:05 UTC (permalink / raw)
To: Yinghai Lu
Cc: Andrew Morton, Matthew Garrett, Len Brown, Myron Stowe,
openipmi-developer, linux-kernel
Please run this through checkpatch, as it has coding style violations.
Also, this patch appears to fix bugs in addition to adding the print.
Can we have a separate patch for that?
I'm also not clear on the reason for this. I believe all this
information is already available in /proc/ipmi/<if#>/params. I don't
think there is a strong reason to print it to the log.
-corey
On 07/26/2010 08:25 PM, Yinghai Lu wrote:
> also print out the reg spacing and size for spmi and smbios.
> so bios guys could have idea to make them consistent.
>
> Signed-off-by: Yinghai Lu<yinghai@kernel.org>
>
> ---
> drivers/char/ipmi/ipmi_si_intf.c | 47 ++++++++++++++++++++++++++++++++-------
> 1 file changed, 39 insertions(+), 8 deletions(-)
>
> Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> ===================================================================
> --- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
> +++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> @@ -1804,9 +1804,12 @@ static int hotmod_handler(const char *va
> info->irq_setup = std_irq_setup;
> info->slave_addr = ipmb;
>
> - if (!add_smi(info))
> + if (!add_smi(info)) {
> if (try_smi_init(info))
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> + }
> } else {
> /* remove */
> struct smi_info *e, *tmp_e;
> @@ -1890,9 +1893,12 @@ static __devinit void hardcode_find_bmc(
> info->irq_setup = std_irq_setup;
> info->slave_addr = slave_addrs[i];
>
> - if (!add_smi(info))
> + if (!add_smi(info)) {
> if (try_smi_init(info))
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> + }
> }
> }
>
> @@ -2088,7 +2094,13 @@ static __devinit int try_init_spmi(struc
> }
> info->io.addr_data = spmi->addr.address;
>
> - add_smi(info);
> + pr_info("ipmi_si: SPMI: %s %#lx regsize %d spacing %d irq %d\n",
> + (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
> + info->io.addr_data, info->io.regsize, info->io.regspacing,
> + info->irq);
> +
> + if (add_smi(info))
> + kfree(info);
>
> return 0;
> }
> @@ -2204,7 +2216,10 @@ static int __devinit ipmi_pnp_probe(stru
> res, info->io.regsize, info->io.regspacing,
> info->irq);
>
> - return add_smi(info);
> + if (add_smi(info))
> + goto err_free;
> +
> + return 0;
>
> err_free:
> kfree(info);
> @@ -2362,7 +2377,13 @@ static __devinit void try_init_dmi(struc
> if (info->irq)
> info->irq_setup = std_irq_setup;
>
> - add_smi(info);
> + pr_info("ipmi_si: SMBIOS: %s %#lx regsize %d spacing %d irq %d\n",
> + (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
> + info->io.addr_data, info->io.regsize, info->io.regspacing,
> + info->irq);
> +
> + if (add_smi(info))
> + kfree(info);
> }
>
> static void __devinit dmi_find_bmc(void)
> @@ -2468,7 +2489,10 @@ static int __devinit ipmi_pci_probe(stru
> &pdev->resource[0], info->io.regsize, info->io.regspacing,
> info->irq);
>
> - return add_smi(info);
> + if (add_smi(info))
> + kfree(info);
> +
> + return 0;
> }
>
> static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
> @@ -2581,7 +2605,12 @@ static int __devinit ipmi_of_probe(struc
>
> dev_set_drvdata(&dev->dev, info);
>
> - return add_smi(info);
> + if (add_smi(info)) {
> + kfree(info);
> + return -EBUSY;
> + }
> +
> + return 0;
> }
>
> static int __devexit ipmi_of_remove(struct of_device *dev)
> @@ -3018,6 +3047,8 @@ static __devinit void default_find_bmc(v
> info->io.addr_data);
> } else
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> }
> }
> }
> @@ -3045,7 +3076,7 @@ static int add_smi(struct smi_info *new_
> si_to_str[new_smi->si_type]);
> mutex_lock(&smi_infos_lock);
> if (!is_new_interface(new_smi)) {
> - printk(KERN_CONT PFX "duplicate interface\n");
> + printk(KERN_CONT " duplicate interface\n");
> rv = -EBUSY;
> goto out_err;
> }
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen
2010-07-27 2:05 ` Corey Minyard
@ 2010-07-27 4:41 ` Yinghai Lu
2010-07-27 14:42 ` Corey Minyard
0 siblings, 1 reply; 7+ messages in thread
From: Yinghai Lu @ 2010-07-27 4:41 UTC (permalink / raw)
To: Corey Minyard
Cc: Andrew Morton, Matthew Garrett, Len Brown, Myron Stowe,
openipmi-developer, linux-kernel
On 07/26/2010 07:05 PM, Corey Minyard wrote:
> Please run this through checkpatch, as it has coding style violations.
yhlu@linux-siqj:~/xx/xx/kernel/tip/linux-2.6> ./scripts/checkpatch.pl patches/ipmi_reg_size.patch
total: 0 errors, 0 warnings, 105 lines checked
patches/ipmi_reg_size.patch has no obvious style problems and is ready for submission.
yhlu@linux-siqj:~/xx/xx/kernel/tip/linux-2.6>
>
> Also, this patch appears to fix bugs in addition to adding the print.
> Can we have a separate patch for that?
in the comment log, i already mentioned that.
will separate it to twol
>
> I'm also not clear on the reason for this. I believe all this
> information is already available in /proc/ipmi/<if#>/params. I don't
> think there is a strong reason to print it to the log.
then why there is printing for ACPI path and pci path?
Yinghai
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen
2010-07-27 4:41 ` Yinghai Lu
@ 2010-07-27 14:42 ` Corey Minyard
0 siblings, 0 replies; 7+ messages in thread
From: Corey Minyard @ 2010-07-27 14:42 UTC (permalink / raw)
To: Yinghai Lu
Cc: Andrew Morton, Matthew Garrett, Len Brown, Myron Stowe,
openipmi-developer, linux-kernel
On 07/26/2010 11:41 PM, Yinghai Lu wrote:
> On 07/26/2010 07:05 PM, Corey Minyard wrote:
>
>> Please run this through checkpatch, as it has coding style violations.
>>
> yhlu@linux-siqj:~/xx/xx/kernel/tip/linux-2.6> ./scripts/checkpatch.pl patches/ipmi_reg_size.patch
> total: 0 errors, 0 warnings, 105 lines checked
>
> patches/ipmi_reg_size.patch has no obvious style problems and is ready for submission.
> yhlu@linux-siqj:~/xx/xx/kernel/tip/linux-2.6>
>
Sorry, you are right.
>
>> Also, this patch appears to fix bugs in addition to adding the print.
>> Can we have a separate patch for that?
>>
> in the comment log, i already mentioned that.
>
> will separate it to twol
>
Ok, thanks
>
>> I'm also not clear on the reason for this. I believe all this
>> information is already available in /proc/ipmi/<if#>/params. I don't
>> think there is a strong reason to print it to the log.
>>
> then why there is printing for ACPI path and pci path?
>
Well, I'm not sure on this. You are right, it is printed for those
paths and not for DMI or SPMI cases. Printing too much information is
not generally a good idea, but this may be useful. I guess to make it
consistent it would be best to add this.
-corey
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] ipmi: Fix memleaking for add_smi when duplicating happen
2010-07-27 1:25 [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen Yinghai Lu
2010-07-27 2:05 ` Corey Minyard
@ 2010-07-27 4:57 ` Yinghai Lu
2010-07-27 15:44 ` Myron Stowe
2010-07-27 4:58 ` [PATCH 2/2] ipmi: print info for spmi and smbios path like acpi and pci Yinghai Lu
2 siblings, 1 reply; 7+ messages in thread
From: Yinghai Lu @ 2010-07-27 4:57 UTC (permalink / raw)
To: Corey Minyard, Andrew Morton, Matthew Garrett, Len Brown,
Myron Stowe
Cc: openipmi-developer, linux-kernel
need free the temp info struct when we have duplicated ones
-v2: seperate printing change to another patch
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/char/ipmi/ipmi_si_intf.c | 35 ++++++++++++++++++++++++++++-------
1 file changed, 28 insertions(+), 7 deletions(-)
Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
@@ -1804,9 +1804,12 @@ static int hotmod_handler(const char *va
info->irq_setup = std_irq_setup;
info->slave_addr = ipmb;
- if (!add_smi(info))
+ if (!add_smi(info)) {
if (try_smi_init(info))
cleanup_one_si(info);
+ } else {
+ kfree(info);
+ }
} else {
/* remove */
struct smi_info *e, *tmp_e;
@@ -1890,9 +1893,12 @@ static __devinit void hardcode_find_bmc(
info->irq_setup = std_irq_setup;
info->slave_addr = slave_addrs[i];
- if (!add_smi(info))
+ if (!add_smi(info)) {
if (try_smi_init(info))
cleanup_one_si(info);
+ } else {
+ kfree(info);
+ }
}
}
@@ -2088,7 +2094,8 @@ static __devinit int try_init_spmi(struc
}
info->io.addr_data = spmi->addr.address;
- add_smi(info);
+ if (add_smi(info))
+ kfree(info);
return 0;
}
@@ -2204,7 +2211,10 @@ static int __devinit ipmi_pnp_probe(stru
res, info->io.regsize, info->io.regspacing,
info->irq);
- return add_smi(info);
+ if (add_smi(info))
+ goto err_free;
+
+ return 0;
err_free:
kfree(info);
@@ -2362,7 +2372,8 @@ static __devinit void try_init_dmi(struc
if (info->irq)
info->irq_setup = std_irq_setup;
- add_smi(info);
+ if (add_smi(info))
+ kfree(info);
}
static void __devinit dmi_find_bmc(void)
@@ -2468,7 +2479,10 @@ static int __devinit ipmi_pci_probe(stru
&pdev->resource[0], info->io.regsize, info->io.regspacing,
info->irq);
- return add_smi(info);
+ if (add_smi(info))
+ kfree(info);
+
+ return 0;
}
static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
@@ -2581,7 +2595,12 @@ static int __devinit ipmi_of_probe(struc
dev_set_drvdata(&dev->dev, info);
- return add_smi(info);
+ if (add_smi(info)) {
+ kfree(info);
+ return -EBUSY;
+ }
+
+ return 0;
}
static int __devexit ipmi_of_remove(struct of_device *dev)
@@ -3018,6 +3037,8 @@ static __devinit void default_find_bmc(v
info->io.addr_data);
} else
cleanup_one_si(info);
+ } else {
+ kfree(info);
}
}
}
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 1/2] ipmi: Fix memleaking for add_smi when duplicating happen
2010-07-27 4:57 ` [PATCH 1/2] " Yinghai Lu
@ 2010-07-27 15:44 ` Myron Stowe
0 siblings, 0 replies; 7+ messages in thread
From: Myron Stowe @ 2010-07-27 15:44 UTC (permalink / raw)
To: Yinghai Lu
Cc: Corey Minyard, Andrew Morton, Matthew Garrett, Len Brown,
openipmi-developer, linux-kernel
On Mon, 2010-07-26 at 21:57 -0700, Yinghai Lu wrote:
> need free the temp info struct when we have duplicated ones
Nice catch on these. Could you improve the patch description please.
Myron
>
> -v2: seperate printing change to another patch
>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>
> ---
> drivers/char/ipmi/ipmi_si_intf.c | 35 ++++++++++++++++++++++++++++-------
> 1 file changed, 28 insertions(+), 7 deletions(-)
>
> Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> ===================================================================
> --- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
> +++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> @@ -1804,9 +1804,12 @@ static int hotmod_handler(const char *va
> info->irq_setup = std_irq_setup;
> info->slave_addr = ipmb;
>
> - if (!add_smi(info))
> + if (!add_smi(info)) {
> if (try_smi_init(info))
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> + }
> } else {
> /* remove */
> struct smi_info *e, *tmp_e;
> @@ -1890,9 +1893,12 @@ static __devinit void hardcode_find_bmc(
> info->irq_setup = std_irq_setup;
> info->slave_addr = slave_addrs[i];
>
> - if (!add_smi(info))
> + if (!add_smi(info)) {
> if (try_smi_init(info))
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> + }
> }
> }
>
> @@ -2088,7 +2094,8 @@ static __devinit int try_init_spmi(struc
> }
> info->io.addr_data = spmi->addr.address;
>
> - add_smi(info);
> + if (add_smi(info))
> + kfree(info);
>
> return 0;
> }
> @@ -2204,7 +2211,10 @@ static int __devinit ipmi_pnp_probe(stru
> res, info->io.regsize, info->io.regspacing,
> info->irq);
>
> - return add_smi(info);
> + if (add_smi(info))
> + goto err_free;
> +
> + return 0;
>
> err_free:
> kfree(info);
> @@ -2362,7 +2372,8 @@ static __devinit void try_init_dmi(struc
> if (info->irq)
> info->irq_setup = std_irq_setup;
>
> - add_smi(info);
> + if (add_smi(info))
> + kfree(info);
> }
>
> static void __devinit dmi_find_bmc(void)
> @@ -2468,7 +2479,10 @@ static int __devinit ipmi_pci_probe(stru
> &pdev->resource[0], info->io.regsize, info->io.regspacing,
> info->irq);
>
> - return add_smi(info);
> + if (add_smi(info))
> + kfree(info);
> +
> + return 0;
> }
>
> static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
> @@ -2581,7 +2595,12 @@ static int __devinit ipmi_of_probe(struc
>
> dev_set_drvdata(&dev->dev, info);
>
> - return add_smi(info);
> + if (add_smi(info)) {
> + kfree(info);
> + return -EBUSY;
> + }
> +
> + return 0;
> }
>
> static int __devexit ipmi_of_remove(struct of_device *dev)
> @@ -3018,6 +3037,8 @@ static __devinit void default_find_bmc(v
> info->io.addr_data);
> } else
> cleanup_one_si(info);
> + } else {
> + kfree(info);
> }
> }
> }
>
--
Myron Stowe HP Open Source Linux Lab (OSLL)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] ipmi: print info for spmi and smbios path like acpi and pci
2010-07-27 1:25 [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen Yinghai Lu
2010-07-27 2:05 ` Corey Minyard
2010-07-27 4:57 ` [PATCH 1/2] " Yinghai Lu
@ 2010-07-27 4:58 ` Yinghai Lu
2 siblings, 0 replies; 7+ messages in thread
From: Yinghai Lu @ 2010-07-27 4:58 UTC (permalink / raw)
To: Corey Minyard, Andrew Morton, Matthew Garrett, Len Brown,
Myron Stowe
Cc: openipmi-developer, linux-kernel
print out the reg spacing and size for spmi and smbios.
so bios guys could have idea to make them consistent.
also remove extra PFX on duplicating path.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/char/ipmi/ipmi_si_intf.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
@@ -2094,6 +2094,11 @@ static __devinit int try_init_spmi(struc
}
info->io.addr_data = spmi->addr.address;
+ pr_info("ipmi_si: SPMI: %s %#lx regsize %d spacing %d irq %d\n",
+ (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
+ info->io.addr_data, info->io.regsize, info->io.regspacing,
+ info->irq);
+
if (add_smi(info))
kfree(info);
@@ -2372,6 +2377,11 @@ static __devinit void try_init_dmi(struc
if (info->irq)
info->irq_setup = std_irq_setup;
+ pr_info("ipmi_si: SMBIOS: %s %#lx regsize %d spacing %d irq %d\n",
+ (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
+ info->io.addr_data, info->io.regsize, info->io.regspacing,
+ info->irq);
+
if (add_smi(info))
kfree(info);
}
@@ -3066,7 +3076,7 @@ static int add_smi(struct smi_info *new_
si_to_str[new_smi->si_type]);
mutex_lock(&smi_infos_lock);
if (!is_new_interface(new_smi)) {
- printk(KERN_CONT PFX "duplicate interface\n");
+ printk(KERN_CONT " duplicate interface\n");
rv = -EBUSY;
goto out_err;
}
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-07-27 15:44 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-27 1:25 [PATCH] ipmi: Fix memleaking for add_smi when duplicating happen Yinghai Lu
2010-07-27 2:05 ` Corey Minyard
2010-07-27 4:41 ` Yinghai Lu
2010-07-27 14:42 ` Corey Minyard
2010-07-27 4:57 ` [PATCH 1/2] " Yinghai Lu
2010-07-27 15:44 ` Myron Stowe
2010-07-27 4:58 ` [PATCH 2/2] ipmi: print info for spmi and smbios path like acpi and pci Yinghai Lu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox