Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.11/0105-4.11.6-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2945 - (show annotations) (download)
Mon Jun 19 08:32:13 2017 UTC (6 years, 10 months ago) by niro
File size: 17606 byte(s)
-linux-4.11.6
1 diff --git a/Makefile b/Makefile
2 index 5b3a81d3262e..e46e99cbe5d1 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 11
8 -SUBLEVEL = 5
9 +SUBLEVEL = 6
10 EXTRAVERSION =
11 NAME = Fearless Coyote
12
13 diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
14 index f3920d684b0e..61d945297449 100644
15 --- a/arch/s390/kernel/entry.S
16 +++ b/arch/s390/kernel/entry.S
17 @@ -233,12 +233,17 @@ ENTRY(sie64a)
18 lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
19 .Lsie_done:
20 # some program checks are suppressing. C code (e.g. do_protection_exception)
21 -# will rewind the PSW by the ILC, which is 4 bytes in case of SIE. Other
22 -# instructions between sie64a and .Lsie_done should not cause program
23 -# interrupts. So lets use a nop (47 00 00 00) as a landing pad.
24 +# will rewind the PSW by the ILC, which is often 4 bytes in case of SIE. There
25 +# are some corner cases (e.g. runtime instrumentation) where ILC is unpredictable.
26 +# Other instructions between sie64a and .Lsie_done should not cause program
27 +# interrupts. So lets use 3 nops as a landing pad for all possible rewinds.
28 # See also .Lcleanup_sie
29 -.Lrewind_pad:
30 - nop 0
31 +.Lrewind_pad6:
32 + nopr 7
33 +.Lrewind_pad4:
34 + nopr 7
35 +.Lrewind_pad2:
36 + nopr 7
37 .globl sie_exit
38 sie_exit:
39 lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
40 @@ -251,7 +256,9 @@ sie_exit:
41 stg %r14,__SF_EMPTY+16(%r15) # set exit reason code
42 j sie_exit
43
44 - EX_TABLE(.Lrewind_pad,.Lsie_fault)
45 + EX_TABLE(.Lrewind_pad6,.Lsie_fault)
46 + EX_TABLE(.Lrewind_pad4,.Lsie_fault)
47 + EX_TABLE(.Lrewind_pad2,.Lsie_fault)
48 EX_TABLE(sie_exit,.Lsie_fault)
49 EXPORT_SYMBOL(sie64a)
50 EXPORT_SYMBOL(sie_exit)
51 diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c
52 index 8bf27323f7a3..b58233e4ed71 100644
53 --- a/arch/x86/platform/efi/efi-bgrt.c
54 +++ b/arch/x86/platform/efi/efi-bgrt.c
55 @@ -27,6 +27,26 @@ struct bmp_header {
56 u32 size;
57 } __packed;
58
59 +static bool efi_bgrt_addr_valid(u64 addr)
60 +{
61 + efi_memory_desc_t *md;
62 +
63 + for_each_efi_memory_desc(md) {
64 + u64 size;
65 + u64 end;
66 +
67 + if (md->type != EFI_BOOT_SERVICES_DATA)
68 + continue;
69 +
70 + size = md->num_pages << EFI_PAGE_SHIFT;
71 + end = md->phys_addr + size;
72 + if (addr >= md->phys_addr && addr < end)
73 + return true;
74 + }
75 +
76 + return false;
77 +}
78 +
79 void __init efi_bgrt_init(struct acpi_table_header *table)
80 {
81 void *image;
82 @@ -36,7 +56,7 @@ void __init efi_bgrt_init(struct acpi_table_header *table)
83 if (acpi_disabled)
84 return;
85
86 - if (!efi_enabled(EFI_BOOT))
87 + if (!efi_enabled(EFI_MEMMAP))
88 return;
89
90 if (table->length < sizeof(bgrt_tab)) {
91 @@ -65,6 +85,10 @@ void __init efi_bgrt_init(struct acpi_table_header *table)
92 goto out;
93 }
94
95 + if (!efi_bgrt_addr_valid(bgrt->image_address)) {
96 + pr_notice("Ignoring BGRT: invalid image address\n");
97 + goto out;
98 + }
99 image = early_memremap(bgrt->image_address, sizeof(bmp_header));
100 if (!image) {
101 pr_notice("Ignoring BGRT: failed to map image header memory\n");
102 diff --git a/arch/xtensa/include/asm/irq.h b/arch/xtensa/include/asm/irq.h
103 index f71f88ea7646..19707db966f1 100644
104 --- a/arch/xtensa/include/asm/irq.h
105 +++ b/arch/xtensa/include/asm/irq.h
106 @@ -29,7 +29,8 @@ static inline void variant_irq_disable(unsigned int irq) { }
107 # define PLATFORM_NR_IRQS 0
108 #endif
109 #define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
110 -#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS)
111 +#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS + 1)
112 +#define XTENSA_PIC_LINUX_IRQ(hwirq) ((hwirq) + 1)
113
114 #if VARIANT_NR_IRQS == 0
115 static inline void variant_init_irq(void) { }
116 diff --git a/arch/xtensa/kernel/irq.c b/arch/xtensa/kernel/irq.c
117 index a265edd6ac37..99341028cc77 100644
118 --- a/arch/xtensa/kernel/irq.c
119 +++ b/arch/xtensa/kernel/irq.c
120 @@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
121 {
122 int irq = irq_find_mapping(NULL, hwirq);
123
124 - if (hwirq >= NR_IRQS) {
125 - printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
126 - __func__, hwirq);
127 - }
128 -
129 #ifdef CONFIG_DEBUG_STACKOVERFLOW
130 /* Debugging check for stack overflow: is there less than 1KB free? */
131 {
132 diff --git a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
133 index dbeea2b440a1..1fda7e20dfcb 100644
134 --- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
135 +++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
136 @@ -24,16 +24,18 @@
137
138 /* Interrupt configuration. */
139
140 -#define PLATFORM_NR_IRQS 10
141 +#define PLATFORM_NR_IRQS 0
142
143 /* Default assignment of LX60 devices to external interrupts. */
144
145 #ifdef CONFIG_XTENSA_MX
146 #define DUART16552_INTNUM XCHAL_EXTINT3_NUM
147 #define OETH_IRQ XCHAL_EXTINT4_NUM
148 +#define C67X00_IRQ XCHAL_EXTINT8_NUM
149 #else
150 #define DUART16552_INTNUM XCHAL_EXTINT0_NUM
151 #define OETH_IRQ XCHAL_EXTINT1_NUM
152 +#define C67X00_IRQ XCHAL_EXTINT5_NUM
153 #endif
154
155 /*
156 @@ -63,5 +65,5 @@
157
158 #define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)
159 #define C67X00_SIZE 0x10
160 -#define C67X00_IRQ 5
161 +
162 #endif /* __XTENSA_XTAVNET_HARDWARE_H */
163 diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c
164 index 779be723eb2b..42285f35d313 100644
165 --- a/arch/xtensa/platforms/xtfpga/setup.c
166 +++ b/arch/xtensa/platforms/xtfpga/setup.c
167 @@ -175,8 +175,8 @@ static struct resource ethoc_res[] = {
168 .flags = IORESOURCE_MEM,
169 },
170 [2] = { /* IRQ number */
171 - .start = OETH_IRQ,
172 - .end = OETH_IRQ,
173 + .start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
174 + .end = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
175 .flags = IORESOURCE_IRQ,
176 },
177 };
178 @@ -213,8 +213,8 @@ static struct resource c67x00_res[] = {
179 .flags = IORESOURCE_MEM,
180 },
181 [1] = { /* IRQ number */
182 - .start = C67X00_IRQ,
183 - .end = C67X00_IRQ,
184 + .start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
185 + .end = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
186 .flags = IORESOURCE_IRQ,
187 },
188 };
189 @@ -247,7 +247,7 @@ static struct resource serial_resource = {
190 static struct plat_serial8250_port serial_platform_data[] = {
191 [0] = {
192 .mapbase = DUART16552_PADDR,
193 - .irq = DUART16552_INTNUM,
194 + .irq = XTENSA_PIC_LINUX_IRQ(DUART16552_INTNUM),
195 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
196 UPF_IOREMAP,
197 .iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
198 diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
199 index 93e7c1b32edd..5610cd537da7 100644
200 --- a/block/partitions/msdos.c
201 +++ b/block/partitions/msdos.c
202 @@ -300,6 +300,8 @@ static void parse_bsd(struct parsed_partitions *state,
203 continue;
204 bsd_start = le32_to_cpu(p->p_offset);
205 bsd_size = le32_to_cpu(p->p_size);
206 + if (memcmp(flavour, "bsd\0", 4) == 0)
207 + bsd_start += offset;
208 if (offset == bsd_start && size == bsd_size)
209 /* full parent partition, we have it already */
210 continue;
211 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
212 index 66dbb3c4c6d8..edacd31ae1a1 100644
213 --- a/drivers/gpu/drm/i915/i915_drv.c
214 +++ b/drivers/gpu/drm/i915/i915_drv.c
215 @@ -1206,6 +1206,15 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
216 goto out_free_priv;
217
218 pci_set_drvdata(pdev, &dev_priv->drm);
219 + /*
220 + * Disable the system suspend direct complete optimization, which can
221 + * leave the device suspended skipping the driver's suspend handlers
222 + * if the device was already runtime suspended. This is needed due to
223 + * the difference in our runtime and system suspend sequence and
224 + * becaue the HDA driver may require us to enable the audio power
225 + * domain during system suspend.
226 + */
227 + pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME;
228
229 ret = i915_driver_init_early(dev_priv, ent);
230 if (ret < 0)
231 @@ -1243,10 +1252,6 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
232
233 dev_priv->ipc_enabled = false;
234
235 - /* Everything is in place, we can now relax! */
236 - DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
237 - driver.name, driver.major, driver.minor, driver.patchlevel,
238 - driver.date, pci_name(pdev), dev_priv->drm.primary->index);
239 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG))
240 DRM_INFO("DRM_I915_DEBUG enabled\n");
241 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
242 diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
243 index 96e45a4d5441..6eb83684b97b 100644
244 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
245 +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
246 @@ -755,10 +755,6 @@ static bool gen8_ppgtt_clear_pt(struct i915_address_space *vm,
247 GEM_BUG_ON(pte_end > GEN8_PTES);
248
249 bitmap_clear(pt->used_ptes, pte, num_entries);
250 - if (USES_FULL_PPGTT(vm->i915)) {
251 - if (bitmap_empty(pt->used_ptes, GEN8_PTES))
252 - return true;
253 - }
254
255 pt_vaddr = kmap_px(pt);
256
257 @@ -798,9 +794,6 @@ static bool gen8_ppgtt_clear_pd(struct i915_address_space *vm,
258 }
259 }
260
261 - if (bitmap_empty(pd->used_pdes, I915_PDES))
262 - return true;
263 -
264 return false;
265 }
266
267 @@ -829,9 +822,6 @@ static bool gen8_ppgtt_clear_pdp(struct i915_address_space *vm,
268
269 mark_tlbs_dirty(ppgtt);
270
271 - if (bitmap_empty(pdp->used_pdpes, I915_PDPES_PER_PDP(dev_priv)))
272 - return true;
273 -
274 return false;
275 }
276
277 @@ -3292,7 +3282,8 @@ void i915_ggtt_enable_guc(struct drm_i915_private *i915)
278
279 void i915_ggtt_disable_guc(struct drm_i915_private *i915)
280 {
281 - i915->ggtt.invalidate = gen6_ggtt_invalidate;
282 + if (i915->ggtt.invalidate == guc_ggtt_invalidate)
283 + i915->ggtt.invalidate = gen6_ggtt_invalidate;
284 }
285
286 void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
287 diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
288 index 9bbbd4e83e3c..9bfe9520e7a8 100644
289 --- a/drivers/gpu/drm/i915/i915_pci.c
290 +++ b/drivers/gpu/drm/i915/i915_pci.c
291 @@ -389,7 +389,6 @@ static const struct intel_device_info intel_skylake_gt3_info = {
292 .has_hw_contexts = 1, \
293 .has_logical_ring_contexts = 1, \
294 .has_guc = 1, \
295 - .has_decoupled_mmio = 1, \
296 .has_aliasing_ppgtt = 1, \
297 .has_full_ppgtt = 1, \
298 .has_full_48bit_ppgtt = 1, \
299 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
300 index ed1f4f272b4f..5370dbec7a7d 100644
301 --- a/drivers/gpu/drm/i915/intel_display.c
302 +++ b/drivers/gpu/drm/i915/intel_display.c
303 @@ -13808,6 +13808,15 @@ static void update_scanline_offset(struct intel_crtc *crtc)
304 * type. For DP ports it behaves like most other platforms, but on HDMI
305 * there's an extra 1 line difference. So we need to add two instead of
306 * one to the value.
307 + *
308 + * On VLV/CHV DSI the scanline counter would appear to increment
309 + * approx. 1/3 of a scanline before start of vblank. Unfortunately
310 + * that means we can't tell whether we're in vblank or not while
311 + * we're on that particular line. We must still set scanline_offset
312 + * to 1 so that the vblank timestamps come out correct when we query
313 + * the scanline counter from within the vblank interrupt handler.
314 + * However if queried just before the start of vblank we'll get an
315 + * answer that's slightly in the future.
316 */
317 if (IS_GEN2(dev_priv)) {
318 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
319 diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
320 index 89fe5c8464df..96414399bed7 100644
321 --- a/drivers/gpu/drm/i915/intel_fbc.c
322 +++ b/drivers/gpu/drm/i915/intel_fbc.c
323 @@ -82,20 +82,10 @@ static unsigned int get_crtc_fence_y_offset(struct intel_crtc *crtc)
324 static void intel_fbc_get_plane_source_size(struct intel_fbc_state_cache *cache,
325 int *width, int *height)
326 {
327 - int w, h;
328 -
329 - if (drm_rotation_90_or_270(cache->plane.rotation)) {
330 - w = cache->plane.src_h;
331 - h = cache->plane.src_w;
332 - } else {
333 - w = cache->plane.src_w;
334 - h = cache->plane.src_h;
335 - }
336 -
337 if (width)
338 - *width = w;
339 + *width = cache->plane.src_w;
340 if (height)
341 - *height = h;
342 + *height = cache->plane.src_h;
343 }
344
345 static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv,
346 @@ -747,6 +737,11 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc,
347 ilk_pipe_pixel_rate(crtc_state);
348
349 cache->plane.rotation = plane_state->base.rotation;
350 + /*
351 + * Src coordinates are already rotated by 270 degrees for
352 + * the 90/270 degree plane rotation cases (to match the
353 + * GTT mapping), hence no need to account for rotation here.
354 + */
355 cache->plane.src_w = drm_rect_width(&plane_state->base.src) >> 16;
356 cache->plane.src_h = drm_rect_height(&plane_state->base.src) >> 16;
357 cache->plane.visible = plane_state->base.visible;
358 diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
359 index 6a29784d2b41..5132e0cdc684 100644
360 --- a/drivers/gpu/drm/i915/intel_pm.c
361 +++ b/drivers/gpu/drm/i915/intel_pm.c
362 @@ -4140,11 +4140,19 @@ skl_compute_wm(struct drm_atomic_state *state)
363 struct drm_crtc_state *cstate;
364 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
365 struct skl_wm_values *results = &intel_state->wm_results;
366 + struct drm_device *dev = state->dev;
367 struct skl_pipe_wm *pipe_wm;
368 bool changed = false;
369 int ret, i;
370
371 /*
372 + * When we distrust bios wm we always need to recompute to set the
373 + * expected DDB allocations for each CRTC.
374 + */
375 + if (to_i915(dev)->wm.distrust_bios_wm)
376 + changed = true;
377 +
378 + /*
379 * If this transaction isn't actually touching any CRTC's, don't
380 * bother with watermark calculation. Note that if we pass this
381 * test, we're guaranteed to hold at least one CRTC state mutex,
382 @@ -4154,6 +4162,7 @@ skl_compute_wm(struct drm_atomic_state *state)
383 */
384 for_each_crtc_in_state(state, crtc, cstate, i)
385 changed = true;
386 +
387 if (!changed)
388 return 0;
389
390 diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
391 index 9481ca9a3ae7..59d792b127b9 100644
392 --- a/drivers/gpu/drm/i915/intel_sprite.c
393 +++ b/drivers/gpu/drm/i915/intel_sprite.c
394 @@ -81,10 +81,13 @@ int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
395 */
396 void intel_pipe_update_start(struct intel_crtc *crtc)
397 {
398 + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
399 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
400 long timeout = msecs_to_jiffies_timeout(1);
401 int scanline, min, max, vblank_start;
402 wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
403 + bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
404 + intel_crtc_has_type(crtc->config, INTEL_OUTPUT_DSI);
405 DEFINE_WAIT(wait);
406
407 vblank_start = adjusted_mode->crtc_vblank_start;
408 @@ -136,6 +139,24 @@ void intel_pipe_update_start(struct intel_crtc *crtc)
409
410 drm_crtc_vblank_put(&crtc->base);
411
412 + /*
413 + * On VLV/CHV DSI the scanline counter would appear to
414 + * increment approx. 1/3 of a scanline before start of vblank.
415 + * The registers still get latched at start of vblank however.
416 + * This means we must not write any registers on the first
417 + * line of vblank (since not the whole line is actually in
418 + * vblank). And unfortunately we can't use the interrupt to
419 + * wait here since it will fire too soon. We could use the
420 + * frame start interrupt instead since it will fire after the
421 + * critical scanline, but that would require more changes
422 + * in the interrupt code. So for now we'll just do the nasty
423 + * thing and poll for the bad scanline to pass us by.
424 + *
425 + * FIXME figure out if BXT+ DSI suffers from this as well
426 + */
427 + while (need_vlv_dsi_wa && scanline == vblank_start)
428 + scanline = intel_get_crtc_scanline(crtc);
429 +
430 crtc->debug.scanline_start = scanline;
431 crtc->debug.start_vbl_time = ktime_get();
432 crtc->debug.start_vbl_count = intel_crtc_get_vblank_counter(crtc);
433 diff --git a/drivers/irqchip/irq-xtensa-mx.c b/drivers/irqchip/irq-xtensa-mx.c
434 index bb3ac5fe5846..72a391e01011 100644
435 --- a/drivers/irqchip/irq-xtensa-mx.c
436 +++ b/drivers/irqchip/irq-xtensa-mx.c
437 @@ -142,7 +142,7 @@ static struct irq_chip xtensa_mx_irq_chip = {
438 int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
439 {
440 struct irq_domain *root_domain =
441 - irq_domain_add_legacy(NULL, NR_IRQS, 0, 0,
442 + irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
443 &xtensa_mx_irq_domain_ops,
444 &xtensa_mx_irq_chip);
445 irq_set_default_host(root_domain);
446 diff --git a/drivers/irqchip/irq-xtensa-pic.c b/drivers/irqchip/irq-xtensa-pic.c
447 index 472ae1770964..f728755fa292 100644
448 --- a/drivers/irqchip/irq-xtensa-pic.c
449 +++ b/drivers/irqchip/irq-xtensa-pic.c
450 @@ -89,7 +89,7 @@ static struct irq_chip xtensa_irq_chip = {
451 int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent)
452 {
453 struct irq_domain *root_domain =
454 - irq_domain_add_legacy(NULL, NR_IRQS, 0, 0,
455 + irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
456 &xtensa_irq_domain_ops, &xtensa_irq_chip);
457 irq_set_default_host(root_domain);
458 return 0;
459 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
460 index d35c0162f9f2..0f6f9a97a81c 100644
461 --- a/drivers/pci/pci.c
462 +++ b/drivers/pci/pci.c
463 @@ -2142,7 +2142,8 @@ bool pci_dev_keep_suspended(struct pci_dev *pci_dev)
464
465 if (!pm_runtime_suspended(dev)
466 || pci_target_state(pci_dev) != pci_dev->current_state
467 - || platform_pci_need_resume(pci_dev))
468 + || platform_pci_need_resume(pci_dev)
469 + || (pci_dev->dev_flags & PCI_DEV_FLAGS_NEEDS_RESUME))
470 return false;
471
472 /*
473 diff --git a/include/linux/pci.h b/include/linux/pci.h
474 index eb3da1a04e6c..b2d5580cd9e2 100644
475 --- a/include/linux/pci.h
476 +++ b/include/linux/pci.h
477 @@ -178,6 +178,11 @@ enum pci_dev_flags {
478 PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
479 /* Get VPD from function 0 VPD */
480 PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
481 + /*
482 + * Resume before calling the driver's system suspend hooks, disabling
483 + * the direct_complete optimization.
484 + */
485 + PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
486 };
487
488 enum pci_irq_reroute_variant {