diff mbox

[v3,5/5] acpi_processor: do not mark present at boot but not onlined CPU as onlined

Message ID 1397150061-29735-6-git-send-email-imammedo@redhat.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Igor Mammedov April 10, 2014, 5:14 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>
---
 drivers/acpi/acpi_processor.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

Comments

Ingo Molnar April 14, 2014, 9:21 a.m. UTC | #1
* Igor Mammedov <imammedo@redhat.com> 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>
> ---
>  drivers/acpi/acpi_processor.c |    3 ---
>  1 files changed, 0 insertions(+), 3 deletions(-)

Can this fix be moved first too, or does it have undesirable side 
effects on unmodified kernels?

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 April 15, 2014, 5:36 a.m. UTC | #2
On Monday, April 14, 2014 11:21:47 AM Ingo Molnar wrote:
> 
> * Igor Mammedov <imammedo@redhat.com> 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>
> > ---
> >  drivers/acpi/acpi_processor.c |    3 ---
> >  1 files changed, 0 insertions(+), 3 deletions(-)
> 
> Can this fix be moved first too, or does it have undesirable side 
> effects on unmodified kernels?

This patch is not correct.

Rafael

--
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 April 15, 2014, 5:43 a.m. UTC | #3
On Thursday, April 10, 2014 07:14:21 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.

What do you mean by that?  What *exactly* is the failure scenario?

> 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>
> ---
>  drivers/acpi/acpi_processor.c |    3 ---
>  1 files changed, 0 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
> index c29c2c3..d56e4b4 100644
> --- a/drivers/acpi/acpi_processor.c
> +++ b/drivers/acpi/acpi_processor.c
> @@ -403,9 +403,6 @@ static int acpi_processor_add(struct acpi_device *device,
>  	if (result)
>  		goto err;
>  
> -	pr->dev = dev;

The line above has to stay as is.

> -	dev->offline = pr->flags.need_hotplug_init;
> -
>  	/* Trigger the processor driver's .probe() if present. */
>  	if (device_attach(dev) >= 0)
>  		return 1;
>
diff mbox

Patch

diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index c29c2c3..d56e4b4 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -403,9 +403,6 @@  static int acpi_processor_add(struct acpi_device *device,
 	if (result)
 		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)
 		return 1;