mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
selftests: Add additional kernel functions to tools/include/
These are needed by the VFIO mlx5 selftest in the following patches, which includes some headers from mlx5 and also needs a few more MMIO-related features. - DECLARE_FLEX_ARRAY in new tools/include/linux/stddef.h (wraps existing __DECLARE_FLEX_ARRAY from uapi/linux/stddef.h) - dma_wmb/dma_rmb barriers: x86 uses compiler barrier (DMA-coherent), arm64 uses dmb oshst/oshld (outer-shareable for device visibility), generic fallback uses wmb/rmb - ioread32be/iowrite32be in tools/include/asm-generic/io.h for big-endian MMIO register access Assisted-by: Claude:claude-opus-4.6 Reviewed-by: David Matlack <dmatlack@google.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/5-v7-c6d30e8ce1e4+3dfa6-mlx5st_jgg@nvidia.com Signed-off-by: Alex Williamson <alex@shazbot.org>
This commit is contained in:
parent
5f8e94a75a
commit
be0237a5f3
|
|
@ -24,6 +24,10 @@
|
|||
#define smp_wmb() asm volatile("dmb ishst" ::: "memory")
|
||||
#define smp_rmb() asm volatile("dmb ishld" ::: "memory")
|
||||
|
||||
/* DMA barriers use outer-shareable (osh) for device visibility */
|
||||
#define dma_rmb() asm volatile("dmb oshld" ::: "memory")
|
||||
#define dma_wmb() asm volatile("dmb oshst" ::: "memory")
|
||||
|
||||
#define smp_store_release(p, v) \
|
||||
do { \
|
||||
union { typeof(*p) __val; char __c[1]; } __u = \
|
||||
|
|
|
|||
|
|
@ -43,4 +43,9 @@ do { \
|
|||
___p1; \
|
||||
})
|
||||
#endif /* defined(__x86_64__) */
|
||||
|
||||
/* x86 is DMA-coherent so DMA barriers are just compiler barriers */
|
||||
#define dma_rmb() barrier()
|
||||
#define dma_wmb() barrier()
|
||||
|
||||
#endif /* _TOOLS_LINUX_ASM_X86_BARRIER_H */
|
||||
|
|
|
|||
|
|
@ -479,4 +479,32 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer,
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ioread/iowrite for big-endian MMIO registers.
|
||||
*/
|
||||
|
||||
#ifndef ioread32be
|
||||
#define ioread32be ioread32be
|
||||
static inline u32 ioread32be(const volatile void __iomem *addr)
|
||||
{
|
||||
return bswap_32(readl(addr));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef iowrite32be
|
||||
#define iowrite32be iowrite32be
|
||||
static inline void iowrite32be(u32 value, volatile void __iomem *addr)
|
||||
{
|
||||
writel(bswap_32(value), addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef iowrite64be
|
||||
#define iowrite64be iowrite64be
|
||||
static inline void iowrite64be(u64 value, volatile void __iomem *addr)
|
||||
{
|
||||
writeq(bswap_64(value), addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _TOOLS_ASM_GENERIC_IO_H */
|
||||
|
|
|
|||
|
|
@ -47,6 +47,14 @@
|
|||
# define smp_mb() mb()
|
||||
#endif
|
||||
|
||||
#ifndef dma_rmb
|
||||
# define dma_rmb() rmb()
|
||||
#endif
|
||||
|
||||
#ifndef dma_wmb
|
||||
# define dma_wmb() wmb()
|
||||
#endif
|
||||
|
||||
#ifndef smp_store_release
|
||||
# define smp_store_release(p, v) \
|
||||
do { \
|
||||
|
|
|
|||
10
tools/include/linux/stddef.h
Normal file
10
tools/include/linux/stddef.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _TOOLS_LINUX_STDDEF_H
|
||||
#define _TOOLS_LINUX_STDDEF_H
|
||||
|
||||
#include_next <linux/stddef.h>
|
||||
|
||||
#define DECLARE_FLEX_ARRAY(TYPE, NAME) \
|
||||
__DECLARE_FLEX_ARRAY(TYPE, NAME)
|
||||
|
||||
#endif /* _TOOLS_LINUX_STDDEF_H */
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <linux/stringify.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/brk-imm.h>
|
||||
#include <asm/esr.h>
|
||||
#include <asm/sysreg.h>
|
||||
|
|
@ -191,11 +192,8 @@ static inline void cpu_relax(void)
|
|||
#define dsb(opt) asm volatile("dsb " #opt : : : "memory")
|
||||
#define dmb(opt) asm volatile("dmb " #opt : : : "memory")
|
||||
|
||||
#define dma_wmb() dmb(oshst)
|
||||
#define __iowmb() dma_wmb()
|
||||
|
||||
#define dma_rmb() dmb(oshld)
|
||||
|
||||
#define __iormb(v) \
|
||||
({ \
|
||||
unsigned long tmp; \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user