Re: [PATCH 4/4] acpi: cppc: replace writeX/readX to PCC with relaxed version

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15 January 2016 at 13:43, Prashanth Prakash <pprakash@xxxxxxxxxxxxxx> wrote:
> We do not have a strict read/write order requirement while accessing
> PCC subspace. The only requirement is all access should be committed
> before triggering the PCC doorbell to transfer the ownership of PCC
> to the platform and this requirement is enforced by the PCC driver.
>
> Profiling on a many core system shows improvement of about 1.8us on
> average per freq change request(about 10% improvement on average).
> Since these operations are executed while holding the pcc_lock,
> reducing this time helps the CPPC implementation to scale much
> better as the number of cores increases.
>
> Signed-off-by: Prashanth Prakash <pprakash@xxxxxxxxxxxxxx>
> ---
>  drivers/acpi/cppc_acpi.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
>

Acked-by: Ashwin Chaugule <ashwin.chaugule@xxxxxxxxxx>

> diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
> index b85759d..87936d7 100644
> --- a/drivers/acpi/cppc_acpi.c
> +++ b/drivers/acpi/cppc_acpi.c
> @@ -119,10 +119,10 @@ static int send_pcc_cmd(u16 cmd)
>         }
>
>         /* Write to the shared comm region. */
> -       writew(cmd, &generic_comm_base->command);
> +       writew_relaxed(cmd, &generic_comm_base->command);
>
>         /* Flip CMD COMPLETE bit */
> -       writew(0, &generic_comm_base->status);
> +       writew_relaxed(0, &generic_comm_base->status);
>
>         /* Ring doorbell */
>         ret = mbox_send_message(pcc_channel, &cmd);
> @@ -604,16 +604,16 @@ static int cpc_read(struct cpc_reg *reg, u64 *val)
>
>                 switch (reg->bit_width) {
>                 case 8:
> -                       *val = readb(vaddr);
> +                       *val = readb_relaxed(vaddr);
>                         break;
>                 case 16:
> -                       *val = readw(vaddr);
> +                       *val = readw_relaxed(vaddr);
>                         break;
>                 case 32:
> -                       *val = readl(vaddr);
> +                       *val = readl_relaxed(vaddr);
>                         break;
>                 case 64:
> -                       *val = readq(vaddr);
> +                       *val = readq_relaxed(vaddr);
>                         break;
>                 default:
>                         pr_debug("Error: Cannot read %u bit width from PCC\n",
> @@ -635,16 +635,16 @@ static int cpc_write(struct cpc_reg *reg, u64 val)
>
>                 switch (reg->bit_width) {
>                 case 8:
> -                       writeb(val, vaddr);
> +                       writeb_relaxed(val, vaddr);
>                         break;
>                 case 16:
> -                       writew(val, vaddr);
> +                       writew_relaxed(val, vaddr);
>                         break;
>                 case 32:
> -                       writel(val, vaddr);
> +                       writel_relaxed(val, vaddr);
>                         break;
>                 case 64:
> -                       writeq(val, vaddr);
> +                       writeq_relaxed(val, vaddr);
>                         break;
>                 default:
>                         pr_debug("Error: Cannot write %u bit width to PCC\n",
> --
> Qualcomm Technologies, Inc. on behalf
> of the Qualcomm Innovation Center, Inc.  The Qualcomm Innovation Center, Inc.
> is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
>
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux