X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/cf03f5cdc65293b4cb5eba3ed23fed26dad903c9..de355530ae67247cbd0da700edb3a2a1dae884c2:/iokit/IOKit/ppc/IOSharedLockImp.h?ds=sidebyside diff --git a/iokit/IOKit/ppc/IOSharedLockImp.h b/iokit/IOKit/ppc/IOSharedLockImp.h index c6c062fd5..01bb64e76 100644 --- a/iokit/IOKit/ppc/IOSharedLockImp.h +++ b/iokit/IOKit/ppc/IOSharedLockImp.h @@ -3,22 +3,19 @@ * * @APPLE_LICENSE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -96,47 +93,33 @@ #ifndef KERNEL LEAF(_ev_lock) - - li a6,1 // lock value - -8: lwz a7,0(a0) // Get lock word - mr. a7,a7 // Is it held? - bne-- 8b // Yup... - -9: lwarx a7,0,a0 // read the lock - mr. a7,a7 // Is it held? - bne-- 7f // yes, kill reservation - stwcx. a6,0,a0 // try to get the lock - bne-- 9b // failed, try again - isync - blr // got it, return - -7: li a7,-4 // Point to a spot in the red zone - stwcx. a7,a7,r1 // Kill reservation - b 8b // Go wait some more... - - + li a6,1 // lock value + lwarx a7,0,a0 // CEMV10 +9: + sync + lwarx a7,0,a0 // read the lock + cmpwi cr0,a7,0 // is it busy? + bne- 9b // yes, spin + sync + stwcx. a6,0,a0 // try to get the lock + bne- 9b // failed, try again + isync + blr // got it, return END(_ev_lock) LEAF(_IOSpinLock) - - li a6,1 // lock value - -8: lwz a7,0(a0) // Get lock word - mr. a7,a7 // Is it held? - bne-- 8b // Yup... - -9: lwarx a7,0,a0 // read the lock - mr. a7,a7 // Is it held? - bne-- 7f // yes, kill reservation - stwcx. a6,0,a0 // try to get the lock - bne-- 9b // failed, try again - isync - blr // got it, return - -7: li a7,-4 // Point to a spot in the red zone - stwcx. a7,a7,r1 // Kill reservation - b 8b // Go wait some more... + li a6,1 // lock value + lwarx a7,0,a0 // CEMV10 +9: + sync + lwarx a7,0,a0 // read the lock + cmpwi cr0,a7,0 // is it busy? + bne- 9b // yes, spin + sync + stwcx. a6,0,a0 // try to get the lock + bne- 9b // failed, try again + isync + blr // got it, return END(_IOSpinLock) #endif @@ -173,61 +156,45 @@ END(_IOSpinUnlock) */ LEAF(_ev_try_lock) - - DISABLE_PREEMPTION() - - li a6,1 // lock value - - lwz a7,0(a0) // Get lock word - mr. a7,a7 // Is it held? - bne-- 6f // Yup... - -9: lwarx a7,0,a0 // read the lock - mr. a7,a7 // Is it held? - bne-- 7f // yes, kill reservation - stwcx. a6,0,a0 // try to get the lock - bne-- 9b // failed, try again - li a0,1 // return TRUE - isync - blr // got it, return - -7: li a7,-4 // Point to a spot in the red zone - stwcx. a7,a7,r1 // Kill reservation - -6: - ENABLE_PREEMPTION() - li a0,0 // return FALSE - blr - + li a6,1 // lock value + DISABLE_PREEMPTION() + lwarx a7,0,a0 // CEMV10 +8: + sync + lwarx a7,0,a0 // read the lock + cmpwi cr0,a7,0 // is it busy? + bne- 9f // yes, give up + sync + stwcx. a6,0,a0 // try to get the lock + bne- 8b // failed, try again + li a0,1 // return TRUE + isync + blr +9: + ENABLE_PREEMPTION() + li a0,0 // return FALSE + blr END(_ev_try_lock) LEAF(_IOTrySpinLock) - - DISABLE_PREEMPTION() - - li a6,1 // lock value - - lwz a7,0(a0) // Get lock word - mr. a7,a7 // Is it held? - bne-- 6f // Yup... - -9: lwarx a7,0,a0 // read the lock - mr. a7,a7 // Is it held? - bne-- 7f // yes, kill reservation - stwcx. a6,0,a0 // try to get the lock - bne-- 9b // failed, try again - li a0,1 // return TRUE - isync - blr // got it, return - -7: li a7,-4 // Point to a spot in the red zone - stwcx. a7,a7,r1 // Kill reservation - -6: - ENABLE_PREEMPTION() - li a0,0 // return FALSE - blr - + li a6,1 // lock value + DISABLE_PREEMPTION() + lwarx a7,0,a0 // CEMV10 +8: + sync + lwarx a7,0,a0 // read the lock + cmpwi cr0,a7,0 // is it busy? + bne- 9f // yes, give up + sync + stwcx. a6,0,a0 // try to get the lock + bne- 8b // failed, try again + li a0,1 // return TRUE + isync + blr +9: + ENABLE_PREEMPTION() + li a0,0 // return FALSE + blr END(_IOTrySpinLock) #endif /* ! _IOKIT_IOSHAREDLOCKIMP_H */