diff options
Diffstat (limited to 'drivers/pci/intr_remapping.c')
-rw-r--r-- | drivers/pci/intr_remapping.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index 1315ac688aa..45478ef7dd7 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
@@ -21,6 +21,8 @@ static int ir_ioapic_num, ir_hpet_num; | |||
21 | int intr_remapping_enabled; | 21 | int intr_remapping_enabled; |
22 | 22 | ||
23 | static int disable_intremap; | 23 | static int disable_intremap; |
24 | static int disable_sourceid_checking; | ||
25 | |||
24 | static __init int setup_nointremap(char *str) | 26 | static __init int setup_nointremap(char *str) |
25 | { | 27 | { |
26 | disable_intremap = 1; | 28 | disable_intremap = 1; |
@@ -28,6 +30,22 @@ static __init int setup_nointremap(char *str) | |||
28 | } | 30 | } |
29 | early_param("nointremap", setup_nointremap); | 31 | early_param("nointremap", setup_nointremap); |
30 | 32 | ||
33 | static __init int setup_intremap(char *str) | ||
34 | { | ||
35 | if (!str) | ||
36 | return -EINVAL; | ||
37 | |||
38 | if (!strncmp(str, "on", 2)) | ||
39 | disable_intremap = 0; | ||
40 | else if (!strncmp(str, "off", 3)) | ||
41 | disable_intremap = 1; | ||
42 | else if (!strncmp(str, "nosid", 5)) | ||
43 | disable_sourceid_checking = 1; | ||
44 | |||
45 | return 0; | ||
46 | } | ||
47 | early_param("intremap", setup_intremap); | ||
48 | |||
31 | struct irq_2_iommu { | 49 | struct irq_2_iommu { |
32 | struct intel_iommu *iommu; | 50 | struct intel_iommu *iommu; |
33 | u16 irte_index; | 51 | u16 irte_index; |
@@ -453,6 +471,8 @@ int free_irte(int irq) | |||
453 | static void set_irte_sid(struct irte *irte, unsigned int svt, | 471 | static void set_irte_sid(struct irte *irte, unsigned int svt, |
454 | unsigned int sq, unsigned int sid) | 472 | unsigned int sq, unsigned int sid) |
455 | { | 473 | { |
474 | if (disable_sourceid_checking) | ||
475 | svt = SVT_NO_VERIFY; | ||
456 | irte->svt = svt; | 476 | irte->svt = svt; |
457 | irte->sq = sq; | 477 | irte->sq = sq; |
458 | irte->sid = sid; | 478 | irte->sid = sid; |