All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-07-28  0:32 Guenter Roeck
  2015-07-29 17:51   ` [Devel] " Moore, Robert
  2015-08-02  7:16 ` Pavel Machek
  0 siblings, 2 replies; 14+ messages in thread
From: Guenter Roeck @ 2015-07-28  0:32 UTC (permalink / raw)
  To: rjw
  Cc: lenb, robert.moore, lv.zheng, linux-acpi, linux-kernel, devel,
	Guenter Roeck

simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().
Return an error if the value passed to the sysfs attribute is not
a number.

Drop the definition of strtoul() since it is no longer needed.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v2: An additional use of strtoul() was introduced with commit 4fa4616e.
    Replace it as well.

 drivers/acpi/acpica/evgpeinit.c | 5 +++--
 drivers/acpi/sysfs.c            | 8 ++++++--
 include/acpi/platform/aclinux.h | 1 -
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
index ea4c0d3fca2d..aa1e8c1f2d4a 100644
--- a/drivers/acpi/acpica/evgpeinit.c
+++ b/drivers/acpi/acpica/evgpeinit.c
@@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
 	u32 gpe_number;
 	char name[ACPI_NAME_SIZE + 1];
 	u8 type;
+	int err;
 
 	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
 
@@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
 
 	/* 4) The last two characters of the name are the hex GPE Number */
 
-	gpe_number = strtoul(&name[2], NULL, 16);
-	if (gpe_number == ACPI_UINT32_MAX) {
+	er = kstrtouint(&name[2], 16, &gpe_number);
+	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
 
 		/* Conversion failed; invalid method, just ignore it */
 
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 0876d77b3206..d6ea5712ec57 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -616,8 +616,12 @@ static ssize_t counter_set(struct kobject *kobj,
 			all_counters[index].count = tmp;
 		else
 			result = -EINVAL;
-	} else
-		all_counters[index].count = strtoul(buf, NULL, 0);
+	} else {
+		if (!kstrtoul(buf, 0, &tmp))
+			all_counters[index].count = tmp;
+		else
+			result = -EINVAL;
+	}
 
 	if (ACPI_FAILURE(result))
 		result = -EINVAL;
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
index 74ba46c8157a..9925c1d5d58f 100644
--- a/include/acpi/platform/aclinux.h
+++ b/include/acpi/platform/aclinux.h
@@ -119,7 +119,6 @@
 
 #define ACPI_MACHINE_WIDTH          BITS_PER_LONG
 #define ACPI_EXPORT_SYMBOL(symbol)  EXPORT_SYMBOL(symbol);
-#define strtoul                     simple_strtoul
 
 #define acpi_cache_t                        struct kmem_cache
 #define acpi_spinlock                       spinlock_t *
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* RE: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-07-29 17:51   ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-07-29 17:51 UTC (permalink / raw)
  To: Guenter Roeck, rjw; +Cc: lenb, Zheng, Lv, linux-acpi, linux-kernel, devel



> -----Original Message-----
> From: Guenter Roeck [mailto:linux@roeck-us.net]
> Sent: Monday, July 27, 2015 5:32 PM
> To: rjw@rjwysocki.net
> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv; linux-acpi@vger.kernel.org;
> linux-kernel@vger.kernel.org; devel@acpica.org; Guenter Roeck
> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().

The ACPICA code is os-independent and cannot use these functions (at least not directly).





> Return an error if the value passed to the sysfs attribute is not a
> number.
> 
> Drop the definition of strtoul() since it is no longer needed.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
>     Replace it as well.
> 
>  drivers/acpi/acpica/evgpeinit.c | 5 +++--
>  drivers/acpi/sysfs.c            | 8 ++++++--
>  include/acpi/platform/aclinux.h | 1 -
>  3 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/evgpeinit.c
> b/drivers/acpi/acpica/evgpeinit.c index ea4c0d3fca2d..aa1e8c1f2d4a 100644
> --- a/drivers/acpi/acpica/evgpeinit.c
> +++ b/drivers/acpi/acpica/evgpeinit.c
> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>  	u32 gpe_number;
>  	char name[ACPI_NAME_SIZE + 1];
>  	u8 type;
> +	int err;
> 
>  	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
> 
> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> 
>  	/* 4) The last two characters of the name are the hex GPE Number */
> 
> -	gpe_number = strtoul(&name[2], NULL, 16);
> -	if (gpe_number == ACPI_UINT32_MAX) {
> +	er = kstrtouint(&name[2], 16, &gpe_number);
> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
> 
>  		/* Conversion failed; invalid method, just ignore it */
> 
> diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index
> 0876d77b3206..d6ea5712ec57 100644
> --- a/drivers/acpi/sysfs.c
> +++ b/drivers/acpi/sysfs.c
> @@ -616,8 +616,12 @@ static ssize_t counter_set(struct kobject *kobj,
>  			all_counters[index].count = tmp;
>  		else
>  			result = -EINVAL;
> -	} else
> -		all_counters[index].count = strtoul(buf, NULL, 0);
> +	} else {
> +		if (!kstrtoul(buf, 0, &tmp))
> +			all_counters[index].count = tmp;
> +		else
> +			result = -EINVAL;
> +	}
> 
>  	if (ACPI_FAILURE(result))
>  		result = -EINVAL;
> diff --git a/include/acpi/platform/aclinux.h
> b/include/acpi/platform/aclinux.h index 74ba46c8157a..9925c1d5d58f 100644
> --- a/include/acpi/platform/aclinux.h
> +++ b/include/acpi/platform/aclinux.h
> @@ -119,7 +119,6 @@
> 
>  #define ACPI_MACHINE_WIDTH          BITS_PER_LONG
>  #define ACPI_EXPORT_SYMBOL(symbol)  EXPORT_SYMBOL(symbol);
> -#define strtoul                     simple_strtoul
> 
>  #define acpi_cache_t                        struct kmem_cache
>  #define acpi_spinlock                       spinlock_t *
> --
> 2.1.0

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Devel] [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-07-29 17:51   ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-07-29 17:51 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 3050 bytes --]



> -----Original Message-----
> From: Guenter Roeck [mailto:linux(a)roeck-us.net]
> Sent: Monday, July 27, 2015 5:32 PM
> To: rjw(a)rjwysocki.net
> Cc: lenb(a)kernel.org; Moore, Robert; Zheng, Lv; linux-acpi(a)vger.kernel.org;
> linux-kernel(a)vger.kernel.org; devel(a)acpica.org; Guenter Roeck
> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().

The ACPICA code is os-independent and cannot use these functions (at least not directly).





> Return an error if the value passed to the sysfs attribute is not a
> number.
> 
> Drop the definition of strtoul() since it is no longer needed.
> 
> Signed-off-by: Guenter Roeck <linux(a)roeck-us.net>
> ---
> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
>     Replace it as well.
> 
>  drivers/acpi/acpica/evgpeinit.c | 5 +++--
>  drivers/acpi/sysfs.c            | 8 ++++++--
>  include/acpi/platform/aclinux.h | 1 -
>  3 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/evgpeinit.c
> b/drivers/acpi/acpica/evgpeinit.c index ea4c0d3fca2d..aa1e8c1f2d4a 100644
> --- a/drivers/acpi/acpica/evgpeinit.c
> +++ b/drivers/acpi/acpica/evgpeinit.c
> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>  	u32 gpe_number;
>  	char name[ACPI_NAME_SIZE + 1];
>  	u8 type;
> +	int err;
> 
>  	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
> 
> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> 
>  	/* 4) The last two characters of the name are the hex GPE Number */
> 
> -	gpe_number = strtoul(&name[2], NULL, 16);
> -	if (gpe_number == ACPI_UINT32_MAX) {
> +	er = kstrtouint(&name[2], 16, &gpe_number);
> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
> 
>  		/* Conversion failed; invalid method, just ignore it */
> 
> diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index
> 0876d77b3206..d6ea5712ec57 100644
> --- a/drivers/acpi/sysfs.c
> +++ b/drivers/acpi/sysfs.c
> @@ -616,8 +616,12 @@ static ssize_t counter_set(struct kobject *kobj,
>  			all_counters[index].count = tmp;
>  		else
>  			result = -EINVAL;
> -	} else
> -		all_counters[index].count = strtoul(buf, NULL, 0);
> +	} else {
> +		if (!kstrtoul(buf, 0, &tmp))
> +			all_counters[index].count = tmp;
> +		else
> +			result = -EINVAL;
> +	}
> 
>  	if (ACPI_FAILURE(result))
>  		result = -EINVAL;
> diff --git a/include/acpi/platform/aclinux.h
> b/include/acpi/platform/aclinux.h index 74ba46c8157a..9925c1d5d58f 100644
> --- a/include/acpi/platform/aclinux.h
> +++ b/include/acpi/platform/aclinux.h
> @@ -119,7 +119,6 @@
> 
>  #define ACPI_MACHINE_WIDTH          BITS_PER_LONG
>  #define ACPI_EXPORT_SYMBOL(symbol)  EXPORT_SYMBOL(symbol);
> -#define strtoul                     simple_strtoul
> 
>  #define acpi_cache_t                        struct kmem_cache
>  #define acpi_spinlock                       spinlock_t *
> --
> 2.1.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-29 17:51   ` [Devel] " Moore, Robert
  (?)
@ 2015-07-29 18:38   ` Guenter Roeck
  2015-07-29 19:33       ` [Devel] " Moore, Robert
  2015-07-29 19:57     ` Rafael J. Wysocki
  -1 siblings, 2 replies; 14+ messages in thread
From: Guenter Roeck @ 2015-07-29 18:38 UTC (permalink / raw)
  To: Moore, Robert, rjw; +Cc: lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

On 07/29/2015 10:51 AM, Moore, Robert wrote:
>
>
>> -----Original Message-----
>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>> Sent: Monday, July 27, 2015 5:32 PM
>> To: rjw@rjwysocki.net
>> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv; linux-acpi@vger.kernel.org;
>> linux-kernel@vger.kernel.org; devel@acpica.org; Guenter Roeck
>> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
>> strtoul()/simple_strtoul()
>>
>> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().
>
> The ACPICA code is os-independent and cannot use these functions (at least not directly).
>
>
Odd argument, given that kstrtoul() is used already in the acpi code.

Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-07-29 19:33       ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-07-29 19:33 UTC (permalink / raw)
  To: Guenter Roeck, rjw; +Cc: lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

> -----Original Message-----
> From: Guenter Roeck [mailto:linux@roeck-us.net]
> Sent: Wednesday, July 29, 2015 11:39 AM
> To: Moore, Robert; rjw@rjwysocki.net
> Cc: lenb@kernel.org; Zheng, Lv; linux-acpi@vger.kernel.org; linux-
> kernel@vger.kernel.org; devel@acpica.org
> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> On 07/29/2015 10:51 AM, Moore, Robert wrote:
> >
> >
> >> -----Original Message-----
> >> From: Guenter Roeck [mailto:linux@roeck-us.net]
> >> Sent: Monday, July 27, 2015 5:32 PM
> >> To: rjw@rjwysocki.net
> >> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv;
> >> linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org;
> >> devel@acpica.org; Guenter Roeck
> >> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
> >> strtoul()/simple_strtoul()
> >>
> >> simple_strtoul() is deprecated; replace with kstrtoul() and
> kstrtouint().
> >
> > The ACPICA code is os-independent and cannot use these functions (at
> least not directly).
> >
> >
> Odd argument, given that kstrtoul() is used already in the acpi code.

They are not in the os-independent ACPICA code. The ACPI-related drivers are another story, since they are OS-dendent.




> 
> Guenter

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Devel] [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-07-29 19:33       ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-07-29 19:33 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 1278 bytes --]

> -----Original Message-----
> From: Guenter Roeck [mailto:linux(a)roeck-us.net]
> Sent: Wednesday, July 29, 2015 11:39 AM
> To: Moore, Robert; rjw(a)rjwysocki.net
> Cc: lenb(a)kernel.org; Zheng, Lv; linux-acpi(a)vger.kernel.org; linux-
> kernel(a)vger.kernel.org; devel(a)acpica.org
> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> On 07/29/2015 10:51 AM, Moore, Robert wrote:
> >
> >
> >> -----Original Message-----
> >> From: Guenter Roeck [mailto:linux(a)roeck-us.net]
> >> Sent: Monday, July 27, 2015 5:32 PM
> >> To: rjw(a)rjwysocki.net
> >> Cc: lenb(a)kernel.org; Moore, Robert; Zheng, Lv;
> >> linux-acpi(a)vger.kernel.org; linux-kernel(a)vger.kernel.org;
> >> devel(a)acpica.org; Guenter Roeck
> >> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
> >> strtoul()/simple_strtoul()
> >>
> >> simple_strtoul() is deprecated; replace with kstrtoul() and
> kstrtouint().
> >
> > The ACPICA code is os-independent and cannot use these functions (at
> least not directly).
> >
> >
> Odd argument, given that kstrtoul() is used already in the acpi code.

They are not in the os-independent ACPICA code. The ACPI-related drivers are another story, since they are OS-dendent.




> 
> Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-29 18:38   ` Guenter Roeck
  2015-07-29 19:33       ` [Devel] " Moore, Robert
@ 2015-07-29 19:57     ` Rafael J. Wysocki
  1 sibling, 0 replies; 14+ messages in thread
From: Rafael J. Wysocki @ 2015-07-29 19:57 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Moore, Robert, rjw, lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

Hi Guenter,

On Wed, Jul 29, 2015 at 8:38 PM, Guenter Roeck <linux@roeck-us.net> wrote:
> On 07/29/2015 10:51 AM, Moore, Robert wrote:
>>
>>
>>
>>> -----Original Message-----
>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>> Sent: Monday, July 27, 2015 5:32 PM
>>> To: rjw@rjwysocki.net
>>> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv;
>>> linux-acpi@vger.kernel.org;
>>> linux-kernel@vger.kernel.org; devel@acpica.org; Guenter Roeck
>>> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
>>> strtoul()/simple_strtoul()
>>>
>>> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().
>>
>>
>> The ACPICA code is os-independent and cannot use these functions (at least
>> not directly).
>>
>>
> Odd argument, given that kstrtoul() is used already in the acpi code.

Boib is right, the change in sysfs.c is OK, but the one in evgpeinit.c
isn't (this code is automatically generated from the upstream ACPICA
source and manual updates of it are painful).

You might provide a strtoul() wrapper around kstrtoul() instead of its
definition in acpi/platform/aclinux.h, though.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-29 19:33       ` [Devel] " Moore, Robert
  (?)
@ 2015-07-29 19:58       ` Guenter Roeck
  2015-07-29 20:04         ` Rafael J. Wysocki
  -1 siblings, 1 reply; 14+ messages in thread
From: Guenter Roeck @ 2015-07-29 19:58 UTC (permalink / raw)
  To: Moore, Robert, rjw; +Cc: lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

On 07/29/2015 12:33 PM, Moore, Robert wrote:
>> -----Original Message-----
>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>> Sent: Wednesday, July 29, 2015 11:39 AM
>> To: Moore, Robert; rjw@rjwysocki.net
>> Cc: lenb@kernel.org; Zheng, Lv; linux-acpi@vger.kernel.org; linux-
>> kernel@vger.kernel.org; devel@acpica.org
>> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
>> strtoul()/simple_strtoul()
>>
>> On 07/29/2015 10:51 AM, Moore, Robert wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>>> Sent: Monday, July 27, 2015 5:32 PM
>>>> To: rjw@rjwysocki.net
>>>> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv;
>>>> linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>> devel@acpica.org; Guenter Roeck
>>>> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
>>>> strtoul()/simple_strtoul()
>>>>
>>>> simple_strtoul() is deprecated; replace with kstrtoul() and
>> kstrtouint().
>>>
>>> The ACPICA code is os-independent and cannot use these functions (at
>> least not directly).
>>>
>>>
>> Odd argument, given that kstrtoul() is used already in the acpi code.
>
> They are not in the os-independent ACPICA code. The ACPI-related drivers are another story, since they are OS-dendent.
>

That this OS independent code mandates functions such as strtoul(),
which may not exist in a target OS, and that it maps strtoul() to
simple_strtoul() in a global include file, doesn't seem to be
correct either and is asking for repeated trouble. I would have
hoped that at the very least such mappings would be implemented
in local include files.

On the other side, my patch to remove the second global definition
of strtoul has been accepted, so the problem I was trying to solve
has been addressed elsewhere. With that, my patch is no longer needed
at this time, at least until someone else redefines strtoul().

Thanks,
Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-29 19:58       ` Guenter Roeck
@ 2015-07-29 20:04         ` Rafael J. Wysocki
  2015-07-29 20:37           ` Guenter Roeck
  0 siblings, 1 reply; 14+ messages in thread
From: Rafael J. Wysocki @ 2015-07-29 20:04 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Moore, Robert, rjw, lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

Hi Guenter,

On Wed, Jul 29, 2015 at 9:58 PM, Guenter Roeck <linux@roeck-us.net> wrote:
> On 07/29/2015 12:33 PM, Moore, Robert wrote:
>>>
>>> -----Original Message-----
>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>> Sent: Wednesday, July 29, 2015 11:39 AM
>>> To: Moore, Robert; rjw@rjwysocki.net
>>> Cc: lenb@kernel.org; Zheng, Lv; linux-acpi@vger.kernel.org; linux-
>>> kernel@vger.kernel.org; devel@acpica.org
>>> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
>>> strtoul()/simple_strtoul()
>>>
>>> On 07/29/2015 10:51 AM, Moore, Robert wrote:
>>>>
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>>>> Sent: Monday, July 27, 2015 5:32 PM
>>>>> To: rjw@rjwysocki.net
>>>>> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv;
>>>>> linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>>> devel@acpica.org; Guenter Roeck
>>>>> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
>>>>> strtoul()/simple_strtoul()
>>>>>
>>>>> simple_strtoul() is deprecated; replace with kstrtoul() and
>>>
>>> kstrtouint().
>>>>
>>>>
>>>> The ACPICA code is os-independent and cannot use these functions (at
>>>
>>> least not directly).
>>>>
>>>>
>>>>
>>> Odd argument, given that kstrtoul() is used already in the acpi code.
>>
>>
>> They are not in the os-independent ACPICA code. The ACPI-related drivers
>> are another story, since they are OS-dendent.
>>
>
> That this OS independent code mandates functions such as strtoul(),
> which may not exist in a target OS, and that it maps strtoul() to
> simple_strtoul() in a global include file, doesn't seem to be
> correct either and is asking for repeated trouble. I would have
> hoped that at the very least such mappings would be implemented
> in local include files.

The header is obviously OS-dependent and it does what it does just
because simple_strtoul() is available and serves the purpose.

As I said in the previous message, the strtoul() used by ACPICA might
be redefined in terms of kstroul().

And the change in sysfs.c is still OK.  Do you want me to apply this
change only?

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-29 20:04         ` Rafael J. Wysocki
@ 2015-07-29 20:37           ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2015-07-29 20:37 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Moore, Robert, rjw, lenb, Zheng, Lv, linux-acpi, linux-kernel, devel

On 07/29/2015 01:04 PM, Rafael J. Wysocki wrote:
> Hi Guenter,
>
> On Wed, Jul 29, 2015 at 9:58 PM, Guenter Roeck <linux@roeck-us.net> wrote:
>> On 07/29/2015 12:33 PM, Moore, Robert wrote:
>>>>
>>>> -----Original Message-----
>>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>>> Sent: Wednesday, July 29, 2015 11:39 AM
>>>> To: Moore, Robert; rjw@rjwysocki.net
>>>> Cc: lenb@kernel.org; Zheng, Lv; linux-acpi@vger.kernel.org; linux-
>>>> kernel@vger.kernel.org; devel@acpica.org
>>>> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
>>>> strtoul()/simple_strtoul()
>>>>
>>>> On 07/29/2015 10:51 AM, Moore, Robert wrote:
>>>>>
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Guenter Roeck [mailto:linux@roeck-us.net]
>>>>>> Sent: Monday, July 27, 2015 5:32 PM
>>>>>> To: rjw@rjwysocki.net
>>>>>> Cc: lenb@kernel.org; Moore, Robert; Zheng, Lv;
>>>>>> linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>>>> devel@acpica.org; Guenter Roeck
>>>>>> Subject: [PATCH v2] acpi: Use kstrtoul() instead of
>>>>>> strtoul()/simple_strtoul()
>>>>>>
>>>>>> simple_strtoul() is deprecated; replace with kstrtoul() and
>>>>
>>>> kstrtouint().
>>>>>
>>>>>
>>>>> The ACPICA code is os-independent and cannot use these functions (at
>>>>
>>>> least not directly).
>>>>>
>>>>>
>>>>>
>>>> Odd argument, given that kstrtoul() is used already in the acpi code.
>>>
>>>
>>> They are not in the os-independent ACPICA code. The ACPI-related drivers
>>> are another story, since they are OS-dendent.
>>>
>>
>> That this OS independent code mandates functions such as strtoul(),
>> which may not exist in a target OS, and that it maps strtoul() to
>> simple_strtoul() in a global include file, doesn't seem to be
>> correct either and is asking for repeated trouble. I would have
>> hoped that at the very least such mappings would be implemented
>> in local include files.
>
> The header is obviously OS-dependent and it does what it does just
> because simple_strtoul() is available and serves the purpose.
>
> As I said in the previous message, the strtoul() used by ACPICA might
> be redefined in terms of kstroul().
>
> And the change in sysfs.c is still OK.  Do you want me to apply this
> change only?
>

Let's step back a bit. The problem I was trying to solve was that
there were two definitions of strtoul(), which caused compile errors
for some builds.

libcfs_string.h 105 #define strtoul(str, endp, base) simple_strtoul(str, endp, base)
aclinux.h       122 #define strtoul simple_strtoul

The first was in lustre code. My patch to remove that definition
has been accepted, so now there is only one such definition left.

Fixing the sysfs code only might make some sense - I'll leave that
up to you - but it doesn't address the problem I was trying to solve,
which is that strtoul() is defined in a global but driver specific include
file (include/linux/...). That definition would still be there and may
cause trouble again if someone else defines strtoul elsewhere for similar
reasons.

A fix might be to move the definition of strtoul from aclinux.h to
some include file in drivers/acpi, but I don't know the code well
enough to know if that is even feasible, or which file to move it to.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-07-28  0:32 [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul() Guenter Roeck
  2015-07-29 17:51   ` [Devel] " Moore, Robert
@ 2015-08-02  7:16 ` Pavel Machek
  2015-08-02  8:19   ` Guenter Roeck
  1 sibling, 1 reply; 14+ messages in thread
From: Pavel Machek @ 2015-08-02  7:16 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: rjw, lenb, robert.moore, lv.zheng, linux-acpi, linux-kernel, devel

On Mon 2015-07-27 17:32:22, Guenter Roeck wrote:
> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().
> Return an error if the value passed to the sysfs attribute is not
> a number.
> 
> Drop the definition of strtoul() since it is no longer needed.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
>     Replace it as well.
> 
>  drivers/acpi/acpica/evgpeinit.c | 5 +++--
>  drivers/acpi/sysfs.c            | 8 ++++++--
>  include/acpi/platform/aclinux.h | 1 -
>  3 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
> index ea4c0d3fca2d..aa1e8c1f2d4a 100644
> --- a/drivers/acpi/acpica/evgpeinit.c
> +++ b/drivers/acpi/acpica/evgpeinit.c
> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>  	u32 gpe_number;
>  	char name[ACPI_NAME_SIZE + 1];
>  	u8 type;
> +	int err;
>  
>  	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
>  
> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>  
>  	/* 4) The last two characters of the name are the hex GPE Number */
>  
> -	gpe_number = strtoul(&name[2], NULL, 16);
> -	if (gpe_number == ACPI_UINT32_MAX) {
> +	er = kstrtouint(&name[2], 16, &gpe_number);
> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {

Are you sure you compile-tested this?


>  		/* Conversion failed; invalid method, just ignore it */
>  
> diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
> index 0876d77b3206..d6ea5712ec57 100644
> --- a/drivers/acpi/sysfs.c
> +++ b/drivers/acpi/sysfs.c
> @@ -616,8 +616,12 @@ static ssize_t counter_set(struct kobject *kobj,
>  			all_counters[index].count = tmp;
>  		else
>  			result = -EINVAL;
> -	} else
> -		all_counters[index].count = strtoul(buf, NULL, 0);
> +	} else {
> +		if (!kstrtoul(buf, 0, &tmp))
> +			all_counters[index].count = tmp;
> +		else
> +			result = -EINVAL;
> +	}
>  
>  	if (ACPI_FAILURE(result))
>  		result = -EINVAL;
> diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
> index 74ba46c8157a..9925c1d5d58f 100644
> --- a/include/acpi/platform/aclinux.h
> +++ b/include/acpi/platform/aclinux.h
> @@ -119,7 +119,6 @@
>  
>  #define ACPI_MACHINE_WIDTH          BITS_PER_LONG
>  #define ACPI_EXPORT_SYMBOL(symbol)  EXPORT_SYMBOL(symbol);
> -#define strtoul                     simple_strtoul
>  
>  #define acpi_cache_t                        struct kmem_cache
>  #define acpi_spinlock                       spinlock_t *

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
  2015-08-02  7:16 ` Pavel Machek
@ 2015-08-02  8:19   ` Guenter Roeck
  2015-11-06 16:21       ` [Devel] " Moore, Robert
  0 siblings, 1 reply; 14+ messages in thread
From: Guenter Roeck @ 2015-08-02  8:19 UTC (permalink / raw)
  To: Pavel Machek
  Cc: rjw, lenb, robert.moore, lv.zheng, linux-acpi, linux-kernel, devel

On 08/02/2015 12:16 AM, Pavel Machek wrote:
> On Mon 2015-07-27 17:32:22, Guenter Roeck wrote:
>> simple_strtoul() is deprecated; replace with kstrtoul() and kstrtouint().
>> Return an error if the value passed to the sysfs attribute is not
>> a number.
>>
>> Drop the definition of strtoul() since it is no longer needed.
>>
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
>>      Replace it as well.
>>
>>   drivers/acpi/acpica/evgpeinit.c | 5 +++--
>>   drivers/acpi/sysfs.c            | 8 ++++++--
>>   include/acpi/platform/aclinux.h | 1 -
>>   3 files changed, 9 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
>> index ea4c0d3fca2d..aa1e8c1f2d4a 100644
>> --- a/drivers/acpi/acpica/evgpeinit.c
>> +++ b/drivers/acpi/acpica/evgpeinit.c
>> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>>   	u32 gpe_number;
>>   	char name[ACPI_NAME_SIZE + 1];
>>   	u8 type;
>> +	int err;
>>
>>   	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
>>
>> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
>>
>>   	/* 4) The last two characters of the name are the hex GPE Number */
>>
>> -	gpe_number = strtoul(&name[2], NULL, 16);
>> -	if (gpe_number == ACPI_UINT32_MAX) {
>> +	er = kstrtouint(&name[2], 16, &gpe_number);
>> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
>
> Are you sure you compile-tested this?
>

I was, but maybe not ;-). Since the patch was rejected it does not really matter.

Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-11-06 16:21       ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-11-06 16:21 UTC (permalink / raw)
  To: Guenter Roeck, Pavel Machek
  Cc: rjw, lenb, Zheng, Lv, linux-acpi, linux-kernel, devel, Wysocki, Rafael J


> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()

So, this would fix the issue(s) (in aclinux.h):

#define strtoul                     kstrtoul



strtoul is used frequently in with the ACPICA in-kernel AML Debugger:

dbcmds.c(188):        Address = strtoul (InString, NULL, 16);
dbcmds.c(266):    SleepState = (UINT8) strtoul (ObjectArg, NULL, 0);
dbcmds.c(1283):    GpeNumber = strtoul (GpeArg, NULL, 0);
dbcmds.c(1291):        BlockNumber = strtoul (BlockArg, NULL, 0);
dbdisply.c(213):    Address = strtoul (Target, NULL, 16);
dbdisply.c(749):    Handle = ACPI_TO_POINTER (strtoul (ObjectArg, NULL, 16));
dbexec.c(769):    NumThreads = strtoul (NumThreadsArg, NULL, 0);
dbexec.c(770):    NumLoops = strtoul (NumLoopsArg, NULL, 0);
dbhistry.c(292):        CmdNum = strtoul (CommandNumArg, NULL, 0);
dbinput.c(1018):                strtoul (AcpiGbl_DbArgs[1], NULL, 16);
dbinput.c(1026):            AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16);
dbinput.c(1060):        Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0);
dbmethod.c(162):    Address = strtoul (Location, NULL, 16);
dbmethod.c(249):    Value = strtoul (ValueArg, NULL, 16);
dbmethod.c(271):    Index = strtoul (IndexArg, NULL, 16);
dbmethod.c(381):        NumStatements = strtoul (Statements, NULL, 0);
dbnames.c(334):            MaxDepth = strtoul (DepthArg, NULL, 0);
dbnames.c(405):    OwnerId = (ACPI_OWNER_ID) strtoul (OwnerArg, NULL, 0);
dbnames.c(411):        MaxDepth = strtoul (DepthArg, NULL, 0);
dbnames.c(990):    Address = strtoul (ObjectArg, NULL, 16);
dbtest.c(1046):        Info.MaxCount = strtoul (CountArg, NULL, 0);






> -----Original Message-----
> From: Guenter Roeck [mailto:linux@roeck-us.net]
> Sent: Sunday, August 02, 2015 1:19 AM
> To: Pavel Machek
> Cc: rjw@rjwysocki.net; lenb@kernel.org; Moore, Robert; Zheng, Lv; linux-
> acpi@vger.kernel.org; linux-kernel@vger.kernel.org; devel@acpica.org
> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> On 08/02/2015 12:16 AM, Pavel Machek wrote:
> > On Mon 2015-07-27 17:32:22, Guenter Roeck wrote:
> >> simple_strtoul() is deprecated; replace with kstrtoul() and
> kstrtouint().
> >> Return an error if the value passed to the sysfs attribute is not a
> >> number.
> >>
> >> Drop the definition of strtoul() since it is no longer needed.
> >>
> >> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> >> ---
> >> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
> >>      Replace it as well.
> >>
> >>   drivers/acpi/acpica/evgpeinit.c | 5 +++--
> >>   drivers/acpi/sysfs.c            | 8 ++++++--
> >>   include/acpi/platform/aclinux.h | 1 -
> >>   3 files changed, 9 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/acpi/acpica/evgpeinit.c
> >> b/drivers/acpi/acpica/evgpeinit.c index ea4c0d3fca2d..aa1e8c1f2d4a
> >> 100644
> >> --- a/drivers/acpi/acpica/evgpeinit.c
> >> +++ b/drivers/acpi/acpica/evgpeinit.c
> >> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> >>   	u32 gpe_number;
> >>   	char name[ACPI_NAME_SIZE + 1];
> >>   	u8 type;
> >> +	int err;
> >>
> >>   	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
> >>
> >> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> >>
> >>   	/* 4) The last two characters of the name are the hex GPE Number
> >> */
> >>
> >> -	gpe_number = strtoul(&name[2], NULL, 16);
> >> -	if (gpe_number == ACPI_UINT32_MAX) {
> >> +	er = kstrtouint(&name[2], 16, &gpe_number);
> >> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
> >
> > Are you sure you compile-tested this?
> >
> 
> I was, but maybe not ;-). Since the patch was rejected it does not really
> matter.
> 
> Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [Devel] [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul()
@ 2015-11-06 16:21       ` Moore, Robert
  0 siblings, 0 replies; 14+ messages in thread
From: Moore, Robert @ 2015-11-06 16:21 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 3836 bytes --]


> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()

So, this would fix the issue(s) (in aclinux.h):

#define strtoul                     kstrtoul



strtoul is used frequently in with the ACPICA in-kernel AML Debugger:

dbcmds.c(188):        Address = strtoul (InString, NULL, 16);
dbcmds.c(266):    SleepState = (UINT8) strtoul (ObjectArg, NULL, 0);
dbcmds.c(1283):    GpeNumber = strtoul (GpeArg, NULL, 0);
dbcmds.c(1291):        BlockNumber = strtoul (BlockArg, NULL, 0);
dbdisply.c(213):    Address = strtoul (Target, NULL, 16);
dbdisply.c(749):    Handle = ACPI_TO_POINTER (strtoul (ObjectArg, NULL, 16));
dbexec.c(769):    NumThreads = strtoul (NumThreadsArg, NULL, 0);
dbexec.c(770):    NumLoops = strtoul (NumLoopsArg, NULL, 0);
dbhistry.c(292):        CmdNum = strtoul (CommandNumArg, NULL, 0);
dbinput.c(1018):                strtoul (AcpiGbl_DbArgs[1], NULL, 16);
dbinput.c(1026):            AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16);
dbinput.c(1060):        Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0);
dbmethod.c(162):    Address = strtoul (Location, NULL, 16);
dbmethod.c(249):    Value = strtoul (ValueArg, NULL, 16);
dbmethod.c(271):    Index = strtoul (IndexArg, NULL, 16);
dbmethod.c(381):        NumStatements = strtoul (Statements, NULL, 0);
dbnames.c(334):            MaxDepth = strtoul (DepthArg, NULL, 0);
dbnames.c(405):    OwnerId = (ACPI_OWNER_ID) strtoul (OwnerArg, NULL, 0);
dbnames.c(411):        MaxDepth = strtoul (DepthArg, NULL, 0);
dbnames.c(990):    Address = strtoul (ObjectArg, NULL, 16);
dbtest.c(1046):        Info.MaxCount = strtoul (CountArg, NULL, 0);






> -----Original Message-----
> From: Guenter Roeck [mailto:linux(a)roeck-us.net]
> Sent: Sunday, August 02, 2015 1:19 AM
> To: Pavel Machek
> Cc: rjw(a)rjwysocki.net; lenb(a)kernel.org; Moore, Robert; Zheng, Lv; linux-
> acpi(a)vger.kernel.org; linux-kernel(a)vger.kernel.org; devel(a)acpica.org
> Subject: Re: [PATCH v2] acpi: Use kstrtoul() instead of
> strtoul()/simple_strtoul()
> 
> On 08/02/2015 12:16 AM, Pavel Machek wrote:
> > On Mon 2015-07-27 17:32:22, Guenter Roeck wrote:
> >> simple_strtoul() is deprecated; replace with kstrtoul() and
> kstrtouint().
> >> Return an error if the value passed to the sysfs attribute is not a
> >> number.
> >>
> >> Drop the definition of strtoul() since it is no longer needed.
> >>
> >> Signed-off-by: Guenter Roeck <linux(a)roeck-us.net>
> >> ---
> >> v2: An additional use of strtoul() was introduced with commit 4fa4616e.
> >>      Replace it as well.
> >>
> >>   drivers/acpi/acpica/evgpeinit.c | 5 +++--
> >>   drivers/acpi/sysfs.c            | 8 ++++++--
> >>   include/acpi/platform/aclinux.h | 1 -
> >>   3 files changed, 9 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/acpi/acpica/evgpeinit.c
> >> b/drivers/acpi/acpica/evgpeinit.c index ea4c0d3fca2d..aa1e8c1f2d4a
> >> 100644
> >> --- a/drivers/acpi/acpica/evgpeinit.c
> >> +++ b/drivers/acpi/acpica/evgpeinit.c
> >> @@ -326,6 +326,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> >>   	u32 gpe_number;
> >>   	char name[ACPI_NAME_SIZE + 1];
> >>   	u8 type;
> >> +	int err;
> >>
> >>   	ACPI_FUNCTION_TRACE(ev_match_gpe_method);
> >>
> >> @@ -377,8 +378,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
> >>
> >>   	/* 4) The last two characters of the name are the hex GPE Number
> >> */
> >>
> >> -	gpe_number = strtoul(&name[2], NULL, 16);
> >> -	if (gpe_number == ACPI_UINT32_MAX) {
> >> +	er = kstrtouint(&name[2], 16, &gpe_number);
> >> +	if (err < 0 || gpe_number == ACPI_UINT32_MAX) {
> >
> > Are you sure you compile-tested this?
> >
> 
> I was, but maybe not ;-). Since the patch was rejected it does not really
> matter.
> 
> Guenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2015-11-06 16:22 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-28  0:32 [PATCH v2] acpi: Use kstrtoul() instead of strtoul()/simple_strtoul() Guenter Roeck
2015-07-29 17:51 ` Moore, Robert
2015-07-29 17:51   ` [Devel] " Moore, Robert
2015-07-29 18:38   ` Guenter Roeck
2015-07-29 19:33     ` Moore, Robert
2015-07-29 19:33       ` [Devel] " Moore, Robert
2015-07-29 19:58       ` Guenter Roeck
2015-07-29 20:04         ` Rafael J. Wysocki
2015-07-29 20:37           ` Guenter Roeck
2015-07-29 19:57     ` Rafael J. Wysocki
2015-08-02  7:16 ` Pavel Machek
2015-08-02  8:19   ` Guenter Roeck
2015-11-06 16:21     ` Moore, Robert
2015-11-06 16:21       ` [Devel] " Moore, Robert

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.