[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Clean up use of spin_is_locked() and introduce rw_is_locked().
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1229182090 0 # Node ID e767f80d4bcc90d761df14ba89c2d72d44c99d8b # Parent db0c6d297d006c86056a45343e29be962595f211 Clean up use of spin_is_locked() and introduce rw_is_locked(). Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/arch/x86/irq.c | 4 ++-- xen/arch/x86/msi.c | 10 +++++----- xen/common/spinlock.c | 6 ++++++ xen/drivers/passthrough/iommu.c | 2 +- xen/drivers/passthrough/pci.c | 4 ++-- xen/drivers/passthrough/vtd/iommu.c | 16 ++++++++-------- xen/include/asm-ia64/linux-xen/asm/spinlock.h | 2 ++ xen/include/asm-x86/spinlock.h | 5 +++-- xen/include/xen/spinlock.h | 6 +++++- 9 files changed, 34 insertions(+), 21 deletions(-) diff -r db0c6d297d00 -r e767f80d4bcc xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/arch/x86/irq.c Sat Dec 13 15:28:10 2008 +0000 @@ -850,7 +850,7 @@ int map_domain_pirq( struct msi_desc *msi_desc; struct pci_dev *pdev = NULL; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); ASSERT(spin_is_locked(&d->event_lock)); if ( !IS_PRIV(current->domain) ) @@ -930,7 +930,7 @@ int unmap_domain_pirq(struct domain *d, if ( !IS_PRIV(current->domain) ) return -EINVAL; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); ASSERT(spin_is_locked(&d->event_lock)); vector = d->arch.pirq_vector[pirq]; diff -r db0c6d297d00 -r e767f80d4bcc xen/arch/x86/msi.c --- a/xen/arch/x86/msi.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/arch/x86/msi.c Sat Dec 13 15:28:10 2008 +0000 @@ -440,7 +440,7 @@ static int msi_capability_init(struct pc u8 slot = PCI_SLOT(dev->devfn); u8 func = PCI_FUNC(dev->devfn); - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); pos = pci_find_cap_offset(bus, slot, func, PCI_CAP_ID_MSI); control = pci_conf_read16(bus, slot, func, msi_control_reg(pos)); /* MSI Entry Initialization */ @@ -509,7 +509,7 @@ static int msix_capability_init(struct p u8 slot = PCI_SLOT(dev->devfn); u8 func = PCI_FUNC(dev->devfn); - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); ASSERT(desc); pos = pci_find_cap_offset(bus, slot, func, PCI_CAP_ID_MSIX); @@ -574,7 +574,7 @@ static int __pci_enable_msi(struct msi_i int status; struct pci_dev *pdev; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); pdev = pci_get_pdev(msi->bus, msi->devfn); if ( !pdev ) return -ENODEV; @@ -634,7 +634,7 @@ static int __pci_enable_msix(struct msi_ u8 slot = PCI_SLOT(msi->devfn); u8 func = PCI_FUNC(msi->devfn); - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); pdev = pci_get_pdev(msi->bus, msi->devfn); if ( !pdev ) return -ENODEV; @@ -688,7 +688,7 @@ static void __pci_disable_msix(struct ms */ int pci_enable_msi(struct msi_info *msi, struct msi_desc **desc) { - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); return msi->table_base ? __pci_enable_msix(msi, desc) : __pci_enable_msi(msi, desc); diff -r db0c6d297d00 -r e767f80d4bcc xen/common/spinlock.c --- a/xen/common/spinlock.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/common/spinlock.c Sat Dec 13 15:28:10 2008 +0000 @@ -215,3 +215,9 @@ void _write_unlock_irqrestore(rwlock_t * _raw_write_unlock(&lock->raw); local_irq_restore(flags); } + +int _rw_is_locked(rwlock_t *lock) +{ + check_lock(&lock->debug); + return _raw_rw_is_locked(&lock->raw); +} diff -r db0c6d297d00 -r e767f80d4bcc xen/drivers/passthrough/iommu.c --- a/xen/drivers/passthrough/iommu.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/drivers/passthrough/iommu.c Sat Dec 13 15:28:10 2008 +0000 @@ -87,7 +87,7 @@ int iommu_add_device(struct pci_dev *pde if ( !pdev->domain ) return -EINVAL; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); hd = domain_hvm_iommu(pdev->domain); if ( !iommu_enabled || !hd->platform_ops ) diff -r db0c6d297d00 -r e767f80d4bcc xen/drivers/passthrough/pci.c --- a/xen/drivers/passthrough/pci.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/drivers/passthrough/pci.c Sat Dec 13 15:28:10 2008 +0000 @@ -62,7 +62,7 @@ struct pci_dev *pci_get_pdev(int bus, in { struct pci_dev *pdev = NULL; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); list_for_each_entry ( pdev, &alldevs_list, alldevs_list ) if ( (pdev->bus == bus || bus == -1) && @@ -78,7 +78,7 @@ struct pci_dev *pci_get_pdev_by_domain(s { struct pci_dev *pdev = NULL; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); list_for_each_entry ( pdev, &alldevs_list, alldevs_list ) if ( (pdev->bus == bus || bus == -1) && diff -r db0c6d297d00 -r e767f80d4bcc xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/drivers/passthrough/vtd/iommu.c Sat Dec 13 15:28:10 2008 +0000 @@ -1037,7 +1037,7 @@ static int domain_context_mapping_one( struct pci_dev *pdev = NULL; int agaw; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); spin_lock(&iommu->lock); maddr = bus_to_context_maddr(iommu, bus); context_entries = (struct context_entry *)map_vtd_domain_page(maddr); @@ -1214,7 +1214,7 @@ static int domain_context_mapping(struct if ( !drhd ) return -ENODEV; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); type = pdev_type(bus, devfn); switch ( type ) @@ -1298,7 +1298,7 @@ static int domain_context_unmap_one( struct context_entry *context, *context_entries; u64 maddr; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); spin_lock(&iommu->lock); maddr = bus_to_context_maddr(iommu, bus); @@ -1388,7 +1388,7 @@ static int reassign_device_ownership( struct iommu *pdev_iommu; int ret, found = 0; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); pdev = pci_get_pdev_by_domain(source, bus, devfn); if (!pdev) @@ -1428,7 +1428,7 @@ void iommu_domain_teardown(struct domain if ( list_empty(&acpi_drhd_units) ) return; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); spin_lock(&hd->mapping_lock); iommu_free_pagetable(hd->pgd_maddr, agaw_to_level(hd->agaw)); hd->pgd_maddr = 0; @@ -1518,7 +1518,7 @@ static int iommu_prepare_rmrr_dev(struct u64 base, end; unsigned long base_pfn, end_pfn; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); ASSERT(rmrr->base_address < rmrr->end_address); base = rmrr->base_address & PAGE_MASK_4K; @@ -1543,7 +1543,7 @@ static int intel_iommu_add_device(struct u16 bdf; int ret, i; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); if ( !pdev->domain ) return -EINVAL; @@ -1782,7 +1782,7 @@ int intel_iommu_assign_device(struct dom if ( list_empty(&acpi_drhd_units) ) return -ENODEV; - ASSERT(spin_is_locked(&pcidevs_lock)); + ASSERT(rw_is_locked(&pcidevs_lock)); pdev = pci_get_pdev(bus, devfn); if (!pdev) return -ENODEV; diff -r db0c6d297d00 -r e767f80d4bcc xen/include/asm-ia64/linux-xen/asm/spinlock.h --- a/xen/include/asm-ia64/linux-xen/asm/spinlock.h Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/include/asm-ia64/linux-xen/asm/spinlock.h Sat Dec 13 15:28:10 2008 +0000 @@ -216,4 +216,6 @@ do { \ clear_bit(31, (x)); \ }) +#define _raw_rw_is_locked(x) (*(int *)(x) != 0) + #endif /* _ASM_IA64_SPINLOCK_H */ diff -r db0c6d297d00 -r e767f80d4bcc xen/include/asm-x86/spinlock.h --- a/xen/include/asm-x86/spinlock.h Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/include/asm-x86/spinlock.h Sat Dec 13 15:28:10 2008 +0000 @@ -12,8 +12,7 @@ typedef struct { #define _RAW_SPIN_LOCK_UNLOCKED /*(raw_spinlock_t)*/ { 1 } -#define _raw_spin_is_locked(x) \ - (*(volatile char *)(&(x)->lock) <= 0) +#define _raw_spin_is_locked(x) ((x)->lock <= 0) static always_inline void _raw_spin_lock(raw_spinlock_t *lock) { @@ -75,4 +74,6 @@ static always_inline void _raw_write_loc "lock ; addl $" RW_LOCK_BIAS_STR ",%0" : \ "=m" ((rw)->lock) : : "memory" ) +#define _raw_rw_is_locked(x) ((x)->lock < RW_LOCK_BIAS) + #endif /* __ASM_SPINLOCK_H */ diff -r db0c6d297d00 -r e767f80d4bcc xen/include/xen/spinlock.h --- a/xen/include/xen/spinlock.h Sat Dec 13 15:04:53 2008 +0000 +++ b/xen/include/xen/spinlock.h Sat Dec 13 15:28:10 2008 +0000 @@ -72,6 +72,8 @@ void _write_unlock_irq(rwlock_t *lock); void _write_unlock_irq(rwlock_t *lock); void _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags); +int _rw_is_locked(rwlock_t *lock); + #define spin_lock(l) _spin_lock(l) #define spin_lock_irq(l) _spin_lock_irq(l) #define spin_lock_irqsave(l, f) ((f) = _spin_lock_irqsave(l)) @@ -80,7 +82,7 @@ void _write_unlock_irqrestore(rwlock_t * #define spin_unlock_irq(l) _spin_unlock_irq(l) #define spin_unlock_irqrestore(l, f) _spin_unlock_irqrestore(l, f) -#define spin_is_locked(l) _raw_spin_is_locked(&(l)->raw) +#define spin_is_locked(l) _spin_is_locked(l) #define spin_trylock(l) _spin_trylock(l) /* Ensure a lock is quiescent between two critical operations. */ @@ -113,4 +115,6 @@ void _write_unlock_irqrestore(rwlock_t * #define write_unlock_irq(l) _write_unlock_irq(l) #define write_unlock_irqrestore(l, f) _write_unlock_irqrestore(l, f) +#define rw_is_locked(l) _rw_is_locked(l) + #endif /* __SPINLOCK_H__ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |