* [PATCH] RISC-V: selftests: cbo: Use exported __cpu_to_le32() with uapi header
@ 2024-03-21 11:52 woodrow.shen
2024-03-21 12:14 ` Woodrow Shen
0 siblings, 1 reply; 3+ messages in thread
From: woodrow.shen @ 2024-03-21 11:52 UTC (permalink / raw)
To: linux-riscv
From: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
cpu_to_le32 is not defined in uapi headers, and it could cause an error
of impossible constraint in 'asm' during compilation. However,
the reason is due to undefined reference to cpu_to_le32.
__cpu_to_le32() defined from byteorder.h should be used instead.
Signed-off-by: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
---
tools/testing/selftests/riscv/hwprobe/cbo.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/riscv/hwprobe/cbo.c b/tools/testing/selftests/riscv/hwprobe/cbo.c
index c537d52fafc5..b2dd18b3e360 100644
--- a/tools/testing/selftests/riscv/hwprobe/cbo.c
+++ b/tools/testing/selftests/riscv/hwprobe/cbo.c
@@ -15,11 +15,12 @@
#include <linux/compiler.h>
#include <linux/kernel.h>
#include <asm/ucontext.h>
+#include <asm/byteorder.h>
#include "hwprobe.h"
#include "../../kselftest.h"
-#define MK_CBO(fn) cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
+#define MK_CBO(fn) __cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
static char mem[4096] __aligned(4096) = { [0 ... 4095] = 0xa5 };
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] RISC-V: selftests: cbo: Use exported __cpu_to_le32() with uapi header
2024-03-21 11:52 [PATCH] RISC-V: selftests: cbo: Use exported __cpu_to_le32() with uapi header woodrow.shen
@ 2024-03-21 12:14 ` Woodrow Shen
2024-03-22 8:40 ` Andrew Jones
0 siblings, 1 reply; 3+ messages in thread
From: Woodrow Shen @ 2024-03-21 12:14 UTC (permalink / raw)
To: linux-riscv; +Cc: Paul Walmsley, palmer, aou, ajones
Short background: while I'm building the riscv/hwprobe tests, it seems
I always hit the "error: impossible constraint in 'asm'" even though
the commit https://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git/commit/tools/testing/selftests/riscv/hwprobe/cbo.c?id=0de65288d75ff96c30e216557d979fb9342c4323
is applied. I'm not sure if this only happens to me as I tried to
build them on a clean debian chroot. To apply this patch makes the
build happy, but if there is no need to change, please ignore this
patch.
And sorry to forget cc more maintainers for reviewing.
Cheers,
Woodrow
On Thu, Mar 21, 2024 at 7:52 PM <woodrow.shen@sifive.com> wrote:
>
> From: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
>
> cpu_to_le32 is not defined in uapi headers, and it could cause an error
> of impossible constraint in 'asm' during compilation. However,
> the reason is due to undefined reference to cpu_to_le32.
> __cpu_to_le32() defined from byteorder.h should be used instead.
>
> Signed-off-by: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
> ---
> tools/testing/selftests/riscv/hwprobe/cbo.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/riscv/hwprobe/cbo.c b/tools/testing/selftests/riscv/hwprobe/cbo.c
> index c537d52fafc5..b2dd18b3e360 100644
> --- a/tools/testing/selftests/riscv/hwprobe/cbo.c
> +++ b/tools/testing/selftests/riscv/hwprobe/cbo.c
> @@ -15,11 +15,12 @@
> #include <linux/compiler.h>
> #include <linux/kernel.h>
> #include <asm/ucontext.h>
> +#include <asm/byteorder.h>
>
> #include "hwprobe.h"
> #include "../../kselftest.h"
>
> -#define MK_CBO(fn) cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
> +#define MK_CBO(fn) __cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
>
> static char mem[4096] __aligned(4096) = { [0 ... 4095] = 0xa5 };
>
> --
> 2.34.1
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] RISC-V: selftests: cbo: Use exported __cpu_to_le32() with uapi header
2024-03-21 12:14 ` Woodrow Shen
@ 2024-03-22 8:40 ` Andrew Jones
0 siblings, 0 replies; 3+ messages in thread
From: Andrew Jones @ 2024-03-22 8:40 UTC (permalink / raw)
To: Woodrow Shen; +Cc: linux-riscv, Paul Walmsley, palmer, aou
On Thu, Mar 21, 2024 at 08:14:34PM +0800, Woodrow Shen wrote:
> Short background: while I'm building the riscv/hwprobe tests, it seems
> I always hit the "error: impossible constraint in 'asm'" even though
> the commit https://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git/commit/tools/testing/selftests/riscv/hwprobe/cbo.c?id=0de65288d75ff96c30e216557d979fb9342c4323
> is applied. I'm not sure if this only happens to me as I tried to
> build them on a clean debian chroot. To apply this patch makes the
> build happy, but if there is no need to change, please ignore this
> patch.
It looks like I managed to mess up my fix to my mess up. Clearly I
shouldn't still have a potential function call in a macro which I want
to always resolve to a literal. Instead of using cpu_to_le32 I should
use something that results in ___constant_swab32, like your suggestion
of __cpu_to_le32. I'm not sure we want to depend on Linux UAPI that isn't
in the tools directory though, so maybe we should just reproduce it here.
Something like
#if __BYTE_ORDER == __BIG_ENDIAN
# define constant_swab32(_x) \
((((_x) & 0x000000ffU) << 24) | \
(((_x) & 0x0000ff00U) << 8) | \
(((_x) & 0x00ff0000U) >> 8) | \
(((_x) & 0xff000000U) >> 24))
#else
# constant_swab32(_x) (_x)
#endif
#define MK_CBO(fn) constant_swab32((uint32_t)(fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
Thanks,
drew
>
> And sorry to forget cc more maintainers for reviewing.
>
> Cheers,
> Woodrow
>
>
> On Thu, Mar 21, 2024 at 7:52 PM <woodrow.shen@sifive.com> wrote:
> >
> > From: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
> >
> > cpu_to_le32 is not defined in uapi headers, and it could cause an error
> > of impossible constraint in 'asm' during compilation. However,
> > the reason is due to undefined reference to cpu_to_le32.
> > __cpu_to_le32() defined from byteorder.h should be used instead.
> >
> > Signed-off-by: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
> > ---
> > tools/testing/selftests/riscv/hwprobe/cbo.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/testing/selftests/riscv/hwprobe/cbo.c b/tools/testing/selftests/riscv/hwprobe/cbo.c
> > index c537d52fafc5..b2dd18b3e360 100644
> > --- a/tools/testing/selftests/riscv/hwprobe/cbo.c
> > +++ b/tools/testing/selftests/riscv/hwprobe/cbo.c
> > @@ -15,11 +15,12 @@
> > #include <linux/compiler.h>
> > #include <linux/kernel.h>
> > #include <asm/ucontext.h>
> > +#include <asm/byteorder.h>
> >
> > #include "hwprobe.h"
> > #include "../../kselftest.h"
> >
> > -#define MK_CBO(fn) cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
> > +#define MK_CBO(fn) __cpu_to_le32((fn) << 20 | 10 << 15 | 2 << 12 | 0 << 7 | 15)
> >
> > static char mem[4096] __aligned(4096) = { [0 ... 4095] = 0xa5 };
> >
> > --
> > 2.34.1
> >
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-03-22 8:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-21 11:52 [PATCH] RISC-V: selftests: cbo: Use exported __cpu_to_le32() with uapi header woodrow.shen
2024-03-21 12:14 ` Woodrow Shen
2024-03-22 8:40 ` Andrew Jones
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox