diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-31 16:13:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-31 16:13:56 -0500 |
commit | f39d7d78b70e0f39facb1e4fab77ad3df5c52a35 (patch) | |
tree | b5d2aa0746b70300ebbca82a8132af386cc5986d | |
parent | 52c90f2d32bfa7d6eccd66a56c44ace1f78fbadd (diff) | |
parent | a31e58e129f73ab5b04016330b13ed51fde7a961 (diff) |
Merge branch 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fixes from Thomas Gleixner:
"A couple of fixlets for x86:
- Fix the ESPFIX double fault handling for 5-level pagetables
- Fix the commandline parsing for 'apic=' on 32bit systems and update
documentation
- Make zombie stack traces reliable
- Fix kexec with stack canary
- Fix the delivery mode for APICs which was missed when the x86
vector management was converted to single target delivery. Caused a
regression due to the broken hardware which ignores affinity
settings in lowest prio delivery mode.
- Unbreak modules when AMD memory encryption is enabled
- Remove an unused parameter of prepare_switch_to"
* 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/apic: Switch all APICs to Fixed delivery mode
x86/apic: Update the 'apic=' description of setting APIC driver
x86/apic: Avoid wrong warning when parsing 'apic=' in X86-32 case
x86-32: Fix kexec with stack canary (CONFIG_CC_STACKPROTECTOR)
x86: Remove unused parameter of prepare_switch_to
x86/stacktrace: Make zombie stack traces reliable
x86/mm: Unbreak modules that use the DMA API
x86/build: Make isoimage work on Debian
x86/espfix/64: Fix espfix double-fault handling on 5-level systems
-rw-r--r-- | Documentation/admin-guide/kernel-parameters.txt | 6 | ||||
-rw-r--r-- | arch/x86/boot/genimage.sh | 28 | ||||
-rw-r--r-- | arch/x86/include/asm/switch_to.h | 5 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic_flat_64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic_noop.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/msi.c | 8 | ||||
-rw-r--r-- | arch/x86/kernel/apic/probe_32.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/x2apic_cluster.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/machine_kexec_32.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/stacktrace.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/mem_encrypt.c | 4 | ||||
-rw-r--r-- | drivers/pci/host/pci-hyperv.c | 8 |
14 files changed, 42 insertions, 39 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 7041c6710f22..af7104aaffd9 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt | |||
@@ -328,11 +328,15 @@ | |||
328 | not play well with APC CPU idle - disable it if you have | 328 | not play well with APC CPU idle - disable it if you have |
329 | APC and your system crashes randomly. | 329 | APC and your system crashes randomly. |
330 | 330 | ||
331 | apic= [APIC,X86-32] Advanced Programmable Interrupt Controller | 331 | apic= [APIC,X86] Advanced Programmable Interrupt Controller |
332 | Change the output verbosity whilst booting | 332 | Change the output verbosity whilst booting |
333 | Format: { quiet (default) | verbose | debug } | 333 | Format: { quiet (default) | verbose | debug } |
334 | Change the amount of debugging information output | 334 | Change the amount of debugging information output |
335 | when initialising the APIC and IO-APIC components. | 335 | when initialising the APIC and IO-APIC components. |
336 | For X86-32, this can also be used to specify an APIC | ||
337 | driver name. | ||
338 | Format: apic=driver_name | ||
339 | Examples: apic=bigsmp | ||
336 | 340 | ||
337 | apic_extnmi= [APIC,X86] External NMI delivery setting | 341 | apic_extnmi= [APIC,X86] External NMI delivery setting |
338 | Format: { bsp (default) | all | none } | 342 | Format: { bsp (default) | all | none } |
diff --git a/arch/x86/boot/genimage.sh b/arch/x86/boot/genimage.sh index c9e8499fbfe7..6a10d52a4145 100644 --- a/arch/x86/boot/genimage.sh +++ b/arch/x86/boot/genimage.sh | |||
@@ -80,39 +80,43 @@ genfdimage288() { | |||
80 | mcopy $FBZIMAGE w:linux | 80 | mcopy $FBZIMAGE w:linux |
81 | } | 81 | } |
82 | 82 | ||
83 | genisoimage() { | 83 | geniso() { |
84 | tmp_dir=`dirname $FIMAGE`/isoimage | 84 | tmp_dir=`dirname $FIMAGE`/isoimage |
85 | rm -rf $tmp_dir | 85 | rm -rf $tmp_dir |
86 | mkdir $tmp_dir | 86 | mkdir $tmp_dir |
87 | for i in lib lib64 share end ; do | 87 | for i in lib lib64 share ; do |
88 | for j in syslinux ISOLINUX ; do | 88 | for j in syslinux ISOLINUX ; do |
89 | if [ -f /usr/$i/$j/isolinux.bin ] ; then | 89 | if [ -f /usr/$i/$j/isolinux.bin ] ; then |
90 | isolinux=/usr/$i/$j/isolinux.bin | 90 | isolinux=/usr/$i/$j/isolinux.bin |
91 | cp $isolinux $tmp_dir | ||
92 | fi | 91 | fi |
93 | done | 92 | done |
94 | for j in syslinux syslinux/modules/bios ; do | 93 | for j in syslinux syslinux/modules/bios ; do |
95 | if [ -f /usr/$i/$j/ldlinux.c32 ]; then | 94 | if [ -f /usr/$i/$j/ldlinux.c32 ]; then |
96 | ldlinux=/usr/$i/$j/ldlinux.c32 | 95 | ldlinux=/usr/$i/$j/ldlinux.c32 |
97 | cp $ldlinux $tmp_dir | ||
98 | fi | 96 | fi |
99 | done | 97 | done |
100 | if [ -n "$isolinux" -a -n "$ldlinux" ] ; then | 98 | if [ -n "$isolinux" -a -n "$ldlinux" ] ; then |
101 | break | 99 | break |
102 | fi | 100 | fi |
103 | if [ $i = end -a -z "$isolinux" ] ; then | ||
104 | echo 'Need an isolinux.bin file, please install syslinux/isolinux.' | ||
105 | exit 1 | ||
106 | fi | ||
107 | done | 101 | done |
102 | if [ -z "$isolinux" ] ; then | ||
103 | echo 'Need an isolinux.bin file, please install syslinux/isolinux.' | ||
104 | exit 1 | ||
105 | fi | ||
106 | if [ -z "$ldlinux" ] ; then | ||
107 | echo 'Need an ldlinux.c32 file, please install syslinux/isolinux.' | ||
108 | exit 1 | ||
109 | fi | ||
110 | cp $isolinux $tmp_dir | ||
111 | cp $ldlinux $tmp_dir | ||
108 | cp $FBZIMAGE $tmp_dir/linux | 112 | cp $FBZIMAGE $tmp_dir/linux |
109 | echo "$KCMDLINE" > $tmp_dir/isolinux.cfg | 113 | echo "$KCMDLINE" > $tmp_dir/isolinux.cfg |
110 | if [ -f "$FDINITRD" ] ; then | 114 | if [ -f "$FDINITRD" ] ; then |
111 | cp "$FDINITRD" $tmp_dir/initrd.img | 115 | cp "$FDINITRD" $tmp_dir/initrd.img |
112 | fi | 116 | fi |
113 | mkisofs -J -r -input-charset=utf-8 -quiet -o $FIMAGE -b isolinux.bin \ | 117 | genisoimage -J -r -input-charset=utf-8 -quiet -o $FIMAGE \ |
114 | -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \ | 118 | -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 \ |
115 | $tmp_dir | 119 | -boot-info-table $tmp_dir |
116 | isohybrid $FIMAGE 2>/dev/null || true | 120 | isohybrid $FIMAGE 2>/dev/null || true |
117 | rm -rf $tmp_dir | 121 | rm -rf $tmp_dir |
118 | } | 122 | } |
@@ -121,6 +125,6 @@ case $1 in | |||
121 | bzdisk) genbzdisk;; | 125 | bzdisk) genbzdisk;; |
122 | fdimage144) genfdimage144;; | 126 | fdimage144) genfdimage144;; |
123 | fdimage288) genfdimage288;; | 127 | fdimage288) genfdimage288;; |
124 | isoimage) genisoimage;; | 128 | isoimage) geniso;; |
125 | *) echo 'Unknown image format'; exit 1; | 129 | *) echo 'Unknown image format'; exit 1; |
126 | esac | 130 | esac |
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h index 9b6df68d8fd1..eb5f7999a893 100644 --- a/arch/x86/include/asm/switch_to.h +++ b/arch/x86/include/asm/switch_to.h | |||
@@ -16,8 +16,7 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, | |||
16 | struct tss_struct *tss); | 16 | struct tss_struct *tss); |
17 | 17 | ||
18 | /* This runs runs on the previous thread's stack. */ | 18 | /* This runs runs on the previous thread's stack. */ |
19 | static inline void prepare_switch_to(struct task_struct *prev, | 19 | static inline void prepare_switch_to(struct task_struct *next) |
20 | struct task_struct *next) | ||
21 | { | 20 | { |
22 | #ifdef CONFIG_VMAP_STACK | 21 | #ifdef CONFIG_VMAP_STACK |
23 | /* | 22 | /* |
@@ -70,7 +69,7 @@ struct fork_frame { | |||
70 | 69 | ||
71 | #define switch_to(prev, next, last) \ | 70 | #define switch_to(prev, next, last) \ |
72 | do { \ | 71 | do { \ |
73 | prepare_switch_to(prev, next); \ | 72 | prepare_switch_to(next); \ |
74 | \ | 73 | \ |
75 | ((last) = __switch_to_asm((prev), (next))); \ | 74 | ((last) = __switch_to_asm((prev), (next))); \ |
76 | } while (0) | 75 | } while (0) |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 6e272f3ea984..880441f24146 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -2626,11 +2626,13 @@ static int __init apic_set_verbosity(char *arg) | |||
2626 | apic_verbosity = APIC_DEBUG; | 2626 | apic_verbosity = APIC_DEBUG; |
2627 | else if (strcmp("verbose", arg) == 0) | 2627 | else if (strcmp("verbose", arg) == 0) |
2628 | apic_verbosity = APIC_VERBOSE; | 2628 | apic_verbosity = APIC_VERBOSE; |
2629 | #ifdef CONFIG_X86_64 | ||
2629 | else { | 2630 | else { |
2630 | pr_warning("APIC Verbosity level %s not recognised" | 2631 | pr_warning("APIC Verbosity level %s not recognised" |
2631 | " use apic=verbose or apic=debug\n", arg); | 2632 | " use apic=verbose or apic=debug\n", arg); |
2632 | return -EINVAL; | 2633 | return -EINVAL; |
2633 | } | 2634 | } |
2635 | #endif | ||
2634 | 2636 | ||
2635 | return 0; | 2637 | return 0; |
2636 | } | 2638 | } |
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c index aa85690e9b64..25a87028cb3f 100644 --- a/arch/x86/kernel/apic/apic_flat_64.c +++ b/arch/x86/kernel/apic/apic_flat_64.c | |||
@@ -151,7 +151,7 @@ static struct apic apic_flat __ro_after_init = { | |||
151 | .apic_id_valid = default_apic_id_valid, | 151 | .apic_id_valid = default_apic_id_valid, |
152 | .apic_id_registered = flat_apic_id_registered, | 152 | .apic_id_registered = flat_apic_id_registered, |
153 | 153 | ||
154 | .irq_delivery_mode = dest_LowestPrio, | 154 | .irq_delivery_mode = dest_Fixed, |
155 | .irq_dest_mode = 1, /* logical */ | 155 | .irq_dest_mode = 1, /* logical */ |
156 | 156 | ||
157 | .disable_esr = 0, | 157 | .disable_esr = 0, |
diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c index 7b659c4480c9..5078b5ce63a7 100644 --- a/arch/x86/kernel/apic/apic_noop.c +++ b/arch/x86/kernel/apic/apic_noop.c | |||
@@ -110,7 +110,7 @@ struct apic apic_noop __ro_after_init = { | |||
110 | .apic_id_valid = default_apic_id_valid, | 110 | .apic_id_valid = default_apic_id_valid, |
111 | .apic_id_registered = noop_apic_id_registered, | 111 | .apic_id_registered = noop_apic_id_registered, |
112 | 112 | ||
113 | .irq_delivery_mode = dest_LowestPrio, | 113 | .irq_delivery_mode = dest_Fixed, |
114 | /* logical delivery broadcast to all CPUs: */ | 114 | /* logical delivery broadcast to all CPUs: */ |
115 | .irq_dest_mode = 1, | 115 | .irq_dest_mode = 1, |
116 | 116 | ||
diff --git a/arch/x86/kernel/apic/msi.c b/arch/x86/kernel/apic/msi.c index 9b18be764422..ce503c99f5c4 100644 --- a/arch/x86/kernel/apic/msi.c +++ b/arch/x86/kernel/apic/msi.c | |||
@@ -39,17 +39,13 @@ static void irq_msi_compose_msg(struct irq_data *data, struct msi_msg *msg) | |||
39 | ((apic->irq_dest_mode == 0) ? | 39 | ((apic->irq_dest_mode == 0) ? |
40 | MSI_ADDR_DEST_MODE_PHYSICAL : | 40 | MSI_ADDR_DEST_MODE_PHYSICAL : |
41 | MSI_ADDR_DEST_MODE_LOGICAL) | | 41 | MSI_ADDR_DEST_MODE_LOGICAL) | |
42 | ((apic->irq_delivery_mode != dest_LowestPrio) ? | 42 | MSI_ADDR_REDIRECTION_CPU | |
43 | MSI_ADDR_REDIRECTION_CPU : | ||
44 | MSI_ADDR_REDIRECTION_LOWPRI) | | ||
45 | MSI_ADDR_DEST_ID(cfg->dest_apicid); | 43 | MSI_ADDR_DEST_ID(cfg->dest_apicid); |
46 | 44 | ||
47 | msg->data = | 45 | msg->data = |
48 | MSI_DATA_TRIGGER_EDGE | | 46 | MSI_DATA_TRIGGER_EDGE | |
49 | MSI_DATA_LEVEL_ASSERT | | 47 | MSI_DATA_LEVEL_ASSERT | |
50 | ((apic->irq_delivery_mode != dest_LowestPrio) ? | 48 | MSI_DATA_DELIVERY_FIXED | |
51 | MSI_DATA_DELIVERY_FIXED : | ||
52 | MSI_DATA_DELIVERY_LOWPRI) | | ||
53 | MSI_DATA_VECTOR(cfg->vector); | 49 | MSI_DATA_VECTOR(cfg->vector); |
54 | } | 50 | } |
55 | 51 | ||
diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c index fa22017de806..02e8acb134f8 100644 --- a/arch/x86/kernel/apic/probe_32.c +++ b/arch/x86/kernel/apic/probe_32.c | |||
@@ -105,7 +105,7 @@ static struct apic apic_default __ro_after_init = { | |||
105 | .apic_id_valid = default_apic_id_valid, | 105 | .apic_id_valid = default_apic_id_valid, |
106 | .apic_id_registered = default_apic_id_registered, | 106 | .apic_id_registered = default_apic_id_registered, |
107 | 107 | ||
108 | .irq_delivery_mode = dest_LowestPrio, | 108 | .irq_delivery_mode = dest_Fixed, |
109 | /* logical delivery broadcast to all CPUs: */ | 109 | /* logical delivery broadcast to all CPUs: */ |
110 | .irq_dest_mode = 1, | 110 | .irq_dest_mode = 1, |
111 | 111 | ||
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c index 622f13ca8a94..8b04234e010b 100644 --- a/arch/x86/kernel/apic/x2apic_cluster.c +++ b/arch/x86/kernel/apic/x2apic_cluster.c | |||
@@ -184,7 +184,7 @@ static struct apic apic_x2apic_cluster __ro_after_init = { | |||
184 | .apic_id_valid = x2apic_apic_id_valid, | 184 | .apic_id_valid = x2apic_apic_id_valid, |
185 | .apic_id_registered = x2apic_apic_id_registered, | 185 | .apic_id_registered = x2apic_apic_id_registered, |
186 | 186 | ||
187 | .irq_delivery_mode = dest_LowestPrio, | 187 | .irq_delivery_mode = dest_Fixed, |
188 | .irq_dest_mode = 1, /* logical */ | 188 | .irq_dest_mode = 1, /* logical */ |
189 | 189 | ||
190 | .disable_esr = 0, | 190 | .disable_esr = 0, |
diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c index 00bc751c861c..edfede768688 100644 --- a/arch/x86/kernel/machine_kexec_32.c +++ b/arch/x86/kernel/machine_kexec_32.c | |||
@@ -48,8 +48,6 @@ static void load_segments(void) | |||
48 | "\tmovl $"STR(__KERNEL_DS)",%%eax\n" | 48 | "\tmovl $"STR(__KERNEL_DS)",%%eax\n" |
49 | "\tmovl %%eax,%%ds\n" | 49 | "\tmovl %%eax,%%ds\n" |
50 | "\tmovl %%eax,%%es\n" | 50 | "\tmovl %%eax,%%es\n" |
51 | "\tmovl %%eax,%%fs\n" | ||
52 | "\tmovl %%eax,%%gs\n" | ||
53 | "\tmovl %%eax,%%ss\n" | 51 | "\tmovl %%eax,%%ss\n" |
54 | : : : "eax", "memory"); | 52 | : : : "eax", "memory"); |
55 | #undef STR | 53 | #undef STR |
@@ -232,8 +230,8 @@ void machine_kexec(struct kimage *image) | |||
232 | * The gdt & idt are now invalid. | 230 | * The gdt & idt are now invalid. |
233 | * If you want to load them you must set up your own idt & gdt. | 231 | * If you want to load them you must set up your own idt & gdt. |
234 | */ | 232 | */ |
235 | set_gdt(phys_to_virt(0), 0); | ||
236 | idt_invalidate(phys_to_virt(0)); | 233 | idt_invalidate(phys_to_virt(0)); |
234 | set_gdt(phys_to_virt(0), 0); | ||
237 | 235 | ||
238 | /* now call it */ | 236 | /* now call it */ |
239 | image->start = relocate_kernel_ptr((unsigned long)image->head, | 237 | image->start = relocate_kernel_ptr((unsigned long)image->head, |
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 77835bc021c7..20161ef53537 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c | |||
@@ -164,8 +164,12 @@ int save_stack_trace_tsk_reliable(struct task_struct *tsk, | |||
164 | { | 164 | { |
165 | int ret; | 165 | int ret; |
166 | 166 | ||
167 | /* | ||
168 | * If the task doesn't have a stack (e.g., a zombie), the stack is | ||
169 | * "reliably" empty. | ||
170 | */ | ||
167 | if (!try_get_task_stack(tsk)) | 171 | if (!try_get_task_stack(tsk)) |
168 | return -EINVAL; | 172 | return 0; |
169 | 173 | ||
170 | ret = __save_stack_trace_reliable(trace, tsk); | 174 | ret = __save_stack_trace_reliable(trace, tsk); |
171 | 175 | ||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index f69dbd47d733..446c9ef8cfc3 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -361,7 +361,7 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) | |||
361 | * | 361 | * |
362 | * No need for ist_enter here because we don't use RCU. | 362 | * No need for ist_enter here because we don't use RCU. |
363 | */ | 363 | */ |
364 | if (((long)regs->sp >> PGDIR_SHIFT) == ESPFIX_PGD_ENTRY && | 364 | if (((long)regs->sp >> P4D_SHIFT) == ESPFIX_PGD_ENTRY && |
365 | regs->cs == __KERNEL_CS && | 365 | regs->cs == __KERNEL_CS && |
366 | regs->ip == (unsigned long)native_irq_return_iret) | 366 | regs->ip == (unsigned long)native_irq_return_iret) |
367 | { | 367 | { |
diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c index d9a9e9fc75dd..391b13402e40 100644 --- a/arch/x86/mm/mem_encrypt.c +++ b/arch/x86/mm/mem_encrypt.c | |||
@@ -405,13 +405,13 @@ bool sme_active(void) | |||
405 | { | 405 | { |
406 | return sme_me_mask && !sev_enabled; | 406 | return sme_me_mask && !sev_enabled; |
407 | } | 407 | } |
408 | EXPORT_SYMBOL_GPL(sme_active); | 408 | EXPORT_SYMBOL(sme_active); |
409 | 409 | ||
410 | bool sev_active(void) | 410 | bool sev_active(void) |
411 | { | 411 | { |
412 | return sme_me_mask && sev_enabled; | 412 | return sme_me_mask && sev_enabled; |
413 | } | 413 | } |
414 | EXPORT_SYMBOL_GPL(sev_active); | 414 | EXPORT_SYMBOL(sev_active); |
415 | 415 | ||
416 | static const struct dma_map_ops sev_dma_ops = { | 416 | static const struct dma_map_ops sev_dma_ops = { |
417 | .alloc = sev_alloc, | 417 | .alloc = sev_alloc, |
diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c index 04dac6a42c9f..6b8d060d07de 100644 --- a/drivers/pci/host/pci-hyperv.c +++ b/drivers/pci/host/pci-hyperv.c | |||
@@ -985,9 +985,7 @@ static u32 hv_compose_msi_req_v1( | |||
985 | int_pkt->wslot.slot = slot; | 985 | int_pkt->wslot.slot = slot; |
986 | int_pkt->int_desc.vector = vector; | 986 | int_pkt->int_desc.vector = vector; |
987 | int_pkt->int_desc.vector_count = 1; | 987 | int_pkt->int_desc.vector_count = 1; |
988 | int_pkt->int_desc.delivery_mode = | 988 | int_pkt->int_desc.delivery_mode = dest_Fixed; |
989 | (apic->irq_delivery_mode == dest_LowestPrio) ? | ||
990 | dest_LowestPrio : dest_Fixed; | ||
991 | 989 | ||
992 | /* | 990 | /* |
993 | * Create MSI w/ dummy vCPU set, overwritten by subsequent retarget in | 991 | * Create MSI w/ dummy vCPU set, overwritten by subsequent retarget in |
@@ -1008,9 +1006,7 @@ static u32 hv_compose_msi_req_v2( | |||
1008 | int_pkt->wslot.slot = slot; | 1006 | int_pkt->wslot.slot = slot; |
1009 | int_pkt->int_desc.vector = vector; | 1007 | int_pkt->int_desc.vector = vector; |
1010 | int_pkt->int_desc.vector_count = 1; | 1008 | int_pkt->int_desc.vector_count = 1; |
1011 | int_pkt->int_desc.delivery_mode = | 1009 | int_pkt->int_desc.delivery_mode = dest_Fixed; |
1012 | (apic->irq_delivery_mode == dest_LowestPrio) ? | ||
1013 | dest_LowestPrio : dest_Fixed; | ||
1014 | 1010 | ||
1015 | /* | 1011 | /* |
1016 | * Create MSI w/ dummy vCPU set targeting just one vCPU, overwritten | 1012 | * Create MSI w/ dummy vCPU set targeting just one vCPU, overwritten |