[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] Revert "xen: make include/xen/unaligned.h usable on all architectures"
commit a6a8fe0eb177ca27c9155177e7e60c13fc46e5f6 Author: Julien Grall <jgrall@xxxxxxxxxx> AuthorDate: Tue Dec 12 15:43:49 2023 +0000 Commit: Julien Grall <jgrall@xxxxxxxxxx> CommitDate: Tue Dec 12 15:43:49 2023 +0000 Revert "xen: make include/xen/unaligned.h usable on all architectures" This breaks gitlab CI: https://gitlab.com/xen-project/hardware/xen/-/jobs/5733143618 This reverts commit 6c4be4950391d77b78e824d41115def397dbc487. --- xen/include/xen/unaligned.h | 53 ++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/xen/include/xen/unaligned.h b/xen/include/xen/unaligned.h index 3eda0ece11..0a2b16d05d 100644 --- a/xen/include/xen/unaligned.h +++ b/xen/include/xen/unaligned.h @@ -1,4 +1,12 @@ -/* SPDX-License-Identifier: GPL-2.0 */ +/* + * This header can be used by architectures where unaligned accesses work + * without faulting, and at least reasonably efficiently. Other architectures + * will need to have a custom asm/unaligned.h. + */ +#ifndef __ASM_UNALIGNED_H__ +#error "xen/unaligned.h should not be included directly - include asm/unaligned.h instead" +#endif + #ifndef __XEN_UNALIGNED_H__ #define __XEN_UNALIGNED_H__ @@ -7,82 +15,67 @@ #include <asm/byteorder.h> #endif -/* - * This is the most generic implementation of unaligned accesses - * and should work almost anywhere. - */ - -#define get_unaligned_t(type, ptr) ({ \ - const struct { type x; } __packed *ptr_ = (typeof(ptr_))(ptr); \ - ptr_->x; \ -}) - -#define put_unaligned_t(type, val, ptr) do { \ - struct { type x; } __packed *ptr_ = (typeof(ptr_))(ptr); \ - ptr_->x = val; \ -} while (0) - -#define get_unaligned(ptr) get_unaligned_t(typeof(*(ptr)), ptr) -#define put_unaligned(val, ptr) put_unaligned_t(typeof(*(ptr)), val, ptr) +#define get_unaligned(p) (*(p)) +#define put_unaligned(val, p) (*(p) = (val)) static inline uint16_t get_unaligned_be16(const void *p) { - return be16_to_cpu(get_unaligned_t(__be16, p)); + return be16_to_cpup(p); } static inline void put_unaligned_be16(uint16_t val, void *p) { - put_unaligned_t(__be16, cpu_to_be16(val), p); + *(__force __be16*)p = cpu_to_be16(val); } static inline uint32_t get_unaligned_be32(const void *p) { - return be32_to_cpu(get_unaligned_t(__be32, p)); + return be32_to_cpup(p); } static inline void put_unaligned_be32(uint32_t val, void *p) { - put_unaligned_t(__be32, cpu_to_be32(val), p); + *(__force __be32*)p = cpu_to_be32(val); } static inline uint64_t get_unaligned_be64(const void *p) { - return be64_to_cpu(get_unaligned_t(__be64, p)); + return be64_to_cpup(p); } static inline void put_unaligned_be64(uint64_t val, void *p) { - put_unaligned_t(__be64, cpu_to_be64(val), p); + *(__force __be64*)p = cpu_to_be64(val); } static inline uint16_t get_unaligned_le16(const void *p) { - return le16_to_cpu(get_unaligned_t(__le16, p)); + return le16_to_cpup(p); } static inline void put_unaligned_le16(uint16_t val, void *p) { - put_unaligned_t(__le16, cpu_to_le16(val), p); + *(__force __le16*)p = cpu_to_le16(val); } static inline uint32_t get_unaligned_le32(const void *p) { - return le32_to_cpu(get_unaligned_t(__le32, p)); + return le32_to_cpup(p); } static inline void put_unaligned_le32(uint32_t val, void *p) { - put_unaligned_t(__le32, cpu_to_le32(val), p); + *(__force __le32*)p = cpu_to_le32(val); } static inline uint64_t get_unaligned_le64(const void *p) { - return le64_to_cpu(get_unaligned_t(__le64, p)); + return le64_to_cpup(p); } static inline void put_unaligned_le64(uint64_t val, void *p) { - put_unaligned_t(__le64, cpu_to_le64(val), p); + *(__force __le64*)p = cpu_to_le64(val); } #endif /* __XEN_UNALIGNED_H__ */ -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |