diff mbox

[v5,2/4] acpi_processor: do not mark present at boot but not onlined CPU as onlined

Message ID 1399322991-19329-3-git-send-email-imammedo@redhat.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Igor Mammedov May 5, 2014, 8:49 p.m. UTC
acpi_processor_add() assumes that present at boot CPUs
are always onlined, it is not so if a CPU failed to become
onlined. As result acpi_processor_add() will mark such CPU
device as onlined in sysfs and following attempts to
online/offline it using /sys/device/system/cpu/cpuX/online
attribute will fail.

Do not poke into device internals in acpi_processor_add()
and touch "struct device { .offline }" attribute, since
for CPUs onlined at boot it's set by:
  topology_init() -> arch_register_cpu() -> register_cpu()
before ACPI device tree is parsed, and for hotplugged
CPUs it's set when userspace onlines CPU via sysfs.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Toshi Kani <toshi.kani@hp.com>
---
v2:
 - fix regression in v1 leading to NULL pointer dereference
   on CPU unplug, do not remove "pr->dev = dev;"
---
 drivers/acpi/acpi_processor.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

Comments

Rafael J. Wysocki May 7, 2014, 11:48 p.m. UTC | #1
On Monday, May 05, 2014 10:49:49 PM Igor Mammedov wrote:
> acpi_processor_add() assumes that present at boot CPUs
> are always onlined, it is not so if a CPU failed to become
> onlined. As result acpi_processor_add() will mark such CPU
> device as onlined in sysfs and following attempts to
> online/offline it using /sys/device/system/cpu/cpuX/online
> attribute will fail.
> 
> Do not poke into device internals in acpi_processor_add()
> and touch "struct device { .offline }" attribute, since
> for CPUs onlined at boot it's set by:
>   topology_init() -> arch_register_cpu() -> register_cpu()
> before ACPI device tree is parsed, and for hotplugged
> CPUs it's set when userspace onlines CPU via sysfs.
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Acked-by: Toshi Kani <toshi.kani@hp.com>

Would there be a problem if I applied this separately from the rest of the
series?

> ---
> v2:
>  - fix regression in v1 leading to NULL pointer dereference
>    on CPU unplug, do not remove "pr->dev = dev;"
> ---
>  drivers/acpi/acpi_processor.c |    1 -
>  1 files changed, 0 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
> index b06f5f5..52c81c4 100644
> --- a/drivers/acpi/acpi_processor.c
> +++ b/drivers/acpi/acpi_processor.c
> @@ -405,7 +405,6 @@ static int acpi_processor_add(struct acpi_device *device,
>  		goto err;
>  
>  	pr->dev = dev;
> -	dev->offline = pr->flags.need_hotplug_init;
>  
>  	/* Trigger the processor driver's .probe() if present. */
>  	if (device_attach(dev) >= 0)
>
Ingo Molnar May 8, 2014, 6:09 a.m. UTC | #2
* Rafael J. Wysocki <rjw@rjwysocki.net> wrote:

> On Monday, May 05, 2014 10:49:49 PM Igor Mammedov wrote:
> > acpi_processor_add() assumes that present at boot CPUs
> > are always onlined, it is not so if a CPU failed to become
> > onlined. As result acpi_processor_add() will mark such CPU
> > device as onlined in sysfs and following attempts to
> > online/offline it using /sys/device/system/cpu/cpuX/online
> > attribute will fail.
> > 
> > Do not poke into device internals in acpi_processor_add()
> > and touch "struct device { .offline }" attribute, since
> > for CPUs onlined at boot it's set by:
> >   topology_init() -> arch_register_cpu() -> register_cpu()
> > before ACPI device tree is parsed, and for hotplugged
> > CPUs it's set when userspace onlines CPU via sysfs.
> > 
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > Acked-by: Toshi Kani <toshi.kani@hp.com>
> 
> Would there be a problem if I applied this separately from the rest 
> of the series?

If you push the fix upstream for v3.15 then it would be fine and I 
could base the other patches on top of your (soon to be upstream) 
commit.

Thanks,

	Ingo
--
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
Ingo Molnar May 8, 2014, 11:17 a.m. UTC | #3
* Rafael J. Wysocki <rjw@rjwysocki.net> wrote:

> On Thursday, May 08, 2014 08:09:35 AM Ingo Molnar wrote:
> > 
> > * Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
> > 
> > > On Monday, May 05, 2014 10:49:49 PM Igor Mammedov wrote:
> > > > acpi_processor_add() assumes that present at boot CPUs
> > > > are always onlined, it is not so if a CPU failed to become
> > > > onlined. As result acpi_processor_add() will mark such CPU
> > > > device as onlined in sysfs and following attempts to
> > > > online/offline it using /sys/device/system/cpu/cpuX/online
> > > > attribute will fail.
> > > > 
> > > > Do not poke into device internals in acpi_processor_add()
> > > > and touch "struct device { .offline }" attribute, since
> > > > for CPUs onlined at boot it's set by:
> > > >   topology_init() -> arch_register_cpu() -> register_cpu()
> > > > before ACPI device tree is parsed, and for hotplugged
> > > > CPUs it's set when userspace onlines CPU via sysfs.
> > > > 
> > > > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > > > Acked-by: Toshi Kani <toshi.kani@hp.com>
> > > 
> > > Would there be a problem if I applied this separately from the rest 
> > > of the series?
> > 
> > If you push the fix upstream for v3.15 then it would be fine and I 
> > could base the other patches on top of your (soon to be upstream) 
> > commit.
> 
> OK, I can do that.
> 
> We also seem to need this in -stable, right?

Yeah, agreed.

Thanks,

	Ingo
--
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
Rafael J. Wysocki May 8, 2014, 11:33 a.m. UTC | #4
On Thursday, May 08, 2014 08:09:35 AM Ingo Molnar wrote:
> 
> * Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
> 
> > On Monday, May 05, 2014 10:49:49 PM Igor Mammedov wrote:
> > > acpi_processor_add() assumes that present at boot CPUs
> > > are always onlined, it is not so if a CPU failed to become
> > > onlined. As result acpi_processor_add() will mark such CPU
> > > device as onlined in sysfs and following attempts to
> > > online/offline it using /sys/device/system/cpu/cpuX/online
> > > attribute will fail.
> > > 
> > > Do not poke into device internals in acpi_processor_add()
> > > and touch "struct device { .offline }" attribute, since
> > > for CPUs onlined at boot it's set by:
> > >   topology_init() -> arch_register_cpu() -> register_cpu()
> > > before ACPI device tree is parsed, and for hotplugged
> > > CPUs it's set when userspace onlines CPU via sysfs.
> > > 
> > > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > > Acked-by: Toshi Kani <toshi.kani@hp.com>
> > 
> > Would there be a problem if I applied this separately from the rest 
> > of the series?
> 
> If you push the fix upstream for v3.15 then it would be fine and I 
> could base the other patches on top of your (soon to be upstream) 
> commit.

OK, I can do that.

We also seem to need this in -stable, right?
diff mbox

Patch

diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index b06f5f5..52c81c4 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -405,7 +405,6 @@  static int acpi_processor_add(struct acpi_device *device,
 		goto err;
 
 	pr->dev = dev;
-	dev->offline = pr->flags.need_hotplug_init;
 
 	/* Trigger the processor driver's .probe() if present. */
 	if (device_attach(dev) >= 0)