Message ID | 3908561D78D1C84285E8C5FCA982C28F32AA5A72@ORSMSX114.amr.corp.intel.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Fri, Jul 10, 2015 at 9:14 PM, Luck, Tony <tony.luck@intel.com> wrote: > --- a/drivers/acpi/apei/einj.c > +++ b/drivers/acpi/apei/einj.c > @@ -379,10 +379,9 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, > rc = apei_resources_add(&addr_resources, > trigger_param_region->address, > trigger_param_region->bit_width/8, true); > - if (rc) > - goto out_fini; > - rc = apei_resources_sub(&trigger_resources, > - &addr_resources); > + if (!rc) > + rc = apei_resources_sub(&trigger_resources, > + &addr_resources); > } > apei_resources_fini(&addr_resources); > if (rc) > > This bit looks wrong ... the line right after the this diff ends is > goto out_fini; > > so we'll call apei_resources_fini() twice in the rc!=0 case. As I see it frees different struct apei_resources: here addr_resources and trigger_resources at the out_fini. Anyway calling apei_resources_fini twice is safe: it removes and frees ranges from lists. If these lists are empty apei_resources_fini does nothing. > > -Tony -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/drivers/acpi/apei/einj.c +++ b/drivers/acpi/apei/einj.c @@ -379,10 +379,9 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, rc = apei_resources_add(&addr_resources, trigger_param_region->address, trigger_param_region->bit_width/8, true); - if (rc) - goto out_fini; - rc = apei_resources_sub(&trigger_resources, - &addr_resources); + if (!rc) + rc = apei_resources_sub(&trigger_resources, + &addr_resources); } apei_resources_fini(&addr_resources); if (rc)