/* * Copyright (C) 2016 Red Hat, Inc. * Author: Michael S. Tsirkin * This work is licensed under the terms of the GNU GPL, version 2. * * Common macros and functions for ring benchmarking. */ #ifndef MAIN_H #define MAIN_H #include extern bool do_exit; #if defined(__x86_64__) || defined(__i386__) #include "x86intrin.h" static inline void wait_cycles(unsigned long long cycles) { unsigned long long t; t = __rdtsc(); while (__rdtsc() - t < cycles) {} } #define VMEXIT_CYCLES 500 #define VMENTRY_CYCLES 500 #elif defined(__s390x__) static inline void wait_cycles(unsigned long long cycles) { asm volatile("0: brctg %0,0b" : : "d" (cycles)); } /* tweak me */ #define VMEXIT_CYCLES 200 #define VMENTRY_CYCLES 200 #else static inline void wait_cycles(unsigned long long cycles) { _Exit(5); } #define VMEXIT_CYCLES 0 #define VMENTRY_CYCLES 0 #endif static inline void vmexit(void) { if (!do_exit) return; wait_cycles(VMEXIT_CYCLES); } static inline void vmentry(void) { if (!do_exit) return; wait_cycles(VMENTRY_CYCLES); } /* implemented by ring */ void alloc_ring(void); /* guest side */ int add_inbuf(unsigned, void *, void *); void *get_buf(unsigned *, void **); void disable_call(); bool used_empty(); bool enable_call(); void kick_available(); /* host side */ void disable_kick(); bool avail_empty(); bool enable_kick(); bool use_buf(unsigned *, void **); void call_used(); /* implemented by main */ extern bool do_sleep; void kick(void); void wait_for_kick(void); void call(void); void wait_for_call(void); extern unsigned ring_size; /* Compiler barrier - similar to what Linux uses */ #define barrier() asm volatile("" ::: "memory") /* Is there a portable way to do this? */ #if defined(__x86_64__) || defined(__i386__) #define cpu_relax() asm ("rep; nop" ::: "memory") #elif defined(__s390x__) #define cpu_relax() barrier() #else #define cpu_relax() assert(0) #endif extern bool do_relax; static inline void busy_wait(void) { if (do_relax) cpu_relax(); else /* prevent compiler from removing busy loops */ barrier(); } /* * Not using __ATOMIC_SEQ_CST since gcc docs say they are only synchronized * with other __ATOMIC_SEQ_CST calls. */ #define smp_mb() __sync_synchronize() /* * This abuses the atomic builtins for thread fences, and * adds a compiler barrier. */ #define smp_release() do { \ barrier(); \ __atomic_thread_fence(__ATOMIC_RELEASE); \ } while (0) #define smp_acquire() do { \ __atomic_thread_fence(__ATOMIC_ACQUIRE); \ barrier(); \ } while (0) #endif xt.git/log/?id=643aa9cba0b688ffde28ac39aebec6f56fc2a8af'>root/tools/arch
e0c417f7ccf&id2=370ebb0ef6255132373ed35d13e7b1d8d2eb7003'>arch/sparc/include/asm/atomic_64.h
diff options
AgeCommit message (Expand)AuthorFilesLines
context:
space:
mode:
Diffstat (limited to 'arch/sparc/include/asm/atomic_64.h')
11ba69b1b69099c3c7bd6be3087b0ba'>arch/mips/bcm47xx/bcm47xx_private.h
parente34bac726d27056081d0250c0e173e4b155aa340 (diff)
parent868c97a846a73e937d835b09b8c885a69df50ec8 (diff)
Merge tag 'docs-4.10' of git://git.lwn.net/linuxHEADmaster
Pull documentation update from Jonathan Corbet: "These are the documentation changes for 4.10. It's another busy cycle for the docs tree, as the sphinx conversion continues. Highlights include: - Further work on PDF output, which remains a bit of a pain but should be more solid now. - Five more DocBook template files converted to Sphinx. Only 27 to go... Lots of plain-text files have also been converted and integrated. - Images in binary formats have been replaced with more source-friendly versions. - Various bits of organizational work, including the renaming of various files discussed at the kernel summit. - New documentation for the device_link mechanism. ... and, of course, lots of typo fixes and small updates" * tag 'docs-4.10' of git://git.lwn.net/linux: (193 commits) dma-buf: Extract dma-buf.rst Update Documentation/00-INDEX docs: 00-INDEX: document directories/files with no docs docs: 00-INDEX: remove non-existing entries docs: 00-INDEX: add missing entries for documentation files/dirs docs: 00-INDEX: consolidate process/ and admin-guide/ description scripts: add a script to check if Documentation/00-INDEX is sane Docs: change sh -> awk in REPORTING-BUGS Documentation/core-api/device_link: Add initial documentation core-api: remove an unexpected unident ppc/idle: Add documentation for powersave=off Doc: Correct typo, "Introdution" => "Introduction" Documentation/atomic_ops.txt: convert to ReST markup Documentation/local_ops.txt: convert to ReST markup Documentation/assoc_array.txt: convert to ReST markup docs-rst: parse-headers.pl: cleanup the documentation docs-rst: fix media cleandocs target docs-rst: media/Makefile: reorganize the rules docs-rst: media: build SVG from graphviz files docs-rst: replace bayer.png by a SVG image ...
Diffstat (limited to 'arch/mips/bcm47xx/bcm47xx_private.h')