⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitops.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
字号:
/* atomic.c: atomic operations which got too long to be inlined all over * the place. *  * Copyright 1999 Philipp Rumpf (prumpf@tux.org */#include <linux/config.h>#include <linux/kernel.h>#include <linux/spinlock.h>#include <asm/system.h>#include <asm/atomic.h>#ifdef CONFIG_SMPspinlock_t __atomic_hash[ATOMIC_HASH_SIZE] = {	[0 ... (ATOMIC_HASH_SIZE-1)]  = SPIN_LOCK_UNLOCKED};#endifspinlock_t __atomic_lock = SPIN_LOCK_UNLOCKED;#ifndef __LP64__unsigned long __xchg(unsigned long x, unsigned long *ptr, int size){	unsigned long temp, flags;	if (size != sizeof x) {		printk("__xchg called with bad pointer\n");	}	spin_lock_irqsave(&__atomic_lock, flags);	temp = *ptr;	*ptr = x;	spin_unlock_irqrestore(&__atomic_lock, flags);	return temp;}#elseunsigned long __xchg(unsigned long x, unsigned long *ptr, int size){	unsigned long temp, flags;	unsigned int *ptr32;	if (size == 8) {try_long:		spin_lock_irqsave(&__atomic_lock, flags);		temp = *ptr;		*ptr = x;		spin_unlock_irqrestore(&__atomic_lock, flags);		return temp;	}	if (size == 4) {		ptr32 = (unsigned int *)ptr;		spin_lock_irqsave(&__atomic_lock, flags);		temp = (unsigned long)*ptr32;		*ptr32 = (unsigned int)x;		spin_unlock_irqrestore(&__atomic_lock, flags);		return temp;	}	printk("__xchg called with bad pointer\n");	goto try_long;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -