Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 264d9caa authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Jesse Barnes
Browse files

PCI MSI: Use mask_pos instead of mask_base when appropriate



MSI interrupts have a mask_pos where MSI-X have a mask_base.  Use a
transparent union to get rid of some ugly casts.

Signed-off-by: default avatarMatthew Wilcox <willy@linux.intel.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 379f5327
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ static int msi_set_mask_bits(struct irq_desc *desc, u32 mask, u32 flag)
		if (!entry->msi_attrib.maskbit)
			return 0;

		pos = (long)entry->mask_base;
		pos = entry->mask_pos;
		pci_read_config_dword(entry->dev, pos, &mask_bits);
		mask_bits &= ~mask;
		mask_bits |= flag & mask;
@@ -363,8 +363,7 @@ static int msi_capability_init(struct pci_dev *dev)
		unsigned int base, maskbits, temp;

		base = msi_mask_bits_reg(pos, entry->msi_attrib.is_64);
		entry->mask_base = (void __iomem *)(long)base;

		entry->mask_pos = base;
		/* All MSIs are unmasked by default, Mask them all */
		pci_read_config_dword(dev, base, &maskbits);
		temp = msi_mask((control & PCI_MSI_FLAGS_QMASK) >> 1);
+4 −1
Original line number Diff line number Diff line
@@ -33,7 +33,10 @@ struct msi_desc {
	unsigned int irq;
	struct list_head list;

	union {
		void __iomem *mask_base;
		u8 mask_pos;
	};
	struct pci_dev *dev;

	/* Last set MSI message */