2017-03-21 15:02:41

by Shanker Donthineni

[permalink] [raw]
Subject: [PATCH] ACPI : Update platform device numa node based on _PXM method

The optional _PXM method evaluates to an integer that identifies the
proximity domain of a device object. This patch implements support for
ACPI _PXM method and updates the platform device numa node id using
acpi_get_node(), which provides the PXM to NUMA mapping information.

Signed-off-by: Shanker Donthineni <[email protected]>
---
drivers/acpi/acpi_platform.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index b4c1a6a..83d953e 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -119,11 +119,14 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
if (IS_ERR(pdev))
dev_err(&adev->dev, "platform device creation failed: %ld\n",
PTR_ERR(pdev));
- else
+ else {
+ set_dev_node(&pdev->dev, acpi_get_node(adev->handle));
dev_dbg(&adev->dev, "created platform device %s\n",
dev_name(&pdev->dev));
+ }

kfree(resources);
+
return pdev;
}
EXPORT_SYMBOL_GPL(acpi_create_platform_device);
--
Qualcomm Datacenter Technologies, Inc. on behalf of the Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.


2017-03-28 21:48:56

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] ACPI : Update platform device numa node based on _PXM method

On Tuesday, March 21, 2017 09:54:30 AM Shanker Donthineni wrote:
> The optional _PXM method evaluates to an integer that identifies the
> proximity domain of a device object. This patch implements support for
> ACPI _PXM method and updates the platform device numa node id using
> acpi_get_node(), which provides the PXM to NUMA mapping information.
>
> Signed-off-by: Shanker Donthineni <[email protected]>

What exactly is the motivation here?

> ---
> drivers/acpi/acpi_platform.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
> index b4c1a6a..83d953e 100644
> --- a/drivers/acpi/acpi_platform.c
> +++ b/drivers/acpi/acpi_platform.c
> @@ -119,11 +119,14 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
> if (IS_ERR(pdev))
> dev_err(&adev->dev, "platform device creation failed: %ld\n",
> PTR_ERR(pdev));
> - else
> + else {
> + set_dev_node(&pdev->dev, acpi_get_node(adev->handle));
> dev_dbg(&adev->dev, "created platform device %s\n",
> dev_name(&pdev->dev));
> + }
>
> kfree(resources);
> +
> return pdev;
> }
> EXPORT_SYMBOL_GPL(acpi_create_platform_device);
>

2017-03-28 22:14:29

by Shanker Donthineni

[permalink] [raw]
Subject: Re: [PATCH] ACPI : Update platform device numa node based on _PXM method

Hi Rafael,


On 03/28/2017 04:43 PM, Rafael J. Wysocki wrote:
> On Tuesday, March 21, 2017 09:54:30 AM Shanker Donthineni wrote:
>> The optional _PXM method evaluates to an integer that identifies the
>> proximity domain of a device object. This patch implements support for
>> ACPI _PXM method and updates the platform device numa node id using
>> acpi_get_node(), which provides the PXM to NUMA mapping information.
>>
>> Signed-off-by: Shanker Donthineni <[email protected]>
> What exactly is the motivation here?

We have a couple of platform devices some of them are attached to socket0 and others to a different socket. We would like to covert memory allocations in Qualcomm platform device drivers to a NUMA aware allocation to improve performance.


>> ---
>> drivers/acpi/acpi_platform.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
>> index b4c1a6a..83d953e 100644
>> --- a/drivers/acpi/acpi_platform.c
>> +++ b/drivers/acpi/acpi_platform.c
>> @@ -119,11 +119,14 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
>> if (IS_ERR(pdev))
>> dev_err(&adev->dev, "platform device creation failed: %ld\n",
>> PTR_ERR(pdev));
>> - else
>> + else {
>> + set_dev_node(&pdev->dev, acpi_get_node(adev->handle));
>> dev_dbg(&adev->dev, "created platform device %s\n",
>> dev_name(&pdev->dev));
>> + }
>>
>> kfree(resources);
>> +
>> return pdev;
>> }
>> EXPORT_SYMBOL_GPL(acpi_create_platform_device);
>>

--
Shanker Donthineni
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

2017-03-28 22:21:04

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] ACPI : Update platform device numa node based on _PXM method

On Tuesday, March 28, 2017 05:14:13 PM Shanker Donthineni wrote:
> Hi Rafael,
>
>
> On 03/28/2017 04:43 PM, Rafael J. Wysocki wrote:
> > On Tuesday, March 21, 2017 09:54:30 AM Shanker Donthineni wrote:
> >> The optional _PXM method evaluates to an integer that identifies the
> >> proximity domain of a device object. This patch implements support for
> >> ACPI _PXM method and updates the platform device numa node id using
> >> acpi_get_node(), which provides the PXM to NUMA mapping information.
> >>
> >> Signed-off-by: Shanker Donthineni <[email protected]>
> > What exactly is the motivation here?
>
> We have a couple of platform devices some of them are attached
> to socket0 and others to a different socket. We would like to covert
> memory allocations in Qualcomm platform device drivers to a NUMA
> aware allocation to improve performance.

All of the above information should be there in the patch changelog and
presumably the patch should be a part of a larger series so the way this
feature is going to be used is more clear.

Thanks,
Rafael

2017-03-28 22:51:31

by Shanker Donthineni

[permalink] [raw]
Subject: Re: [PATCH] ACPI : Update platform device numa node based on _PXM method

Hi Rafael,


On 03/28/2017 05:15 PM, Rafael J. Wysocki wrote:
> On Tuesday, March 28, 2017 05:14:13 PM Shanker Donthineni wrote:
>> Hi Rafael,
>>
>>
>> On 03/28/2017 04:43 PM, Rafael J. Wysocki wrote:
>>> On Tuesday, March 21, 2017 09:54:30 AM Shanker Donthineni wrote:
>>>> The optional _PXM method evaluates to an integer that identifies the
>>>> proximity domain of a device object. This patch implements support for
>>>> ACPI _PXM method and updates the platform device numa node id using
>>>> acpi_get_node(), which provides the PXM to NUMA mapping information.
>>>>
>>>> Signed-off-by: Shanker Donthineni <[email protected]>
>>> What exactly is the motivation here?
>> We have a couple of platform devices some of them are attached
>> to socket0 and others to a different socket. We would like to covert
>> memory allocations in Qualcomm platform device drivers to a NUMA
>> aware allocation to improve performance.
> All of the above information should be there in the patch changelog and
> presumably the patch should be a part of a larger series so the way this
> feature is going to be used is more clear.

Sorry, I didn't quite get what's larger series? I'm happy to include above information in commit/changelog text. We are trying to allocate memory using standard function devm_kmalloc() but the function is always allocating memory from NUMA node 0. The inline function dev_to_node(dev) always returns -1 on our system even though we are setting PXM method in ACPI DSDT to non-zero value.

For device tree based kernel, the field 'dev->numa_node' is populated based on the DT property which is specified according to the below document. But in case of ACPI based kernel this NUMA field is always initialized to -1 for platform devices.

https://www.kernel.org/doc/Documentation/devicetree/bindings/numa.txt

Please guide me, should I send v2 patch with the suggested changelog text? otherwise I don't have any other patches to show our use case.

>
> Thanks,
> Rafael
>

--
Shanker Donthineni
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

2017-03-29 10:24:47

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] ACPI : Update platform device numa node based on _PXM method

On Wed, Mar 29, 2017 at 12:51 AM, Shanker Donthineni
<[email protected]> wrote:
> Hi Rafael,
>
>
> On 03/28/2017 05:15 PM, Rafael J. Wysocki wrote:
>> On Tuesday, March 28, 2017 05:14:13 PM Shanker Donthineni wrote:
>>> Hi Rafael,
>>>
>>>
>>> On 03/28/2017 04:43 PM, Rafael J. Wysocki wrote:
>>>> On Tuesday, March 21, 2017 09:54:30 AM Shanker Donthineni wrote:
>>>>> The optional _PXM method evaluates to an integer that identifies the
>>>>> proximity domain of a device object. This patch implements support for
>>>>> ACPI _PXM method and updates the platform device numa node id using
>>>>> acpi_get_node(), which provides the PXM to NUMA mapping information.
>>>>>
>>>>> Signed-off-by: Shanker Donthineni <[email protected]>
>>>> What exactly is the motivation here?
>>> We have a couple of platform devices some of them are attached
>>> to socket0 and others to a different socket. We would like to covert
>>> memory allocations in Qualcomm platform device drivers to a NUMA
>>> aware allocation to improve performance.
>> All of the above information should be there in the patch changelog and
>> presumably the patch should be a part of a larger series so the way this
>> feature is going to be used is more clear.
>
> Sorry, I didn't quite get what's larger series? I'm happy to include above information in
> commit/changelog text. We are trying to allocate memory using standard function
> devm_kmalloc() but the function is always allocating memory from NUMA node 0.
> The inline function dev_to_node(dev) always returns -1 on our system even though
> we are setting PXM method in ACPI DSDT to non-zero value.

OK

So please add the above to the patch changelog too.

Thanks,
Rafael