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

Commit e2e96c66 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.infradead.org/iommu-2.6:
  intel-iommu: Fix 32-bit build warning with __cmpxchg()
  intr-remap: allow disabling source id checking
parents 7355a5a6 1a8bd481
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -981,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file
			result in a hardware IOTLB flush operation as opposed
			to batching them for performance.

	intremap=	[X86-64, Intel-IOMMU]
			Format: { on (default) | off | nosid }
			on	enable Interrupt Remapping (default)
			off	disable Interrupt Remapping
			nosid	disable Source ID checking

	inttest=	[IA64]

	iomem=		Disable strict checking of access to MMIO memory
@@ -1681,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file

	nointremap	[X86-64, Intel-IOMMU] Do not enable interrupt
			remapping.
			[Deprecated - use intremap=off]

	nointroute	[IA-64]

+1 −1
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ static inline u64 dma_pte_addr(struct dma_pte *pte)
	return pte->val & VTD_PAGE_MASK;
#else
	/* Must have a full atomic 64-bit read */
	return  __cmpxchg64(pte, 0ULL, 0ULL) & VTD_PAGE_MASK;
	return  __cmpxchg64(&pte->val, 0ULL, 0ULL) & VTD_PAGE_MASK;
#endif
}

+20 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ static int ir_ioapic_num, ir_hpet_num;
int intr_remapping_enabled;

static int disable_intremap;
static int disable_sourceid_checking;

static __init int setup_nointremap(char *str)
{
	disable_intremap = 1;
@@ -28,6 +30,22 @@ static __init int setup_nointremap(char *str)
}
early_param("nointremap", setup_nointremap);

static __init int setup_intremap(char *str)
{
	if (!str)
		return -EINVAL;

	if (!strncmp(str, "on", 2))
		disable_intremap = 0;
	else if (!strncmp(str, "off", 3))
		disable_intremap = 1;
	else if (!strncmp(str, "nosid", 5))
		disable_sourceid_checking = 1;

	return 0;
}
early_param("intremap", setup_intremap);

struct irq_2_iommu {
	struct intel_iommu *iommu;
	u16 irte_index;
@@ -453,6 +471,8 @@ int free_irte(int irq)
static void set_irte_sid(struct irte *irte, unsigned int svt,
			 unsigned int sq, unsigned int sid)
{
	if (disable_sourceid_checking)
		svt = SVT_NO_VERIFY;
	irte->svt = svt;
	irte->sq = sq;
	irte->sid = sid;