#ifndef __TOOLS_LINUX_SPARC64_BARRIER_H #define __TOOLS_LINUX_SPARC64_BARRIER_H /* Copied from the kernel sources to tools/: * * These are here in an effort to more fully work around Spitfire Errata * #51. Essentially, if a memory barrier occurs soon after a mispredicted * branch, the chip can stop executing instructions until a trap occurs. * Therefore, if interrupts are disabled, the chip can hang forever. * * It used to be believed that the memory barrier had to be right in the * delay slot, but a case has been traced recently wherein the memory barrier * was one instruction after the branch delay slot and the chip still hung. * The offending sequence was the following in sym_wakeup_done() of the * sym53c8xx_2 driver: * * call sym_ccb_from_dsa, 0 * movge %icc, 0, %l0 * brz,pn %o0, .LL1303 * mov %o0, %l2 * membar #LoadLoad * * The branch has to be mispredicted for the bug to occur. Therefore, we put * the memory barrier explicitly into a "branch always, predicted taken" * delay slot to avoid the problem case. */ #define membar_safe(type) \ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \ " membar " type "\n" \ "1:\n" \ : : : "memory"); \ } while (0) /* The kernel always executes in TSO memory model these days, * and furthermore most sparc64 chips implement more stringent * memory ordering than required by the specifications. */ #define mb() membar_safe("#StoreLoad") #define rmb() __asm__ __volatile__("":::"memory") #define wmb() __asm__ __volatile__("":::"memory") #endif /* !(__TOOLS_LINUX_SPARC64_BARRIER_H) */ >summaryrefslogtreecommitdiff
path: root/sound/isa/opti9xx/opti92x-ad1848.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-02-08 09:56:15 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-08 09:56:15 -0800
commit23fbe2cdc1de80120cf9ccd478ac57c3a3a0764b (patch)
tree4aff32d5f2f6fe2f54028bfd4d1b66fdd2f8d281 /sound/isa/opti9xx/opti92x-ad1848.c
parent926af6273fc683cd98cd0ce7bf0d04a02eed6742 (diff)
parenteeeefd41843218c55a8782a6920f044d9bf6207a (diff)
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
Pull block fix from Jens Axboe: "A single fix that should go into 4.10, fixing a regression on some devices with the WRITE_SAME command" * 'for-linus' of git://git.kernel.dk/linux-block: block: don't try Write Same from __blkdev_issue_zeroout
Diffstat (limited to 'sound/isa/opti9xx/opti92x-ad1848.c')