All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lan Tianyu <lantianyu1986@gmail.com>
To: Hanjun Guo <hanjun.guo@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	Patch Tracking <patches@linaro.org>,
	"linux-kernel@vger kernel org" <linux-kernel@vger.kernel.org>,
	linaro-acpi <linaro-acpi@lists.linaro.org>,
	Graeme Gregory <graeme.gregory@linaro.org>
Subject: Re: [PATCH v2 2/3] ACPI / processor_core: Rework _PDC related stuff to make it more arch-independent
Date: Mon, 10 Feb 2014 10:21:09 +0800	[thread overview]
Message-ID: <CAOLK0pxxF+3e3gzgfSYuz+R8+n6hnB9rrCpzxdGNJPyHQ4xS5w@mail.gmail.com> (raw)
In-Reply-To: <1391865018-3446-3-git-send-email-hanjun.guo@linaro.org>

2014-02-08 21:10 GMT+08:00 Hanjun Guo <hanjun.guo@linaro.org>:
> _PDC related stuff in processor_core.c is little bit X86/IA64 dependent,
> rework the code to make it more arch-independent, no functional change
> in this patch.
>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
> ---
>  arch/ia64/include/asm/acpi.h  |    5 +----
>  arch/ia64/kernel/acpi.c       |   17 +++++++++++++++++
>  arch/x86/include/asm/acpi.h   |   19 +------------------
>  arch/x86/kernel/acpi/cstate.c |   31 +++++++++++++++++++++++++++++++
>  drivers/acpi/processor_core.c |   19 +------------------
>  5 files changed, 51 insertions(+), 40 deletions(-)
>
> diff --git a/arch/ia64/include/asm/acpi.h b/arch/ia64/include/asm/acpi.h
> index d651102..d2b8b9d 100644
> --- a/arch/ia64/include/asm/acpi.h
> +++ b/arch/ia64/include/asm/acpi.h
> @@ -152,10 +152,7 @@ extern int __initdata nid_to_pxm_map[MAX_NUMNODES];
>  #endif
>
>  static inline bool arch_has_acpi_pdc(void) { return true; }
> -static inline void arch_acpi_set_pdc_bits(u32 *buf)
> -{
> -       buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
> -}
> +extern void arch_acpi_set_pdc_bits(u32 *buf);
>
>  #define acpi_unlazy_tlb(x)
>
> diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
> index 07d209c..d71f64a 100644
> --- a/arch/ia64/kernel/acpi.c
> +++ b/arch/ia64/kernel/acpi.c
> @@ -1014,3 +1014,20 @@ EXPORT_SYMBOL(acpi_unregister_ioapic);
>   * TBD when when IA64 starts to support suspend...
>   */
>  int acpi_suspend_lowlevel(void) { return 0; }
> +
> +void arch_acpi_set_pdc_bits(u32 *buf)
> +{
> +       /* Enable coordination with firmware's _TSD info */
> +       buf[2] |= ACPI_PDC_SMP_T_SWCOORD;

Hi Hanjun:
            You can write like this.
            buf[2] |= ACPI_PDC_SMP_T_SWCOORD | ACPI_PDC_EST_CAPABILITY_SMP;

> +       if (boot_option_idle_override == IDLE_NOMWAIT) {
> +               /*
> +                * If mwait is disabled for CPU C-states, the C2C3_FFH access
> +                * mode will be disabled in the parameter of _PDC object.
> +                * Of course C1_FFH access mode will also be disabled.
> +                */
> +               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH);
> +
> +       }
> +
> +       buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
> +}
> diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
> index c8c1e70..e9f71bc 100644
> --- a/arch/x86/include/asm/acpi.h
> +++ b/arch/x86/include/asm/acpi.h
> @@ -147,24 +147,7 @@ static inline bool arch_has_acpi_pdc(void)
>                 c->x86_vendor == X86_VENDOR_CENTAUR);
>  }
>
> -static inline void arch_acpi_set_pdc_bits(u32 *buf)
> -{
> -       struct cpuinfo_x86 *c = &cpu_data(0);
> -
> -       buf[2] |= ACPI_PDC_C_CAPABILITY_SMP;
> -
> -       if (cpu_has(c, X86_FEATURE_EST))
> -               buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
> -
> -       if (cpu_has(c, X86_FEATURE_ACPI))
> -               buf[2] |= ACPI_PDC_T_FFH;
> -
> -       /*
> -        * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
> -        */
> -       if (!cpu_has(c, X86_FEATURE_MWAIT))
> -               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
> -}
> +extern void arch_acpi_set_pdc_bits(u32 *buf);
>
>  #else /* !CONFIG_ACPI */
>
> diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
> index e69182f..aa9aed9 100644
> --- a/arch/x86/kernel/acpi/cstate.c
> +++ b/arch/x86/kernel/acpi/cstate.c
> @@ -16,6 +16,37 @@
>  #include <asm/mwait.h>
>  #include <asm/special_insns.h>
>
> +void arch_acpi_set_pdc_bits(u32 *buf)
> +{
> +       struct cpuinfo_x86 *c = &cpu_data(0);
> +
> +       /* Enable coordination with firmware's _TSD info */
> +       buf[2] |= ACPI_PDC_SMP_T_SWCOORD;
> +       if (boot_option_idle_override == IDLE_NOMWAIT) {
> +               /*
> +                * If mwait is disabled for CPU C-states, the C2C3_FFH access
> +                * mode will be disabled in the parameter of _PDC object.
> +                * Of course C1_FFH access mode will also be disabled.
> +                */
> +               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH);
> +
> +       }
> +
> +       buf[2] |= ACPI_PDC_C_CAPABILITY_SMP;

This is not right. ACPI_PDC_C_CAPABILITY_SMP contians ACPI_PDC_C_C1_FFH and
ACPI_PDC_C_C2C3_FFH. boot_option_idle_override is meaningless here.

You should keep original order and put the check at last.


> +
> +       if (cpu_has(c, X86_FEATURE_EST))
> +               buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
> +
> +       if (cpu_has(c, X86_FEATURE_ACPI))
> +               buf[2] |= ACPI_PDC_T_FFH;
> +
> +       /*
> +        * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
> +        */
> +       if (!cpu_has(c, X86_FEATURE_MWAIT))
> +               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
> +}
> +
>  /*
>   * Initialize bm_flags based on the CPU cache properties
>   * On SMP it depends on cache configuration
> diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
> index 01b2656..31a4281 100644
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -255,9 +255,6 @@ static void acpi_set_pdc_bits(u32 *buf)
>         buf[0] = ACPI_PDC_REVISION_ID;
>         buf[1] = 1;
>
> -       /* Enable coordination with firmware's _TSD info */
> -       buf[2] = ACPI_PDC_SMP_T_SWCOORD;
> -
>         /* Twiddle arch-specific bits needed for _PDC */
>         arch_acpi_set_pdc_bits(buf);
>  }
> @@ -282,7 +279,7 @@ static struct acpi_object_list *acpi_processor_alloc_pdc(void)
>                 return NULL;
>         }
>
> -       buf = kmalloc(12, GFP_KERNEL);
> +       buf = kzalloc(12, GFP_KERNEL);
>         if (!buf) {
>                 printk(KERN_ERR "Memory allocation error\n");
>                 kfree(obj);
> @@ -310,20 +307,6 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
>  {
>         acpi_status status = AE_OK;
>
> -       if (boot_option_idle_override == IDLE_NOMWAIT) {
> -               /*
> -                * If mwait is disabled for CPU C-states, the C2C3_FFH access
> -                * mode will be disabled in the parameter of _PDC object.
> -                * Of course C1_FFH access mode will also be disabled.
> -                */
> -               union acpi_object *obj;
> -               u32 *buffer = NULL;
> -
> -               obj = pdc_in->pointer;
> -               buffer = (u32 *)(obj->buffer.pointer);
> -               buffer[2] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH);
> -
> -       }
>         status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL);
>
>         if (ACPI_FAILURE(status))
> --
> 1.7.9.5
>
> --
> 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



-- 
Best regards
Tianyu Lan

  reply	other threads:[~2014-02-10  2:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-08 13:10 [PATCH v2 0/3] Prepare for running ACPI on !x86 and !ia64 Hanjun Guo
2014-02-08 13:10 ` [PATCH v2 1/3] ACPI / idle: Make idle_boot_override depend on x86 and ia64 Hanjun Guo
2014-02-10  1:55   ` Lan Tianyu
2014-02-18  1:13   ` Rafael J. Wysocki
2014-02-18  8:59     ` Hanjun Guo
2014-02-08 13:10 ` [PATCH v2 2/3] ACPI / processor_core: Rework _PDC related stuff to make it more arch-independent Hanjun Guo
2014-02-10  2:21   ` Lan Tianyu [this message]
2014-02-10  7:09     ` Hanjun Guo
2014-02-10  7:09       ` Hanjun Guo
2014-02-08 13:10 ` [PATCH v2 3/3] ACPI: Introduce map_gic_id() to get apic id from MADT or _MAT method Hanjun Guo

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=CAOLK0pxxF+3e3gzgfSYuz+R8+n6hnB9rrCpzxdGNJPyHQ4xS5w@mail.gmail.com \
    --to=lantianyu1986@gmail.com \
    --cc=graeme.gregory@linaro.org \
    --cc=hanjun.guo@linaro.org \
    --cc=linaro-acpi@lists.linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@linaro.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.