[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <w4j3kzezrd4xqc4q4vkpbbxqvqxitam5htkex6rj6dguj5kbw5@27gqnp6veuu4>
Date: Sat, 23 Aug 2025 06:56:30 -0500
From: Lucas De Marchi <lucas.demarchi@...el.com>
To: Carlos Llamas <cmllamas@...gle.com>
CC: Thomas Hellström <thomas.hellstrom@...ux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@...el.com>, David Airlie <airlied@...il.com>,
Simona Vetter <simona@...ll.ch>, Matt Atwood <matthew.s.atwood@...el.com>,
<kernel-team@...roid.com>, <linux-kernel@...r.kernel.org>, Tiffany Yang
<ynaffit@...gle.com>, "open list:INTEL DRM XE DRIVER (Lunar Lake and newer)"
<intel-xe@...ts.freedesktop.org>, "open list:DRM DRIVERS"
<dri-devel@...ts.freedesktop.org>
Subject: Re: [PATCH v2] drm/xe: switch to local __basename() helper
On Thu, Aug 21, 2025 at 10:00:53PM +0000, Carlos Llamas wrote:
>Commit b0a2ee5567ab ("drm/xe: prepare xe_gen_wa_oob to be multi-use")
>introduced a call to basename(). The GNU version of this function is not
>portable and fails to build with alternative libc implementations like
>musl or bionic. This causes the following build error:
>
> drivers/gpu/drm/xe/xe_gen_wa_oob.c:130:12: error: assignment to ‘const char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
> 130 | fn = basename(fn);
> | ^
>
>While a POSIX version of basename() could be used, it would require a
>separate header plus the behavior differs from GNU version in that it
>might modify its argument. Not great.
>
>Instead, implement a local __basename() helper based on strrchr() that
double underscore is reserved for libc in userspace
(https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html):
(...) all identifiers regardless of use that begin with either two
underscores or an underscore followed by a capital letter are reserved
names. This is so that the library and header files can define
functions, variables, and macros for internal purposes without risk of
conflict with names in user programs.
>provides the same functionality and avoids portability issues.
Unfortunately with that name it could created other portability issues.
Lucas De Marchi
>
>Fixes: b0a2ee5567ab ("drm/xe: prepare xe_gen_wa_oob to be multi-use")
>Suggested-by: Lucas De Marchi <lucas.demarchi@...el.com>
>Reviewed-by: Tiffany Yang <ynaffit@...gle.com>
>Signed-off-by: Carlos Llamas <cmllamas@...gle.com>
>---
>v2:
> - Wrap changes in a helper function per Luca's feedback.
> - Fix typo in commit log: s/avoid/avoids/ per Tiffany.
> - Update commit log.
> - Collect tags.
>
>v1:
>https://lore.kernel.org/all/20250820201612.2549797-1-cmllamas@google.com/
>
> drivers/gpu/drm/xe/xe_gen_wa_oob.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_gen_wa_oob.c b/drivers/gpu/drm/xe/xe_gen_wa_oob.c
>index 6581cb0f0e59..c18faccdeb90 100644
>--- a/drivers/gpu/drm/xe/xe_gen_wa_oob.c
>+++ b/drivers/gpu/drm/xe/xe_gen_wa_oob.c
>@@ -123,11 +123,19 @@ static int parse(FILE *input, FILE *csource, FILE *cheader, char *prefix)
> return 0;
> }
>
>+/* Avoid GNU vs POSIX basename() discrepancy, just use our own */
>+static const char *__basename(const char *s)
>+{
>+ const char *p = strrchr(s, '/');
>+
>+ return p ? p + 1 : s;
>+}
>+
> static int fn_to_prefix(const char *fn, char *prefix, size_t size)
> {
> size_t len;
>
>- fn = basename(fn);
>+ fn = __basename(fn);
> len = strlen(fn);
>
> if (len > size - 1)
>--
>2.51.0.rc2.233.g662b1ed5c5-goog
>
Powered by blists - more mailing lists