* [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