Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
smp_lock.h
Package: linux-2.4.20.tar.gz [view]
Upload User: jlfgdled
Upload Date: 2013-04-10
Package Size: 33168k
Code Size: 1k
Category:
Linux-Unix program
Development Platform:
Unix_Linux
- #ifndef __CRIS_SMPLOCK_H
- #define __CRIS_SMPLOCK_H
- #include <linux/config.h>
- #ifdef CONFIG_SMP
- #error "SMP is not supported for CRIS"
- /*
- * Locking the kernel
- */
- extern __inline void lock_kernel(void)
- {
- unsigned long flags;
- int proc = smp_processor_id();
- save_flags(flags);
- cli();
- /* set_bit works atomic in SMP machines */
- while(set_bit(0, (void *)&kernel_flag))
- {
- /*
- * We just start another level if we have the lock
- */
- if (proc == active_kernel_processor)
- break;
- do
- {
- #ifdef __SMP_PROF__
- smp_spins[smp_processor_id()]++;
- #endif
- /*
- * Doing test_bit here doesn't lock the bus
- */
- if (test_bit(proc, (void *)&smp_invalidate_needed))
- if (clear_bit(proc, (void *)&smp_invalidate_needed))
- local_flush_tlb();
- }
- while(test_bit(0, (void *)&kernel_flag));
- }
- /*
- * We got the lock, so tell the world we are here and increment
- * the level counter
- */
- active_kernel_processor = proc;
- kernel_counter++;
- restore_flags(flags);
- }
- extern __inline void unlock_kernel(void)
- {
- unsigned long flags;
- save_flags(flags);
- cli();
- /*
- * If it's the last level we have in the kernel, then
- * free the lock
- */
- if (kernel_counter == 0)
- panic("Kernel counter wrong.n"); /* FIXME: Why is kernel_counter sometimes 0 here? */
- if(! --kernel_counter)
- {
- active_kernel_processor = NO_PROC_ID;
- clear_bit(0, (void *)&kernel_flag);
- }
- restore_flags(flags);
- }
- #endif
- #endif