linux/arch/x86/lib/rwlock.S
<<
>>
Prefs
   1/* Slow paths of read/write spinlocks. */
   2
   3#include <linux/linkage.h>
   4#include <asm/alternative-asm.h>
   5#include <asm/frame.h>
   6#include <asm/rwlock.h>
   7
   8#ifdef CONFIG_X86_32
   9# define __lock_ptr eax
  10#else
  11# define __lock_ptr rdi
  12#endif
  13
  14ENTRY(__write_lock_failed)
  15        CFI_STARTPROC
  16        FRAME
  170:      LOCK_PREFIX
  18        WRITE_LOCK_ADD($RW_LOCK_BIAS) (%__lock_ptr)
  191:      rep; nop
  20        cmpl    $WRITE_LOCK_CMP, (%__lock_ptr)
  21        jne     1b
  22        LOCK_PREFIX
  23        WRITE_LOCK_SUB($RW_LOCK_BIAS) (%__lock_ptr)
  24        jnz     0b
  25        ENDFRAME
  26        ret
  27        CFI_ENDPROC
  28END(__write_lock_failed)
  29
  30ENTRY(__read_lock_failed)
  31        CFI_STARTPROC
  32        FRAME
  330:      LOCK_PREFIX
  34        READ_LOCK_SIZE(inc) (%__lock_ptr)
  351:      rep; nop
  36        READ_LOCK_SIZE(cmp) $1, (%__lock_ptr)
  37        js      1b
  38        LOCK_PREFIX
  39        READ_LOCK_SIZE(dec) (%__lock_ptr)
  40        js      0b
  41        ENDFRAME
  42        ret
  43        CFI_ENDPROC
  44END(__read_lock_failed)
  45
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.