iommu/amd: Don't access IOMMUv2 state_table directly

This is a preparation for converting the state_table into a
state_list.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
Tested-by: Jay Cornwall <Jay.Cornwall@amd.com>
This commit is contained in:
Joerg Roedel 2014-05-20 23:18:22 +02:00
parent 4b660a7f5c
commit b87d2d7c0b

View file

@ -111,13 +111,18 @@ static u16 device_id(struct pci_dev *pdev)
return devid; return devid;
} }
static struct device_state *__get_device_state(u16 devid)
{
return state_table[devid];
}
static struct device_state *get_device_state(u16 devid) static struct device_state *get_device_state(u16 devid)
{ {
struct device_state *dev_state; struct device_state *dev_state;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&state_lock, flags); spin_lock_irqsave(&state_lock, flags);
dev_state = state_table[devid]; dev_state = __get_device_state(devid);
if (dev_state != NULL) if (dev_state != NULL)
atomic_inc(&dev_state->count); atomic_inc(&dev_state->count);
spin_unlock_irqrestore(&state_lock, flags); spin_unlock_irqrestore(&state_lock, flags);
@ -841,7 +846,7 @@ void amd_iommu_free_device(struct pci_dev *pdev)
spin_lock_irqsave(&state_lock, flags); spin_lock_irqsave(&state_lock, flags);
dev_state = state_table[devid]; dev_state = __get_device_state(devid);
if (dev_state == NULL) { if (dev_state == NULL) {
spin_unlock_irqrestore(&state_lock, flags); spin_unlock_irqrestore(&state_lock, flags);
return; return;
@ -874,7 +879,7 @@ int amd_iommu_set_invalid_ppr_cb(struct pci_dev *pdev,
spin_lock_irqsave(&state_lock, flags); spin_lock_irqsave(&state_lock, flags);
ret = -EINVAL; ret = -EINVAL;
dev_state = state_table[devid]; dev_state = __get_device_state(devid);
if (dev_state == NULL) if (dev_state == NULL)
goto out_unlock; goto out_unlock;
@ -905,7 +910,7 @@ int amd_iommu_set_invalidate_ctx_cb(struct pci_dev *pdev,
spin_lock_irqsave(&state_lock, flags); spin_lock_irqsave(&state_lock, flags);
ret = -EINVAL; ret = -EINVAL;
dev_state = state_table[devid]; dev_state = __get_device_state(devid);
if (dev_state == NULL) if (dev_state == NULL)
goto out_unlock; goto out_unlock;