From: Darren Hart <dvhart@infradead.org>
To: "Michał Kępień" <kernel@kempniu.pl>
Cc: platform-driver-x86@vger.kernel.org,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Andy Lutomirski" <luto@kernel.org>,
"Andy Lutomirski" <luto@amacapital.net>,
"Mario Limonciello" <mario_limonciello@dell.com>,
"Pali Rohár" <pali.rohar@gmail.com>,
"Rafael Wysocki" <rjw@rjwysocki.net>,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org
Subject: Re: [PATCH 09/16] platform/x86: wmi: Instantiate all devices before adding them
Date: Mon, 5 Jun 2017 20:03:02 -0700 [thread overview]
Message-ID: <20170606030302.GC27270@fury> (raw)
In-Reply-To: <20170601204339.GA1842@kmp-mobile.hq.kempniu.pl>
On Thu, Jun 01, 2017 at 10:43:39PM +0200, Michał Kępień wrote:
> I know I have probably started sounding like a broken record by now, but
> I still have not seen any response (apart from the typos getting fixed)
> to my comments on this patch which I posted in January 2016 [1].
>
> None of the issues I found back then are really critical, but I did
> point out a potential memory leak (granted, an unlikely one), so it
> might be a good idea to at least take a second look before merging.
>
> [1] https://www.spinics.net/lists/platform-driver-x86/msg08201.html
Thanks for being persistent, some good points in there. I'd like to just squash
these into this patch (9/16), but I'll include them here for an ack from you and
Andy L. that this is what you meant, and consistent with his
intent/understanding:
>From 2512da1593574a66eb48d7105885e959b38db410 Mon Sep 17 00:00:00 2001
Message-Id: <2512da1593574a66eb48d7105885e959b38db410.1496717988.git.dvhart@infradead.org>
From: "Darren Hart (VMware)" <dvhart@infradead.org>
Date: Mon, 5 Jun 2017 19:54:03 -0700
Subject: [PATCH] =?UTF-8?q?platform/x86:=20wmi:=20Apply=20fixes=20per=20Mi?=
=?UTF-8?q?cha=C5=82=20K=C4=99pie=C5=84=20(squash)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Per:
https://www.spinics.net/lists/platform-driver-x86/msg08201.html
Eliminate the kfree of a wblock with a null bus now that we ignore
duplicate GUIDs in parse_wdg.
Move the out_free_pointer: label and kfree to the end of the function,
clearly marking it as a return path.
Rework the device_add loop at the end of parse_wdg to avoid leaking the
wblock, and symmetrically call wmi_method_enable() if (debug_event).
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
---
drivers/platform/x86/wmi.c | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index bfc0a3f..fbce876 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -863,14 +863,7 @@ static void wmi_free_devices(struct acpi_device *device)
list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
if (wblock->acpi_device == device) {
list_del(&wblock->list);
- if (wblock->dev.dev.bus) {
- /* Device was initialized. */
- device_del(&wblock->dev.dev);
- put_device(&wblock->dev.dev);
- } else {
- /* device_initialize was not called. */
- kfree(wblock);
- }
+ device_unregister(&wblock->dev.dev);
}
}
}
@@ -903,9 +896,9 @@ static bool guid_already_parsed(struct acpi_device *device,
static int parse_wdg(struct device *wmi_bus_dev, struct acpi_device *device)
{
struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
- union acpi_object *obj;
const struct guid_block *gblock;
struct wmi_block *wblock, *next;
+ union acpi_object *obj;
acpi_status status;
int retval = 0;
u32 i, total;
@@ -958,24 +951,27 @@ static int parse_wdg(struct device *wmi_bus_dev, struct acpi_device *device)
}
}
-out_free_pointer:
- kfree(out.pointer);
-
/*
* Now that all of the devices are created, add them to the
* device tree and probe subdrivers.
*/
list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
- if (wblock->acpi_device == device) {
- if (device_add(&wblock->dev.dev) != 0) {
- dev_err(wmi_bus_dev,
- "failed to register %pULL\n",
- wblock->gblock.guid);
- list_del(&wblock->list);
- }
+ if (wblock->acpi_device != device)
+ continue;
+
+ retval = device_add(&wblock->dev.dev);
+ if (retval) {
+ dev_err(wmi_bus_dev, "failed to register %pULL\n",
+ wblock->gblock.guid);
+ if (debug_event)
+ wmi_method_enable(wblock, 0);
+ list_del(&wblock->list);
+ put_device(&wblock->dev.dev);
}
}
+out_free_pointer:
+ kfree(out.pointer);
return retval;
}
--
2.9.4
--
Darren Hart
VMware Open Source Technology Center
WARNING: multiple messages have this Message-ID (diff)
From: Darren Hart <dvhart@infradead.org>
To: "Michał Kępień" <kernel@kempniu.pl>
Cc: platform-driver-x86@vger.kernel.org,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Andy Lutomirski" <luto@kernel.org>,
"Andy Lutomirski" <luto@amacapital.net>,
"Mario Limonciello" <mario_limonciello@dell.com>,
"Pali Rohár" <pali.rohar@gmail.com>,
"Rafael Wysocki" <rjw@rjwysocki.net>,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org
Subject: Re: [PATCH 09/16] platform/x86: wmi: Instantiate all devices before adding them
Date: Mon, 5 Jun 2017 20:03:02 -0700 [thread overview]
Message-ID: <20170606030302.GC27270@fury> (raw)
In-Reply-To: <20170601204339.GA1842@kmp-mobile.hq.kempniu.pl>
On Thu, Jun 01, 2017 at 10:43:39PM +0200, Michał Kępień wrote:
> I know I have probably started sounding like a broken record by now, but
> I still have not seen any response (apart from the typos getting fixed)
> to my comments on this patch which I posted in January 2016 [1].
>
> None of the issues I found back then are really critical, but I did
> point out a potential memory leak (granted, an unlikely one), so it
> might be a good idea to at least take a second look before merging.
>
> [1] https://www.spinics.net/lists/platform-driver-x86/msg08201.html
Thanks for being persistent, some good points in there. I'd like to just squash
these into this patch (9/16), but I'll include them here for an ack from you and
Andy L. that this is what you meant, and consistent with his
intent/understanding:
From 2512da1593574a66eb48d7105885e959b38db410 Mon Sep 17 00:00:00 2001
Message-Id: <2512da1593574a66eb48d7105885e959b38db410.1496717988.git.dvhart@infradead.org>
From: "Darren Hart (VMware)" <dvhart@infradead.org>
Date: Mon, 5 Jun 2017 19:54:03 -0700
Subject: [PATCH] =?UTF-8?q?platform/x86:=20wmi:=20Apply=20fixes=20per=20Mi?=
=?UTF-8?q?cha=C5=82=20K=C4=99pie=C5=84=20(squash)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Per:
https://www.spinics.net/lists/platform-driver-x86/msg08201.html
Eliminate the kfree of a wblock with a null bus now that we ignore
duplicate GUIDs in parse_wdg.
Move the out_free_pointer: label and kfree to the end of the function,
clearly marking it as a return path.
Rework the device_add loop at the end of parse_wdg to avoid leaking the
wblock, and symmetrically call wmi_method_enable() if (debug_event).
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
---
drivers/platform/x86/wmi.c | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index bfc0a3f..fbce876 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -863,14 +863,7 @@ static void wmi_free_devices(struct acpi_device *device)
list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
if (wblock->acpi_device == device) {
list_del(&wblock->list);
- if (wblock->dev.dev.bus) {
- /* Device was initialized. */
- device_del(&wblock->dev.dev);
- put_device(&wblock->dev.dev);
- } else {
- /* device_initialize was not called. */
- kfree(wblock);
- }
+ device_unregister(&wblock->dev.dev);
}
}
}
@@ -903,9 +896,9 @@ static bool guid_already_parsed(struct acpi_device *device,
static int parse_wdg(struct device *wmi_bus_dev, struct acpi_device *device)
{
struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
- union acpi_object *obj;
const struct guid_block *gblock;
struct wmi_block *wblock, *next;
+ union acpi_object *obj;
acpi_status status;
int retval = 0;
u32 i, total;
@@ -958,24 +951,27 @@ static int parse_wdg(struct device *wmi_bus_dev, struct acpi_device *device)
}
}
-out_free_pointer:
- kfree(out.pointer);
-
/*
* Now that all of the devices are created, add them to the
* device tree and probe subdrivers.
*/
list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
- if (wblock->acpi_device == device) {
- if (device_add(&wblock->dev.dev) != 0) {
- dev_err(wmi_bus_dev,
- "failed to register %pULL\n",
- wblock->gblock.guid);
- list_del(&wblock->list);
- }
+ if (wblock->acpi_device != device)
+ continue;
+
+ retval = device_add(&wblock->dev.dev);
+ if (retval) {
+ dev_err(wmi_bus_dev, "failed to register %pULL\n",
+ wblock->gblock.guid);
+ if (debug_event)
+ wmi_method_enable(wblock, 0);
+ list_del(&wblock->list);
+ put_device(&wblock->dev.dev);
}
}
+out_free_pointer:
+ kfree(out.pointer);
return retval;
}
--
2.9.4
--
Darren Hart
VMware Open Source Technology Center
next prev parent reply other threads:[~2017-06-06 3:03 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-27 5:31 [PATCH 00/16] Convert WMI to a proper bus Darren Hart
2017-05-27 5:31 ` [PATCH 01/16] platform/x86: wmi: Drop "Mapper (un)loaded" messages Darren Hart
2017-05-27 5:31 ` [PATCH 02/16] platform/x86: wmi: Pass the acpi_device through to parse_wdg Darren Hart
2017-05-27 5:31 ` [PATCH 03/16] platform/x86: wmi: Clean up acpi_wmi_add Darren Hart
2017-05-27 5:31 ` [PATCH 04/16] platform/x86: wmi: Track wmi devices per ACPI device Darren Hart
2017-05-27 5:31 ` [PATCH 05/16] platform/x86: wmi: Turn WMI into a bus driver Darren Hart
2017-05-27 5:31 ` [PATCH 06/16] platform/x86: wmi: Fix error handling when creating devices Darren Hart
2017-05-27 5:31 ` [PATCH 07/16] platform/x86: wmi: Split devices into types and add basic sysfs attributes Darren Hart
2017-05-27 5:31 ` [PATCH 08/16] platform/x86: wmi: Probe data objects for read and write capabilities Darren Hart
2017-05-27 5:31 ` [PATCH 09/16] platform/x86: wmi: Instantiate all devices before adding them Darren Hart
2017-06-01 20:43 ` Michał Kępień
2017-06-06 3:03 ` Darren Hart [this message]
2017-06-06 3:03 ` Darren Hart
2017-06-06 16:03 ` Andy Lutomirski
2017-06-08 4:43 ` Michał Kępień
2017-05-27 5:31 ` [PATCH 10/16] platform/x86: wmi: Incorporate acpi_install_notify_handler Darren Hart
2017-05-27 5:31 ` [PATCH 11/16] platform/x86: wmi: Add a new interface to read block data Darren Hart
2017-05-27 5:31 ` [PATCH 12/16] platform/x86: wmi: Bind the platform device, not the ACPI node Darren Hart
2017-05-27 5:31 ` [PATCH 13/16] platform/x86: wmi: Add an interface for subdrivers to access sibling devices Darren Hart
2017-05-27 5:31 ` [PATCH 14/16] platform/x86: wmi: Require query for data blocks, rename writable to setable Darren Hart
2017-05-27 5:31 ` [PATCH 15/16] platform/x86: wmi-mof: New driver to expose embedded WMI MOF metadata Darren Hart
2017-05-27 11:14 ` Pali Rohár
2017-05-27 21:07 ` Andy Lutomirski
2017-05-30 15:24 ` Andy Shevchenko
2017-05-30 16:46 ` Darren Hart
2017-05-30 17:03 ` Pali Rohár
2017-05-30 17:21 ` Andy Shevchenko
2017-06-05 22:14 ` Darren Hart
2017-06-05 22:19 ` Pali Rohár
2017-06-05 22:39 ` Andy Lutomirski
2017-06-06 11:05 ` Pali Rohár
2017-06-06 13:46 ` Mario.Limonciello
2017-06-06 13:46 ` Mario.Limonciello
2017-06-06 13:56 ` Pali Rohár
2017-06-07 17:39 ` Pali Rohár
2017-06-07 20:23 ` Mario.Limonciello
2017-06-07 20:23 ` Mario.Limonciello
2017-06-07 20:50 ` Pali Rohár
2017-06-09 15:46 ` Mario.Limonciello
2017-06-09 15:46 ` Mario.Limonciello
2017-06-09 21:51 ` Pali Rohár
2017-06-15 16:46 ` Pali Rohár
2017-06-06 2:33 ` Darren Hart
2017-05-27 5:31 ` [PATCH 16/16] platform/x86: dell-wmi: Convert to the WMI bus infrastructure Darren Hart
2017-05-27 10:50 ` Pali Rohár
2017-05-27 16:04 ` Andy Lutomirski
2017-05-27 16:17 ` Dmitry Torokhov
2017-05-27 18:40 ` Andy Lutomirski
2017-05-30 2:45 ` Dmitry Torokhov
2017-06-06 3:04 ` Darren Hart
2017-05-27 19:49 ` [PATCH 00/16] Convert WMI to a proper bus Rafael J. Wysocki
2017-05-27 20:01 ` Andy Shevchenko
2017-06-06 17:23 ` Darren Hart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170606030302.GC27270@fury \
--to=dvhart@infradead.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=kernel@kempniu.pl \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mario_limonciello@dell.com \
--cc=pali.rohar@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rjw@rjwysocki.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.