diff options
Diffstat (limited to 'drivers/pci/msi.c')
| -rw-r--r-- | drivers/pci/msi.c | 16 | 
1 files changed, 7 insertions, 9 deletions
| diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index b4a90badd0a6..896a15d70f5b 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -398,21 +398,19 @@ static int msi_capability_init(struct pci_dev *dev)  	entry->msi_attrib.masked = 1;  	entry->msi_attrib.default_irq = dev->irq;	/* Save IOAPIC IRQ */  	entry->msi_attrib.pos = pos; -	if (entry->msi_attrib.maskbit) { -		entry->mask_base = (void __iomem *)(long)msi_mask_bits_reg(pos, -				entry->msi_attrib.is_64); -	}  	entry->dev = dev;  	if (entry->msi_attrib.maskbit) { -		unsigned int maskbits, temp; +		unsigned int base, maskbits, temp; + +		base = msi_mask_bits_reg(pos, entry->msi_attrib.is_64); +		entry->mask_base = (void __iomem *)(long)base; +  		/* All MSIs are unmasked by default, Mask them all */ -		pci_read_config_dword(dev, -			msi_mask_bits_reg(pos, entry->msi_attrib.is_64), -			&maskbits); +		pci_read_config_dword(dev, base, &maskbits);  		temp = (1 << multi_msi_capable(control));  		temp = ((temp - 1) & ~temp);  		maskbits |= temp; -		pci_write_config_dword(dev, entry->msi_attrib.is_64, maskbits); +		pci_write_config_dword(dev, base, maskbits);  		entry->msi_attrib.maskbits_mask = temp;  	}  	list_add_tail(&entry->list, &dev->msi_list); | 
