diff mbox series

[1/4] coresight: cti: use device_* to iterate over device child nodes

Message ID 20240801-device_child_node_access-v1-1-ddfa21bef6f2@gmail.com (mailing list archive)
State Handled Elsewhere
Headers show
Series use device_for_each_child_node_scoped to access device child nodes | expand

Commit Message

Javier Carrasco Aug. 1, 2024, 6:13 a.m. UTC
Drop the manual access to the fwnode of the device to iterate over its
child nodes. `device_for_each_child_node` macro provides direct access
to the child nodes, and given that they are only required within the
loop, the scoped variant of the macro can be used.

Use the `device_for_each_child_node_scoped` macro to iterate over the
direct child nodes of the device.

Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
---
 drivers/hwtracing/coresight/coresight-cti-platform.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

Comments

Suzuki K Poulose Aug. 1, 2024, 9:20 a.m. UTC | #1
On 01/08/2024 07:13, Javier Carrasco wrote:
> Drop the manual access to the fwnode of the device to iterate over its
> child nodes. `device_for_each_child_node` macro provides direct access
> to the child nodes, and given that they are only required within the
> loop, the scoped variant of the macro can be used.
> 
> Use the `device_for_each_child_node_scoped` macro to iterate over the
> direct child nodes of the device.
> 
> Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
> ---
>   drivers/hwtracing/coresight/coresight-cti-platform.c | 10 +++-------
>   1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight-cti-platform.c b/drivers/hwtracing/coresight/coresight-cti-platform.c
> index ccef04f27f12..d0ae10bf6128 100644
> --- a/drivers/hwtracing/coresight/coresight-cti-platform.c
> +++ b/drivers/hwtracing/coresight/coresight-cti-platform.c
> @@ -416,20 +416,16 @@ static int cti_plat_create_impdef_connections(struct device *dev,
>   					      struct cti_drvdata *drvdata)
>   {
>   	int rc = 0;
> -	struct fwnode_handle *fwnode = dev_fwnode(dev);
> -	struct fwnode_handle *child = NULL;
>   
> -	if (IS_ERR_OR_NULL(fwnode))
> +	if (IS_ERR_OR_NULL(dev_fwnode(dev)))
>   		return -EINVAL;
>   
> -	fwnode_for_each_child_node(fwnode, child) {
> +	device_for_each_child_node_scoped(dev, child) {
>   		if (cti_plat_node_name_eq(child, CTI_DT_CONNS))
> -			rc = cti_plat_create_connection(dev, drvdata,
> -							child);
> +			rc = cti_plat_create_connection(dev, drvdata, child);
>   		if (rc != 0)
>   			break;

Don't we need to fwnode_handle_put(child) here, since we removed the
outer one ?

Suzuki
Javier Carrasco Aug. 1, 2024, 10:37 a.m. UTC | #2
On 01/08/2024 11:20, Suzuki K Poulose wrote:
> On 01/08/2024 07:13, Javier Carrasco wrote:
>> Drop the manual access to the fwnode of the device to iterate over its
>> child nodes. `device_for_each_child_node` macro provides direct access
>> to the child nodes, and given that they are only required within the
>> loop, the scoped variant of the macro can be used.
>>
>> Use the `device_for_each_child_node_scoped` macro to iterate over the
>> direct child nodes of the device.
>>
>> Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
>> ---
>>   drivers/hwtracing/coresight/coresight-cti-platform.c | 10 +++-------
>>   1 file changed, 3 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/hwtracing/coresight/coresight-cti-platform.c b/
>> drivers/hwtracing/coresight/coresight-cti-platform.c
>> index ccef04f27f12..d0ae10bf6128 100644
>> --- a/drivers/hwtracing/coresight/coresight-cti-platform.c
>> +++ b/drivers/hwtracing/coresight/coresight-cti-platform.c
>> @@ -416,20 +416,16 @@ static int
>> cti_plat_create_impdef_connections(struct device *dev,
>>                             struct cti_drvdata *drvdata)
>>   {
>>       int rc = 0;
>> -    struct fwnode_handle *fwnode = dev_fwnode(dev);
>> -    struct fwnode_handle *child = NULL;
>>   -    if (IS_ERR_OR_NULL(fwnode))
>> +    if (IS_ERR_OR_NULL(dev_fwnode(dev)))
>>           return -EINVAL;
>>   -    fwnode_for_each_child_node(fwnode, child) {
>> +    device_for_each_child_node_scoped(dev, child) {
>>           if (cti_plat_node_name_eq(child, CTI_DT_CONNS))
>> -            rc = cti_plat_create_connection(dev, drvdata,
>> -                            child);
>> +            rc = cti_plat_create_connection(dev, drvdata, child);
>>           if (rc != 0)
>>               break;
> 
> Don't we need to fwnode_handle_put(child) here, since we removed the
> outer one ?
> 
> Suzuki
> 

Hi Suzuki,

No, we don't need fwnode_handle_put(child) anymore because the scoped
variant of the macro is used.

Best regards,
Javier Carrasco
Suzuki K Poulose Aug. 2, 2024, 7:50 a.m. UTC | #3
On 01/08/2024 11:37, Javier Carrasco wrote:
> On 01/08/2024 11:20, Suzuki K Poulose wrote:
>> On 01/08/2024 07:13, Javier Carrasco wrote:
>>> Drop the manual access to the fwnode of the device to iterate over its
>>> child nodes. `device_for_each_child_node` macro provides direct access
>>> to the child nodes, and given that they are only required within the
>>> loop, the scoped variant of the macro can be used.
>>>
>>> Use the `device_for_each_child_node_scoped` macro to iterate over the
>>> direct child nodes of the device.
>>>
>>> Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
>>> ---
>>>    drivers/hwtracing/coresight/coresight-cti-platform.c | 10 +++-------
>>>    1 file changed, 3 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/hwtracing/coresight/coresight-cti-platform.c b/
>>> drivers/hwtracing/coresight/coresight-cti-platform.c
>>> index ccef04f27f12..d0ae10bf6128 100644
>>> --- a/drivers/hwtracing/coresight/coresight-cti-platform.c
>>> +++ b/drivers/hwtracing/coresight/coresight-cti-platform.c
>>> @@ -416,20 +416,16 @@ static int
>>> cti_plat_create_impdef_connections(struct device *dev,
>>>                              struct cti_drvdata *drvdata)
>>>    {
>>>        int rc = 0;
>>> -    struct fwnode_handle *fwnode = dev_fwnode(dev);
>>> -    struct fwnode_handle *child = NULL;
>>>    -    if (IS_ERR_OR_NULL(fwnode))
>>> +    if (IS_ERR_OR_NULL(dev_fwnode(dev)))
>>>            return -EINVAL;
>>>    -    fwnode_for_each_child_node(fwnode, child) {
>>> +    device_for_each_child_node_scoped(dev, child) {
>>>            if (cti_plat_node_name_eq(child, CTI_DT_CONNS))
>>> -            rc = cti_plat_create_connection(dev, drvdata,
>>> -                            child);
>>> +            rc = cti_plat_create_connection(dev, drvdata, child);
>>>            if (rc != 0)
>>>                break;
>>
>> Don't we need to fwnode_handle_put(child) here, since we removed the
>> outer one ?
>>
>> Suzuki
>>
> 
> Hi Suzuki,
> 
> No, we don't need fwnode_handle_put(child) anymore because the scoped
> variant of the macro is used.

Ah, apologies, was looking at the non-scoped version. I will queue this.

Suzuki
> 
> Best regards,
> Javier Carrasco
diff mbox series

Patch

diff --git a/drivers/hwtracing/coresight/coresight-cti-platform.c b/drivers/hwtracing/coresight/coresight-cti-platform.c
index ccef04f27f12..d0ae10bf6128 100644
--- a/drivers/hwtracing/coresight/coresight-cti-platform.c
+++ b/drivers/hwtracing/coresight/coresight-cti-platform.c
@@ -416,20 +416,16 @@  static int cti_plat_create_impdef_connections(struct device *dev,
 					      struct cti_drvdata *drvdata)
 {
 	int rc = 0;
-	struct fwnode_handle *fwnode = dev_fwnode(dev);
-	struct fwnode_handle *child = NULL;
 
-	if (IS_ERR_OR_NULL(fwnode))
+	if (IS_ERR_OR_NULL(dev_fwnode(dev)))
 		return -EINVAL;
 
-	fwnode_for_each_child_node(fwnode, child) {
+	device_for_each_child_node_scoped(dev, child) {
 		if (cti_plat_node_name_eq(child, CTI_DT_CONNS))
-			rc = cti_plat_create_connection(dev, drvdata,
-							child);
+			rc = cti_plat_create_connection(dev, drvdata, child);
 		if (rc != 0)
 			break;
 	}
-	fwnode_handle_put(child);
 
 	return rc;
 }