Merge git://git.infradead.org/iommu-2.6
* git://git.infradead.org/iommu-2.6: intel-iommu: Fix 32-bit build warning with __cmpxchg() intr-remap: allow disabling source id checking
This commit is contained in:
Коммит
e2e96c6636
|
@ -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
|
result in a hardware IOTLB flush operation as opposed
|
||||||
to batching them for performance.
|
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]
|
inttest= [IA64]
|
||||||
|
|
||||||
iomem= Disable strict checking of access to MMIO memory
|
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
|
nointremap [X86-64, Intel-IOMMU] Do not enable interrupt
|
||||||
remapping.
|
remapping.
|
||||||
|
[Deprecated - use intremap=off]
|
||||||
|
|
||||||
nointroute [IA-64]
|
nointroute [IA-64]
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ static inline u64 dma_pte_addr(struct dma_pte *pte)
|
||||||
return pte->val & VTD_PAGE_MASK;
|
return pte->val & VTD_PAGE_MASK;
|
||||||
#else
|
#else
|
||||||
/* Must have a full atomic 64-bit read */
|
/* 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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@ static int ir_ioapic_num, ir_hpet_num;
|
||||||
int intr_remapping_enabled;
|
int intr_remapping_enabled;
|
||||||
|
|
||||||
static int disable_intremap;
|
static int disable_intremap;
|
||||||
|
static int disable_sourceid_checking;
|
||||||
|
|
||||||
static __init int setup_nointremap(char *str)
|
static __init int setup_nointremap(char *str)
|
||||||
{
|
{
|
||||||
disable_intremap = 1;
|
disable_intremap = 1;
|
||||||
|
@ -28,6 +30,22 @@ static __init int setup_nointremap(char *str)
|
||||||
}
|
}
|
||||||
early_param("nointremap", setup_nointremap);
|
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 irq_2_iommu {
|
||||||
struct intel_iommu *iommu;
|
struct intel_iommu *iommu;
|
||||||
u16 irte_index;
|
u16 irte_index;
|
||||||
|
@ -453,6 +471,8 @@ int free_irte(int irq)
|
||||||
static void set_irte_sid(struct irte *irte, unsigned int svt,
|
static void set_irte_sid(struct irte *irte, unsigned int svt,
|
||||||
unsigned int sq, unsigned int sid)
|
unsigned int sq, unsigned int sid)
|
||||||
{
|
{
|
||||||
|
if (disable_sourceid_checking)
|
||||||
|
svt = SVT_NO_VERIFY;
|
||||||
irte->svt = svt;
|
irte->svt = svt;
|
||||||
irte->sq = sq;
|
irte->sq = sq;
|
||||||
irte->sid = sid;
|
irte->sid = sid;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче