lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 16 Jan 2022 12:54:04 +0100 From: Laurent Vivier <laurent@...ier.eu> To: Arnd Bergmann <arnd@...db.de> Cc: Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, John Stultz <john.stultz@...aro.org>, linux-rtc@...r.kernel.org, Jiaxun Yang <jiaxun.yang@...goat.com>, Daniel Lezcano <daniel.lezcano@...aro.org>, Thomas Gleixner <tglx@...utronix.de>, Alessandro Zummo <a.zummo@...ertech.it>, Alexandre Belloni <alexandre.belloni@...tlin.com>, Stephen Boyd <sboyd@...nel.org>, Geert Uytterhoeven <geert@...ux-m68k.org>, linux-m68k <linux-m68k@...ts.linux-m68k.org> Subject: Re: [PATCH v8 3/4] clocksource/drivers: Add a goldfish-timer clocksource Le 16/01/2022 à 11:44, Arnd Bergmann a écrit : > On Sat, Jan 15, 2022 at 8:32 PM Laurent Vivier <laurent@...ier.eu> wrote: > >> + >> +/* goldfish endianness depends on CPU endianness */ >> +#ifdef CONFIG_CPU_BIG_ENDIAN >> +#define goldfish_ioread32 ioread32be >> +#define goldfish_iowrite32 iowrite32be >> +#else >> +#define goldfish_ioread32 ioread32 >> +#define goldfish_iowrite32 iowrite32 >> +#endif > > This is not what I meant here, as you are breaking big-endian support > for all other > architectures in the process. > > On architectures that support both big-endian and little-endian kernels, devices > (including emulated ones) can't know which type of kernel you are running, so > this has to be fixed by architecture. Ideally this macro should be in > an architecture > specific header file, but you can also just make this a check for m68k and hope > that qemu doesn't duplicate this bug on architectures that gain support for this > driver in the future. Virtio has exactly the same problem in the past (prio to v1.0), and it uses __LITTLE_ENDIAN in virtio_legacy_is_little_endian() to know the endianness of the device. So the code can become: #ifdef __LITTLE_ENDIAN #define goldfish_ioread32 ioread32 #define goldfish_iowrite32 iowrite32 #else #define goldfish_ioread32 ioread32be #define goldfish_iowrite32 iowrite32be #endif What do you prefer: CONFIG_M68K or __LITTLE_ENDIAN? Thanks, Laurent
Powered by blists - more mailing lists