]> Git Repo - J-linux.git/blob - drivers/vfio/pci/vfio_pci_core.c
scsi: zfcp: Trace when request remove fails after qdio send fails
[J-linux.git] / drivers / vfio / pci / vfio_pci_core.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
4  *     Author: Alex Williamson <[email protected]>
5  *
6  * Derived from original vfio:
7  * Copyright 2010 Cisco Systems, Inc.  All rights reserved.
8  * Author: Tom Lyon, [email protected]
9  */
10
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13 #include <linux/aperture.h>
14 #include <linux/device.h>
15 #include <linux/eventfd.h>
16 #include <linux/file.h>
17 #include <linux/interrupt.h>
18 #include <linux/iommu.h>
19 #include <linux/module.h>
20 #include <linux/mutex.h>
21 #include <linux/notifier.h>
22 #include <linux/pci.h>
23 #include <linux/pm_runtime.h>
24 #include <linux/slab.h>
25 #include <linux/types.h>
26 #include <linux/uaccess.h>
27 #include <linux/vgaarb.h>
28 #include <linux/nospec.h>
29 #include <linux/sched/mm.h>
30 #if IS_ENABLED(CONFIG_EEH)
31 #include <asm/eeh.h>
32 #endif
33
34 #include "vfio_pci_priv.h"
35
36 #define DRIVER_AUTHOR   "Alex Williamson <[email protected]>"
37 #define DRIVER_DESC "core driver for VFIO based PCI devices"
38
39 static bool nointxmask;
40 static bool disable_vga;
41 static bool disable_idle_d3;
42
43 /* List of PF's that vfio_pci_core_sriov_configure() has been called on */
44 static DEFINE_MUTEX(vfio_pci_sriov_pfs_mutex);
45 static LIST_HEAD(vfio_pci_sriov_pfs);
46
47 struct vfio_pci_dummy_resource {
48         struct resource         resource;
49         int                     index;
50         struct list_head        res_next;
51 };
52
53 struct vfio_pci_vf_token {
54         struct mutex            lock;
55         uuid_t                  uuid;
56         int                     users;
57 };
58
59 struct vfio_pci_mmap_vma {
60         struct vm_area_struct   *vma;
61         struct list_head        vma_next;
62 };
63
64 static inline bool vfio_vga_disabled(void)
65 {
66 #ifdef CONFIG_VFIO_PCI_VGA
67         return disable_vga;
68 #else
69         return true;
70 #endif
71 }
72
73 /*
74  * Our VGA arbiter participation is limited since we don't know anything
75  * about the device itself.  However, if the device is the only VGA device
76  * downstream of a bridge and VFIO VGA support is disabled, then we can
77  * safely return legacy VGA IO and memory as not decoded since the user
78  * has no way to get to it and routing can be disabled externally at the
79  * bridge.
80  */
81 static unsigned int vfio_pci_set_decode(struct pci_dev *pdev, bool single_vga)
82 {
83         struct pci_dev *tmp = NULL;
84         unsigned char max_busnr;
85         unsigned int decodes;
86
87         if (single_vga || !vfio_vga_disabled() || pci_is_root_bus(pdev->bus))
88                 return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM |
89                        VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
90
91         max_busnr = pci_bus_max_busnr(pdev->bus);
92         decodes = VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
93
94         while ((tmp = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, tmp)) != NULL) {
95                 if (tmp == pdev ||
96                     pci_domain_nr(tmp->bus) != pci_domain_nr(pdev->bus) ||
97                     pci_is_root_bus(tmp->bus))
98                         continue;
99
100                 if (tmp->bus->number >= pdev->bus->number &&
101                     tmp->bus->number <= max_busnr) {
102                         pci_dev_put(tmp);
103                         decodes |= VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
104                         break;
105                 }
106         }
107
108         return decodes;
109 }
110
111 static void vfio_pci_probe_mmaps(struct vfio_pci_core_device *vdev)
112 {
113         struct resource *res;
114         int i;
115         struct vfio_pci_dummy_resource *dummy_res;
116
117         for (i = 0; i < PCI_STD_NUM_BARS; i++) {
118                 int bar = i + PCI_STD_RESOURCES;
119
120                 res = &vdev->pdev->resource[bar];
121
122                 if (!IS_ENABLED(CONFIG_VFIO_PCI_MMAP))
123                         goto no_mmap;
124
125                 if (!(res->flags & IORESOURCE_MEM))
126                         goto no_mmap;
127
128                 /*
129                  * The PCI core shouldn't set up a resource with a
130                  * type but zero size. But there may be bugs that
131                  * cause us to do that.
132                  */
133                 if (!resource_size(res))
134                         goto no_mmap;
135
136                 if (resource_size(res) >= PAGE_SIZE) {
137                         vdev->bar_mmap_supported[bar] = true;
138                         continue;
139                 }
140
141                 if (!(res->start & ~PAGE_MASK)) {
142                         /*
143                          * Add a dummy resource to reserve the remainder
144                          * of the exclusive page in case that hot-add
145                          * device's bar is assigned into it.
146                          */
147                         dummy_res = kzalloc(sizeof(*dummy_res), GFP_KERNEL);
148                         if (dummy_res == NULL)
149                                 goto no_mmap;
150
151                         dummy_res->resource.name = "vfio sub-page reserved";
152                         dummy_res->resource.start = res->end + 1;
153                         dummy_res->resource.end = res->start + PAGE_SIZE - 1;
154                         dummy_res->resource.flags = res->flags;
155                         if (request_resource(res->parent,
156                                                 &dummy_res->resource)) {
157                                 kfree(dummy_res);
158                                 goto no_mmap;
159                         }
160                         dummy_res->index = bar;
161                         list_add(&dummy_res->res_next,
162                                         &vdev->dummy_resources_list);
163                         vdev->bar_mmap_supported[bar] = true;
164                         continue;
165                 }
166                 /*
167                  * Here we don't handle the case when the BAR is not page
168                  * aligned because we can't expect the BAR will be
169                  * assigned into the same location in a page in guest
170                  * when we passthrough the BAR. And it's hard to access
171                  * this BAR in userspace because we have no way to get
172                  * the BAR's location in a page.
173                  */
174 no_mmap:
175                 vdev->bar_mmap_supported[bar] = false;
176         }
177 }
178
179 struct vfio_pci_group_info;
180 static void vfio_pci_dev_set_try_reset(struct vfio_device_set *dev_set);
181 static int vfio_pci_dev_set_hot_reset(struct vfio_device_set *dev_set,
182                                       struct vfio_pci_group_info *groups);
183
184 /*
185  * INTx masking requires the ability to disable INTx signaling via PCI_COMMAND
186  * _and_ the ability detect when the device is asserting INTx via PCI_STATUS.
187  * If a device implements the former but not the latter we would typically
188  * expect broken_intx_masking be set and require an exclusive interrupt.
189  * However since we do have control of the device's ability to assert INTx,
190  * we can instead pretend that the device does not implement INTx, virtualizing
191  * the pin register to report zero and maintaining DisINTx set on the host.
192  */
193 static bool vfio_pci_nointx(struct pci_dev *pdev)
194 {
195         switch (pdev->vendor) {
196         case PCI_VENDOR_ID_INTEL:
197                 switch (pdev->device) {
198                 /* All i40e (XL710/X710/XXV710) 10/20/25/40GbE NICs */
199                 case 0x1572:
200                 case 0x1574:
201                 case 0x1580 ... 0x1581:
202                 case 0x1583 ... 0x158b:
203                 case 0x37d0 ... 0x37d2:
204                 /* X550 */
205                 case 0x1563:
206                         return true;
207                 default:
208                         return false;
209                 }
210         }
211
212         return false;
213 }
214
215 static void vfio_pci_probe_power_state(struct vfio_pci_core_device *vdev)
216 {
217         struct pci_dev *pdev = vdev->pdev;
218         u16 pmcsr;
219
220         if (!pdev->pm_cap)
221                 return;
222
223         pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &pmcsr);
224
225         vdev->needs_pm_restore = !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET);
226 }
227
228 /*
229  * pci_set_power_state() wrapper handling devices which perform a soft reset on
230  * D3->D0 transition.  Save state prior to D0/1/2->D3, stash it on the vdev,
231  * restore when returned to D0.  Saved separately from pci_saved_state for use
232  * by PM capability emulation and separately from pci_dev internal saved state
233  * to avoid it being overwritten and consumed around other resets.
234  */
235 int vfio_pci_set_power_state(struct vfio_pci_core_device *vdev, pci_power_t state)
236 {
237         struct pci_dev *pdev = vdev->pdev;
238         bool needs_restore = false, needs_save = false;
239         int ret;
240
241         /* Prevent changing power state for PFs with VFs enabled */
242         if (pci_num_vf(pdev) && state > PCI_D0)
243                 return -EBUSY;
244
245         if (vdev->needs_pm_restore) {
246                 if (pdev->current_state < PCI_D3hot && state >= PCI_D3hot) {
247                         pci_save_state(pdev);
248                         needs_save = true;
249                 }
250
251                 if (pdev->current_state >= PCI_D3hot && state <= PCI_D0)
252                         needs_restore = true;
253         }
254
255         ret = pci_set_power_state(pdev, state);
256
257         if (!ret) {
258                 /* D3 might be unsupported via quirk, skip unless in D3 */
259                 if (needs_save && pdev->current_state >= PCI_D3hot) {
260                         /*
261                          * The current PCI state will be saved locally in
262                          * 'pm_save' during the D3hot transition. When the
263                          * device state is changed to D0 again with the current
264                          * function, then pci_store_saved_state() will restore
265                          * the state and will free the memory pointed by
266                          * 'pm_save'. There are few cases where the PCI power
267                          * state can be changed to D0 without the involvement
268                          * of the driver. For these cases, free the earlier
269                          * allocated memory first before overwriting 'pm_save'
270                          * to prevent the memory leak.
271                          */
272                         kfree(vdev->pm_save);
273                         vdev->pm_save = pci_store_saved_state(pdev);
274                 } else if (needs_restore) {
275                         pci_load_and_free_saved_state(pdev, &vdev->pm_save);
276                         pci_restore_state(pdev);
277                 }
278         }
279
280         return ret;
281 }
282
283 static int vfio_pci_runtime_pm_entry(struct vfio_pci_core_device *vdev,
284                                      struct eventfd_ctx *efdctx)
285 {
286         /*
287          * The vdev power related flags are protected with 'memory_lock'
288          * semaphore.
289          */
290         vfio_pci_zap_and_down_write_memory_lock(vdev);
291         if (vdev->pm_runtime_engaged) {
292                 up_write(&vdev->memory_lock);
293                 return -EINVAL;
294         }
295
296         vdev->pm_runtime_engaged = true;
297         vdev->pm_wake_eventfd_ctx = efdctx;
298         pm_runtime_put_noidle(&vdev->pdev->dev);
299         up_write(&vdev->memory_lock);
300
301         return 0;
302 }
303
304 static int vfio_pci_core_pm_entry(struct vfio_device *device, u32 flags,
305                                   void __user *arg, size_t argsz)
306 {
307         struct vfio_pci_core_device *vdev =
308                 container_of(device, struct vfio_pci_core_device, vdev);
309         int ret;
310
311         ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET, 0);
312         if (ret != 1)
313                 return ret;
314
315         /*
316          * Inside vfio_pci_runtime_pm_entry(), only the runtime PM usage count
317          * will be decremented. The pm_runtime_put() will be invoked again
318          * while returning from the ioctl and then the device can go into
319          * runtime suspended state.
320          */
321         return vfio_pci_runtime_pm_entry(vdev, NULL);
322 }
323
324 static int vfio_pci_core_pm_entry_with_wakeup(
325         struct vfio_device *device, u32 flags,
326         struct vfio_device_low_power_entry_with_wakeup __user *arg,
327         size_t argsz)
328 {
329         struct vfio_pci_core_device *vdev =
330                 container_of(device, struct vfio_pci_core_device, vdev);
331         struct vfio_device_low_power_entry_with_wakeup entry;
332         struct eventfd_ctx *efdctx;
333         int ret;
334
335         ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET,
336                                  sizeof(entry));
337         if (ret != 1)
338                 return ret;
339
340         if (copy_from_user(&entry, arg, sizeof(entry)))
341                 return -EFAULT;
342
343         if (entry.wakeup_eventfd < 0)
344                 return -EINVAL;
345
346         efdctx = eventfd_ctx_fdget(entry.wakeup_eventfd);
347         if (IS_ERR(efdctx))
348                 return PTR_ERR(efdctx);
349
350         ret = vfio_pci_runtime_pm_entry(vdev, efdctx);
351         if (ret)
352                 eventfd_ctx_put(efdctx);
353
354         return ret;
355 }
356
357 static void __vfio_pci_runtime_pm_exit(struct vfio_pci_core_device *vdev)
358 {
359         if (vdev->pm_runtime_engaged) {
360                 vdev->pm_runtime_engaged = false;
361                 pm_runtime_get_noresume(&vdev->pdev->dev);
362
363                 if (vdev->pm_wake_eventfd_ctx) {
364                         eventfd_ctx_put(vdev->pm_wake_eventfd_ctx);
365                         vdev->pm_wake_eventfd_ctx = NULL;
366                 }
367         }
368 }
369
370 static void vfio_pci_runtime_pm_exit(struct vfio_pci_core_device *vdev)
371 {
372         /*
373          * The vdev power related flags are protected with 'memory_lock'
374          * semaphore.
375          */
376         down_write(&vdev->memory_lock);
377         __vfio_pci_runtime_pm_exit(vdev);
378         up_write(&vdev->memory_lock);
379 }
380
381 static int vfio_pci_core_pm_exit(struct vfio_device *device, u32 flags,
382                                  void __user *arg, size_t argsz)
383 {
384         struct vfio_pci_core_device *vdev =
385                 container_of(device, struct vfio_pci_core_device, vdev);
386         int ret;
387
388         ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET, 0);
389         if (ret != 1)
390                 return ret;
391
392         /*
393          * The device is always in the active state here due to pm wrappers
394          * around ioctls. If the device had entered a low power state and
395          * pm_wake_eventfd_ctx is valid, vfio_pci_core_runtime_resume() has
396          * already signaled the eventfd and exited low power mode itself.
397          * pm_runtime_engaged protects the redundant call here.
398          */
399         vfio_pci_runtime_pm_exit(vdev);
400         return 0;
401 }
402
403 #ifdef CONFIG_PM
404 static int vfio_pci_core_runtime_suspend(struct device *dev)
405 {
406         struct vfio_pci_core_device *vdev = dev_get_drvdata(dev);
407
408         down_write(&vdev->memory_lock);
409         /*
410          * The user can move the device into D3hot state before invoking
411          * power management IOCTL. Move the device into D0 state here and then
412          * the pci-driver core runtime PM suspend function will move the device
413          * into the low power state. Also, for the devices which have
414          * NoSoftRst-, it will help in restoring the original state
415          * (saved locally in 'vdev->pm_save').
416          */
417         vfio_pci_set_power_state(vdev, PCI_D0);
418         up_write(&vdev->memory_lock);
419
420         /*
421          * If INTx is enabled, then mask INTx before going into the runtime
422          * suspended state and unmask the same in the runtime resume.
423          * If INTx has already been masked by the user, then
424          * vfio_pci_intx_mask() will return false and in that case, INTx
425          * should not be unmasked in the runtime resume.
426          */
427         vdev->pm_intx_masked = ((vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX) &&
428                                 vfio_pci_intx_mask(vdev));
429
430         return 0;
431 }
432
433 static int vfio_pci_core_runtime_resume(struct device *dev)
434 {
435         struct vfio_pci_core_device *vdev = dev_get_drvdata(dev);
436
437         /*
438          * Resume with a pm_wake_eventfd_ctx signals the eventfd and exit
439          * low power mode.
440          */
441         down_write(&vdev->memory_lock);
442         if (vdev->pm_wake_eventfd_ctx) {
443                 eventfd_signal(vdev->pm_wake_eventfd_ctx, 1);
444                 __vfio_pci_runtime_pm_exit(vdev);
445         }
446         up_write(&vdev->memory_lock);
447
448         if (vdev->pm_intx_masked)
449                 vfio_pci_intx_unmask(vdev);
450
451         return 0;
452 }
453 #endif /* CONFIG_PM */
454
455 /*
456  * The pci-driver core runtime PM routines always save the device state
457  * before going into suspended state. If the device is going into low power
458  * state with only with runtime PM ops, then no explicit handling is needed
459  * for the devices which have NoSoftRst-.
460  */
461 static const struct dev_pm_ops vfio_pci_core_pm_ops = {
462         SET_RUNTIME_PM_OPS(vfio_pci_core_runtime_suspend,
463                            vfio_pci_core_runtime_resume,
464                            NULL)
465 };
466
467 int vfio_pci_core_enable(struct vfio_pci_core_device *vdev)
468 {
469         struct pci_dev *pdev = vdev->pdev;
470         int ret;
471         u16 cmd;
472         u8 msix_pos;
473
474         if (!disable_idle_d3) {
475                 ret = pm_runtime_resume_and_get(&pdev->dev);
476                 if (ret < 0)
477                         return ret;
478         }
479
480         /* Don't allow our initial saved state to include busmaster */
481         pci_clear_master(pdev);
482
483         ret = pci_enable_device(pdev);
484         if (ret)
485                 goto out_power;
486
487         /* If reset fails because of the device lock, fail this path entirely */
488         ret = pci_try_reset_function(pdev);
489         if (ret == -EAGAIN)
490                 goto out_disable_device;
491
492         vdev->reset_works = !ret;
493         pci_save_state(pdev);
494         vdev->pci_saved_state = pci_store_saved_state(pdev);
495         if (!vdev->pci_saved_state)
496                 pci_dbg(pdev, "%s: Couldn't store saved state\n", __func__);
497
498         if (likely(!nointxmask)) {
499                 if (vfio_pci_nointx(pdev)) {
500                         pci_info(pdev, "Masking broken INTx support\n");
501                         vdev->nointx = true;
502                         pci_intx(pdev, 0);
503                 } else
504                         vdev->pci_2_3 = pci_intx_mask_supported(pdev);
505         }
506
507         pci_read_config_word(pdev, PCI_COMMAND, &cmd);
508         if (vdev->pci_2_3 && (cmd & PCI_COMMAND_INTX_DISABLE)) {
509                 cmd &= ~PCI_COMMAND_INTX_DISABLE;
510                 pci_write_config_word(pdev, PCI_COMMAND, cmd);
511         }
512
513         ret = vfio_pci_zdev_open_device(vdev);
514         if (ret)
515                 goto out_free_state;
516
517         ret = vfio_config_init(vdev);
518         if (ret)
519                 goto out_free_zdev;
520
521         msix_pos = pdev->msix_cap;
522         if (msix_pos) {
523                 u16 flags;
524                 u32 table;
525
526                 pci_read_config_word(pdev, msix_pos + PCI_MSIX_FLAGS, &flags);
527                 pci_read_config_dword(pdev, msix_pos + PCI_MSIX_TABLE, &table);
528
529                 vdev->msix_bar = table & PCI_MSIX_TABLE_BIR;
530                 vdev->msix_offset = table & PCI_MSIX_TABLE_OFFSET;
531                 vdev->msix_size = ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) * 16;
532         } else
533                 vdev->msix_bar = 0xFF;
534
535         if (!vfio_vga_disabled() && vfio_pci_is_vga(pdev))
536                 vdev->has_vga = true;
537
538
539         return 0;
540
541 out_free_zdev:
542         vfio_pci_zdev_close_device(vdev);
543 out_free_state:
544         kfree(vdev->pci_saved_state);
545         vdev->pci_saved_state = NULL;
546 out_disable_device:
547         pci_disable_device(pdev);
548 out_power:
549         if (!disable_idle_d3)
550                 pm_runtime_put(&pdev->dev);
551         return ret;
552 }
553 EXPORT_SYMBOL_GPL(vfio_pci_core_enable);
554
555 void vfio_pci_core_disable(struct vfio_pci_core_device *vdev)
556 {
557         struct pci_dev *pdev = vdev->pdev;
558         struct vfio_pci_dummy_resource *dummy_res, *tmp;
559         struct vfio_pci_ioeventfd *ioeventfd, *ioeventfd_tmp;
560         int i, bar;
561
562         /* For needs_reset */
563         lockdep_assert_held(&vdev->vdev.dev_set->lock);
564
565         /*
566          * This function can be invoked while the power state is non-D0.
567          * This non-D0 power state can be with or without runtime PM.
568          * vfio_pci_runtime_pm_exit() will internally increment the usage
569          * count corresponding to pm_runtime_put() called during low power
570          * feature entry and then pm_runtime_resume() will wake up the device,
571          * if the device has already gone into the suspended state. Otherwise,
572          * the vfio_pci_set_power_state() will change the device power state
573          * to D0.
574          */
575         vfio_pci_runtime_pm_exit(vdev);
576         pm_runtime_resume(&pdev->dev);
577
578         /*
579          * This function calls __pci_reset_function_locked() which internally
580          * can use pci_pm_reset() for the function reset. pci_pm_reset() will
581          * fail if the power state is non-D0. Also, for the devices which
582          * have NoSoftRst-, the reset function can cause the PCI config space
583          * reset without restoring the original state (saved locally in
584          * 'vdev->pm_save').
585          */
586         vfio_pci_set_power_state(vdev, PCI_D0);
587
588         /* Stop the device from further DMA */
589         pci_clear_master(pdev);
590
591         vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE |
592                                 VFIO_IRQ_SET_ACTION_TRIGGER,
593                                 vdev->irq_type, 0, 0, NULL);
594
595         /* Device closed, don't need mutex here */
596         list_for_each_entry_safe(ioeventfd, ioeventfd_tmp,
597                                  &vdev->ioeventfds_list, next) {
598                 vfio_virqfd_disable(&ioeventfd->virqfd);
599                 list_del(&ioeventfd->next);
600                 kfree(ioeventfd);
601         }
602         vdev->ioeventfds_nr = 0;
603
604         vdev->virq_disabled = false;
605
606         for (i = 0; i < vdev->num_regions; i++)
607                 vdev->region[i].ops->release(vdev, &vdev->region[i]);
608
609         vdev->num_regions = 0;
610         kfree(vdev->region);
611         vdev->region = NULL; /* don't krealloc a freed pointer */
612
613         vfio_config_free(vdev);
614
615         for (i = 0; i < PCI_STD_NUM_BARS; i++) {
616                 bar = i + PCI_STD_RESOURCES;
617                 if (!vdev->barmap[bar])
618                         continue;
619                 pci_iounmap(pdev, vdev->barmap[bar]);
620                 pci_release_selected_regions(pdev, 1 << bar);
621                 vdev->barmap[bar] = NULL;
622         }
623
624         list_for_each_entry_safe(dummy_res, tmp,
625                                  &vdev->dummy_resources_list, res_next) {
626                 list_del(&dummy_res->res_next);
627                 release_resource(&dummy_res->resource);
628                 kfree(dummy_res);
629         }
630
631         vdev->needs_reset = true;
632
633         vfio_pci_zdev_close_device(vdev);
634
635         /*
636          * If we have saved state, restore it.  If we can reset the device,
637          * even better.  Resetting with current state seems better than
638          * nothing, but saving and restoring current state without reset
639          * is just busy work.
640          */
641         if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) {
642                 pci_info(pdev, "%s: Couldn't reload saved state\n", __func__);
643
644                 if (!vdev->reset_works)
645                         goto out;
646
647                 pci_save_state(pdev);
648         }
649
650         /*
651          * Disable INTx and MSI, presumably to avoid spurious interrupts
652          * during reset.  Stolen from pci_reset_function()
653          */
654         pci_write_config_word(pdev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
655
656         /*
657          * Try to get the locks ourselves to prevent a deadlock. The
658          * success of this is dependent on being able to lock the device,
659          * which is not always possible.
660          * We can not use the "try" reset interface here, which will
661          * overwrite the previously restored configuration information.
662          */
663         if (vdev->reset_works && pci_dev_trylock(pdev)) {
664                 if (!__pci_reset_function_locked(pdev))
665                         vdev->needs_reset = false;
666                 pci_dev_unlock(pdev);
667         }
668
669         pci_restore_state(pdev);
670 out:
671         pci_disable_device(pdev);
672
673         vfio_pci_dev_set_try_reset(vdev->vdev.dev_set);
674
675         /* Put the pm-runtime usage counter acquired during enable */
676         if (!disable_idle_d3)
677                 pm_runtime_put(&pdev->dev);
678 }
679 EXPORT_SYMBOL_GPL(vfio_pci_core_disable);
680
681 void vfio_pci_core_close_device(struct vfio_device *core_vdev)
682 {
683         struct vfio_pci_core_device *vdev =
684                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
685
686         if (vdev->sriov_pf_core_dev) {
687                 mutex_lock(&vdev->sriov_pf_core_dev->vf_token->lock);
688                 WARN_ON(!vdev->sriov_pf_core_dev->vf_token->users);
689                 vdev->sriov_pf_core_dev->vf_token->users--;
690                 mutex_unlock(&vdev->sriov_pf_core_dev->vf_token->lock);
691         }
692 #if IS_ENABLED(CONFIG_EEH)
693         eeh_dev_release(vdev->pdev);
694 #endif
695         vfio_pci_core_disable(vdev);
696
697         mutex_lock(&vdev->igate);
698         if (vdev->err_trigger) {
699                 eventfd_ctx_put(vdev->err_trigger);
700                 vdev->err_trigger = NULL;
701         }
702         if (vdev->req_trigger) {
703                 eventfd_ctx_put(vdev->req_trigger);
704                 vdev->req_trigger = NULL;
705         }
706         mutex_unlock(&vdev->igate);
707 }
708 EXPORT_SYMBOL_GPL(vfio_pci_core_close_device);
709
710 void vfio_pci_core_finish_enable(struct vfio_pci_core_device *vdev)
711 {
712         vfio_pci_probe_mmaps(vdev);
713 #if IS_ENABLED(CONFIG_EEH)
714         eeh_dev_open(vdev->pdev);
715 #endif
716
717         if (vdev->sriov_pf_core_dev) {
718                 mutex_lock(&vdev->sriov_pf_core_dev->vf_token->lock);
719                 vdev->sriov_pf_core_dev->vf_token->users++;
720                 mutex_unlock(&vdev->sriov_pf_core_dev->vf_token->lock);
721         }
722 }
723 EXPORT_SYMBOL_GPL(vfio_pci_core_finish_enable);
724
725 static int vfio_pci_get_irq_count(struct vfio_pci_core_device *vdev, int irq_type)
726 {
727         if (irq_type == VFIO_PCI_INTX_IRQ_INDEX) {
728                 u8 pin;
729
730                 if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) ||
731                     vdev->nointx || vdev->pdev->is_virtfn)
732                         return 0;
733
734                 pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin);
735
736                 return pin ? 1 : 0;
737         } else if (irq_type == VFIO_PCI_MSI_IRQ_INDEX) {
738                 u8 pos;
739                 u16 flags;
740
741                 pos = vdev->pdev->msi_cap;
742                 if (pos) {
743                         pci_read_config_word(vdev->pdev,
744                                              pos + PCI_MSI_FLAGS, &flags);
745                         return 1 << ((flags & PCI_MSI_FLAGS_QMASK) >> 1);
746                 }
747         } else if (irq_type == VFIO_PCI_MSIX_IRQ_INDEX) {
748                 u8 pos;
749                 u16 flags;
750
751                 pos = vdev->pdev->msix_cap;
752                 if (pos) {
753                         pci_read_config_word(vdev->pdev,
754                                              pos + PCI_MSIX_FLAGS, &flags);
755
756                         return (flags & PCI_MSIX_FLAGS_QSIZE) + 1;
757                 }
758         } else if (irq_type == VFIO_PCI_ERR_IRQ_INDEX) {
759                 if (pci_is_pcie(vdev->pdev))
760                         return 1;
761         } else if (irq_type == VFIO_PCI_REQ_IRQ_INDEX) {
762                 return 1;
763         }
764
765         return 0;
766 }
767
768 static int vfio_pci_count_devs(struct pci_dev *pdev, void *data)
769 {
770         (*(int *)data)++;
771         return 0;
772 }
773
774 struct vfio_pci_fill_info {
775         int max;
776         int cur;
777         struct vfio_pci_dependent_device *devices;
778 };
779
780 static int vfio_pci_fill_devs(struct pci_dev *pdev, void *data)
781 {
782         struct vfio_pci_fill_info *fill = data;
783         struct iommu_group *iommu_group;
784
785         if (fill->cur == fill->max)
786                 return -EAGAIN; /* Something changed, try again */
787
788         iommu_group = iommu_group_get(&pdev->dev);
789         if (!iommu_group)
790                 return -EPERM; /* Cannot reset non-isolated devices */
791
792         fill->devices[fill->cur].group_id = iommu_group_id(iommu_group);
793         fill->devices[fill->cur].segment = pci_domain_nr(pdev->bus);
794         fill->devices[fill->cur].bus = pdev->bus->number;
795         fill->devices[fill->cur].devfn = pdev->devfn;
796         fill->cur++;
797         iommu_group_put(iommu_group);
798         return 0;
799 }
800
801 struct vfio_pci_group_info {
802         int count;
803         struct file **files;
804 };
805
806 static bool vfio_pci_dev_below_slot(struct pci_dev *pdev, struct pci_slot *slot)
807 {
808         for (; pdev; pdev = pdev->bus->self)
809                 if (pdev->bus == slot->bus)
810                         return (pdev->slot == slot);
811         return false;
812 }
813
814 struct vfio_pci_walk_info {
815         int (*fn)(struct pci_dev *pdev, void *data);
816         void *data;
817         struct pci_dev *pdev;
818         bool slot;
819         int ret;
820 };
821
822 static int vfio_pci_walk_wrapper(struct pci_dev *pdev, void *data)
823 {
824         struct vfio_pci_walk_info *walk = data;
825
826         if (!walk->slot || vfio_pci_dev_below_slot(pdev, walk->pdev->slot))
827                 walk->ret = walk->fn(pdev, walk->data);
828
829         return walk->ret;
830 }
831
832 static int vfio_pci_for_each_slot_or_bus(struct pci_dev *pdev,
833                                          int (*fn)(struct pci_dev *,
834                                                    void *data), void *data,
835                                          bool slot)
836 {
837         struct vfio_pci_walk_info walk = {
838                 .fn = fn, .data = data, .pdev = pdev, .slot = slot, .ret = 0,
839         };
840
841         pci_walk_bus(pdev->bus, vfio_pci_walk_wrapper, &walk);
842
843         return walk.ret;
844 }
845
846 static int msix_mmappable_cap(struct vfio_pci_core_device *vdev,
847                               struct vfio_info_cap *caps)
848 {
849         struct vfio_info_cap_header header = {
850                 .id = VFIO_REGION_INFO_CAP_MSIX_MAPPABLE,
851                 .version = 1
852         };
853
854         return vfio_info_add_capability(caps, &header, sizeof(header));
855 }
856
857 int vfio_pci_core_register_dev_region(struct vfio_pci_core_device *vdev,
858                                       unsigned int type, unsigned int subtype,
859                                       const struct vfio_pci_regops *ops,
860                                       size_t size, u32 flags, void *data)
861 {
862         struct vfio_pci_region *region;
863
864         region = krealloc(vdev->region,
865                           (vdev->num_regions + 1) * sizeof(*region),
866                           GFP_KERNEL);
867         if (!region)
868                 return -ENOMEM;
869
870         vdev->region = region;
871         vdev->region[vdev->num_regions].type = type;
872         vdev->region[vdev->num_regions].subtype = subtype;
873         vdev->region[vdev->num_regions].ops = ops;
874         vdev->region[vdev->num_regions].size = size;
875         vdev->region[vdev->num_regions].flags = flags;
876         vdev->region[vdev->num_regions].data = data;
877
878         vdev->num_regions++;
879
880         return 0;
881 }
882 EXPORT_SYMBOL_GPL(vfio_pci_core_register_dev_region);
883
884 static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev,
885                                    struct vfio_device_info __user *arg)
886 {
887         unsigned long minsz = offsetofend(struct vfio_device_info, num_irqs);
888         struct vfio_device_info info;
889         struct vfio_info_cap caps = { .buf = NULL, .size = 0 };
890         unsigned long capsz;
891         int ret;
892
893         /* For backward compatibility, cannot require this */
894         capsz = offsetofend(struct vfio_iommu_type1_info, cap_offset);
895
896         if (copy_from_user(&info, arg, minsz))
897                 return -EFAULT;
898
899         if (info.argsz < minsz)
900                 return -EINVAL;
901
902         if (info.argsz >= capsz) {
903                 minsz = capsz;
904                 info.cap_offset = 0;
905         }
906
907         info.flags = VFIO_DEVICE_FLAGS_PCI;
908
909         if (vdev->reset_works)
910                 info.flags |= VFIO_DEVICE_FLAGS_RESET;
911
912         info.num_regions = VFIO_PCI_NUM_REGIONS + vdev->num_regions;
913         info.num_irqs = VFIO_PCI_NUM_IRQS;
914
915         ret = vfio_pci_info_zdev_add_caps(vdev, &caps);
916         if (ret && ret != -ENODEV) {
917                 pci_warn(vdev->pdev,
918                          "Failed to setup zPCI info capabilities\n");
919                 return ret;
920         }
921
922         if (caps.size) {
923                 info.flags |= VFIO_DEVICE_FLAGS_CAPS;
924                 if (info.argsz < sizeof(info) + caps.size) {
925                         info.argsz = sizeof(info) + caps.size;
926                 } else {
927                         vfio_info_cap_shift(&caps, sizeof(info));
928                         if (copy_to_user(arg + 1, caps.buf, caps.size)) {
929                                 kfree(caps.buf);
930                                 return -EFAULT;
931                         }
932                         info.cap_offset = sizeof(*arg);
933                 }
934
935                 kfree(caps.buf);
936         }
937
938         return copy_to_user(arg, &info, minsz) ? -EFAULT : 0;
939 }
940
941 static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev,
942                                           struct vfio_region_info __user *arg)
943 {
944         unsigned long minsz = offsetofend(struct vfio_region_info, offset);
945         struct pci_dev *pdev = vdev->pdev;
946         struct vfio_region_info info;
947         struct vfio_info_cap caps = { .buf = NULL, .size = 0 };
948         int i, ret;
949
950         if (copy_from_user(&info, arg, minsz))
951                 return -EFAULT;
952
953         if (info.argsz < minsz)
954                 return -EINVAL;
955
956         switch (info.index) {
957         case VFIO_PCI_CONFIG_REGION_INDEX:
958                 info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
959                 info.size = pdev->cfg_size;
960                 info.flags = VFIO_REGION_INFO_FLAG_READ |
961                              VFIO_REGION_INFO_FLAG_WRITE;
962                 break;
963         case VFIO_PCI_BAR0_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX:
964                 info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
965                 info.size = pci_resource_len(pdev, info.index);
966                 if (!info.size) {
967                         info.flags = 0;
968                         break;
969                 }
970
971                 info.flags = VFIO_REGION_INFO_FLAG_READ |
972                              VFIO_REGION_INFO_FLAG_WRITE;
973                 if (vdev->bar_mmap_supported[info.index]) {
974                         info.flags |= VFIO_REGION_INFO_FLAG_MMAP;
975                         if (info.index == vdev->msix_bar) {
976                                 ret = msix_mmappable_cap(vdev, &caps);
977                                 if (ret)
978                                         return ret;
979                         }
980                 }
981
982                 break;
983         case VFIO_PCI_ROM_REGION_INDEX: {
984                 void __iomem *io;
985                 size_t size;
986                 u16 cmd;
987
988                 info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
989                 info.flags = 0;
990
991                 /* Report the BAR size, not the ROM size */
992                 info.size = pci_resource_len(pdev, info.index);
993                 if (!info.size) {
994                         /* Shadow ROMs appear as PCI option ROMs */
995                         if (pdev->resource[PCI_ROM_RESOURCE].flags &
996                             IORESOURCE_ROM_SHADOW)
997                                 info.size = 0x20000;
998                         else
999                                 break;
1000                 }
1001
1002                 /*
1003                  * Is it really there?  Enable memory decode for implicit access
1004                  * in pci_map_rom().
1005                  */
1006                 cmd = vfio_pci_memory_lock_and_enable(vdev);
1007                 io = pci_map_rom(pdev, &size);
1008                 if (io) {
1009                         info.flags = VFIO_REGION_INFO_FLAG_READ;
1010                         pci_unmap_rom(pdev, io);
1011                 } else {
1012                         info.size = 0;
1013                 }
1014                 vfio_pci_memory_unlock_and_restore(vdev, cmd);
1015
1016                 break;
1017         }
1018         case VFIO_PCI_VGA_REGION_INDEX:
1019                 if (!vdev->has_vga)
1020                         return -EINVAL;
1021
1022                 info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
1023                 info.size = 0xc0000;
1024                 info.flags = VFIO_REGION_INFO_FLAG_READ |
1025                              VFIO_REGION_INFO_FLAG_WRITE;
1026
1027                 break;
1028         default: {
1029                 struct vfio_region_info_cap_type cap_type = {
1030                         .header.id = VFIO_REGION_INFO_CAP_TYPE,
1031                         .header.version = 1
1032                 };
1033
1034                 if (info.index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions)
1035                         return -EINVAL;
1036                 info.index = array_index_nospec(
1037                         info.index, VFIO_PCI_NUM_REGIONS + vdev->num_regions);
1038
1039                 i = info.index - VFIO_PCI_NUM_REGIONS;
1040
1041                 info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
1042                 info.size = vdev->region[i].size;
1043                 info.flags = vdev->region[i].flags;
1044
1045                 cap_type.type = vdev->region[i].type;
1046                 cap_type.subtype = vdev->region[i].subtype;
1047
1048                 ret = vfio_info_add_capability(&caps, &cap_type.header,
1049                                                sizeof(cap_type));
1050                 if (ret)
1051                         return ret;
1052
1053                 if (vdev->region[i].ops->add_capability) {
1054                         ret = vdev->region[i].ops->add_capability(
1055                                 vdev, &vdev->region[i], &caps);
1056                         if (ret)
1057                                 return ret;
1058                 }
1059         }
1060         }
1061
1062         if (caps.size) {
1063                 info.flags |= VFIO_REGION_INFO_FLAG_CAPS;
1064                 if (info.argsz < sizeof(info) + caps.size) {
1065                         info.argsz = sizeof(info) + caps.size;
1066                         info.cap_offset = 0;
1067                 } else {
1068                         vfio_info_cap_shift(&caps, sizeof(info));
1069                         if (copy_to_user(arg + 1, caps.buf, caps.size)) {
1070                                 kfree(caps.buf);
1071                                 return -EFAULT;
1072                         }
1073                         info.cap_offset = sizeof(*arg);
1074                 }
1075
1076                 kfree(caps.buf);
1077         }
1078
1079         return copy_to_user(arg, &info, minsz) ? -EFAULT : 0;
1080 }
1081
1082 static int vfio_pci_ioctl_get_irq_info(struct vfio_pci_core_device *vdev,
1083                                        struct vfio_irq_info __user *arg)
1084 {
1085         unsigned long minsz = offsetofend(struct vfio_irq_info, count);
1086         struct vfio_irq_info info;
1087
1088         if (copy_from_user(&info, arg, minsz))
1089                 return -EFAULT;
1090
1091         if (info.argsz < minsz || info.index >= VFIO_PCI_NUM_IRQS)
1092                 return -EINVAL;
1093
1094         switch (info.index) {
1095         case VFIO_PCI_INTX_IRQ_INDEX ... VFIO_PCI_MSIX_IRQ_INDEX:
1096         case VFIO_PCI_REQ_IRQ_INDEX:
1097                 break;
1098         case VFIO_PCI_ERR_IRQ_INDEX:
1099                 if (pci_is_pcie(vdev->pdev))
1100                         break;
1101                 fallthrough;
1102         default:
1103                 return -EINVAL;
1104         }
1105
1106         info.flags = VFIO_IRQ_INFO_EVENTFD;
1107
1108         info.count = vfio_pci_get_irq_count(vdev, info.index);
1109
1110         if (info.index == VFIO_PCI_INTX_IRQ_INDEX)
1111                 info.flags |=
1112                         (VFIO_IRQ_INFO_MASKABLE | VFIO_IRQ_INFO_AUTOMASKED);
1113         else
1114                 info.flags |= VFIO_IRQ_INFO_NORESIZE;
1115
1116         return copy_to_user(arg, &info, minsz) ? -EFAULT : 0;
1117 }
1118
1119 static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev,
1120                                    struct vfio_irq_set __user *arg)
1121 {
1122         unsigned long minsz = offsetofend(struct vfio_irq_set, count);
1123         struct vfio_irq_set hdr;
1124         u8 *data = NULL;
1125         int max, ret = 0;
1126         size_t data_size = 0;
1127
1128         if (copy_from_user(&hdr, arg, minsz))
1129                 return -EFAULT;
1130
1131         max = vfio_pci_get_irq_count(vdev, hdr.index);
1132
1133         ret = vfio_set_irqs_validate_and_prepare(&hdr, max, VFIO_PCI_NUM_IRQS,
1134                                                  &data_size);
1135         if (ret)
1136                 return ret;
1137
1138         if (data_size) {
1139                 data = memdup_user(&arg->data, data_size);
1140                 if (IS_ERR(data))
1141                         return PTR_ERR(data);
1142         }
1143
1144         mutex_lock(&vdev->igate);
1145
1146         ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index, hdr.start,
1147                                       hdr.count, data);
1148
1149         mutex_unlock(&vdev->igate);
1150         kfree(data);
1151
1152         return ret;
1153 }
1154
1155 static int vfio_pci_ioctl_reset(struct vfio_pci_core_device *vdev,
1156                                 void __user *arg)
1157 {
1158         int ret;
1159
1160         if (!vdev->reset_works)
1161                 return -EINVAL;
1162
1163         vfio_pci_zap_and_down_write_memory_lock(vdev);
1164
1165         /*
1166          * This function can be invoked while the power state is non-D0. If
1167          * pci_try_reset_function() has been called while the power state is
1168          * non-D0, then pci_try_reset_function() will internally set the power
1169          * state to D0 without vfio driver involvement. For the devices which
1170          * have NoSoftRst-, the reset function can cause the PCI config space
1171          * reset without restoring the original state (saved locally in
1172          * 'vdev->pm_save').
1173          */
1174         vfio_pci_set_power_state(vdev, PCI_D0);
1175
1176         ret = pci_try_reset_function(vdev->pdev);
1177         up_write(&vdev->memory_lock);
1178
1179         return ret;
1180 }
1181
1182 static int vfio_pci_ioctl_get_pci_hot_reset_info(
1183         struct vfio_pci_core_device *vdev,
1184         struct vfio_pci_hot_reset_info __user *arg)
1185 {
1186         unsigned long minsz =
1187                 offsetofend(struct vfio_pci_hot_reset_info, count);
1188         struct vfio_pci_hot_reset_info hdr;
1189         struct vfio_pci_fill_info fill = { 0 };
1190         struct vfio_pci_dependent_device *devices = NULL;
1191         bool slot = false;
1192         int ret = 0;
1193
1194         if (copy_from_user(&hdr, arg, minsz))
1195                 return -EFAULT;
1196
1197         if (hdr.argsz < minsz)
1198                 return -EINVAL;
1199
1200         hdr.flags = 0;
1201
1202         /* Can we do a slot or bus reset or neither? */
1203         if (!pci_probe_reset_slot(vdev->pdev->slot))
1204                 slot = true;
1205         else if (pci_probe_reset_bus(vdev->pdev->bus))
1206                 return -ENODEV;
1207
1208         /* How many devices are affected? */
1209         ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs,
1210                                             &fill.max, slot);
1211         if (ret)
1212                 return ret;
1213
1214         WARN_ON(!fill.max); /* Should always be at least one */
1215
1216         /*
1217          * If there's enough space, fill it now, otherwise return -ENOSPC and
1218          * the number of devices affected.
1219          */
1220         if (hdr.argsz < sizeof(hdr) + (fill.max * sizeof(*devices))) {
1221                 ret = -ENOSPC;
1222                 hdr.count = fill.max;
1223                 goto reset_info_exit;
1224         }
1225
1226         devices = kcalloc(fill.max, sizeof(*devices), GFP_KERNEL);
1227         if (!devices)
1228                 return -ENOMEM;
1229
1230         fill.devices = devices;
1231
1232         ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_fill_devs,
1233                                             &fill, slot);
1234
1235         /*
1236          * If a device was removed between counting and filling, we may come up
1237          * short of fill.max.  If a device was added, we'll have a return of
1238          * -EAGAIN above.
1239          */
1240         if (!ret)
1241                 hdr.count = fill.cur;
1242
1243 reset_info_exit:
1244         if (copy_to_user(arg, &hdr, minsz))
1245                 ret = -EFAULT;
1246
1247         if (!ret) {
1248                 if (copy_to_user(&arg->devices, devices,
1249                                  hdr.count * sizeof(*devices)))
1250                         ret = -EFAULT;
1251         }
1252
1253         kfree(devices);
1254         return ret;
1255 }
1256
1257 static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev,
1258                                         struct vfio_pci_hot_reset __user *arg)
1259 {
1260         unsigned long minsz = offsetofend(struct vfio_pci_hot_reset, count);
1261         struct vfio_pci_hot_reset hdr;
1262         int32_t *group_fds;
1263         struct file **files;
1264         struct vfio_pci_group_info info;
1265         bool slot = false;
1266         int file_idx, count = 0, ret = 0;
1267
1268         if (copy_from_user(&hdr, arg, minsz))
1269                 return -EFAULT;
1270
1271         if (hdr.argsz < minsz || hdr.flags)
1272                 return -EINVAL;
1273
1274         /* Can we do a slot or bus reset or neither? */
1275         if (!pci_probe_reset_slot(vdev->pdev->slot))
1276                 slot = true;
1277         else if (pci_probe_reset_bus(vdev->pdev->bus))
1278                 return -ENODEV;
1279
1280         /*
1281          * We can't let userspace give us an arbitrarily large buffer to copy,
1282          * so verify how many we think there could be.  Note groups can have
1283          * multiple devices so one group per device is the max.
1284          */
1285         ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs,
1286                                             &count, slot);
1287         if (ret)
1288                 return ret;
1289
1290         /* Somewhere between 1 and count is OK */
1291         if (!hdr.count || hdr.count > count)
1292                 return -EINVAL;
1293
1294         group_fds = kcalloc(hdr.count, sizeof(*group_fds), GFP_KERNEL);
1295         files = kcalloc(hdr.count, sizeof(*files), GFP_KERNEL);
1296         if (!group_fds || !files) {
1297                 kfree(group_fds);
1298                 kfree(files);
1299                 return -ENOMEM;
1300         }
1301
1302         if (copy_from_user(group_fds, arg->group_fds,
1303                            hdr.count * sizeof(*group_fds))) {
1304                 kfree(group_fds);
1305                 kfree(files);
1306                 return -EFAULT;
1307         }
1308
1309         /*
1310          * For each group_fd, get the group through the vfio external user
1311          * interface and store the group and iommu ID.  This ensures the group
1312          * is held across the reset.
1313          */
1314         for (file_idx = 0; file_idx < hdr.count; file_idx++) {
1315                 struct file *file = fget(group_fds[file_idx]);
1316
1317                 if (!file) {
1318                         ret = -EBADF;
1319                         break;
1320                 }
1321
1322                 /* Ensure the FD is a vfio group FD.*/
1323                 if (!vfio_file_is_group(file)) {
1324                         fput(file);
1325                         ret = -EINVAL;
1326                         break;
1327                 }
1328
1329                 files[file_idx] = file;
1330         }
1331
1332         kfree(group_fds);
1333
1334         /* release reference to groups on error */
1335         if (ret)
1336                 goto hot_reset_release;
1337
1338         info.count = hdr.count;
1339         info.files = files;
1340
1341         ret = vfio_pci_dev_set_hot_reset(vdev->vdev.dev_set, &info);
1342
1343 hot_reset_release:
1344         for (file_idx--; file_idx >= 0; file_idx--)
1345                 fput(files[file_idx]);
1346
1347         kfree(files);
1348         return ret;
1349 }
1350
1351 static int vfio_pci_ioctl_ioeventfd(struct vfio_pci_core_device *vdev,
1352                                     struct vfio_device_ioeventfd __user *arg)
1353 {
1354         unsigned long minsz = offsetofend(struct vfio_device_ioeventfd, fd);
1355         struct vfio_device_ioeventfd ioeventfd;
1356         int count;
1357
1358         if (copy_from_user(&ioeventfd, arg, minsz))
1359                 return -EFAULT;
1360
1361         if (ioeventfd.argsz < minsz)
1362                 return -EINVAL;
1363
1364         if (ioeventfd.flags & ~VFIO_DEVICE_IOEVENTFD_SIZE_MASK)
1365                 return -EINVAL;
1366
1367         count = ioeventfd.flags & VFIO_DEVICE_IOEVENTFD_SIZE_MASK;
1368
1369         if (hweight8(count) != 1 || ioeventfd.fd < -1)
1370                 return -EINVAL;
1371
1372         return vfio_pci_ioeventfd(vdev, ioeventfd.offset, ioeventfd.data, count,
1373                                   ioeventfd.fd);
1374 }
1375
1376 long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd,
1377                          unsigned long arg)
1378 {
1379         struct vfio_pci_core_device *vdev =
1380                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1381         void __user *uarg = (void __user *)arg;
1382
1383         switch (cmd) {
1384         case VFIO_DEVICE_GET_INFO:
1385                 return vfio_pci_ioctl_get_info(vdev, uarg);
1386         case VFIO_DEVICE_GET_IRQ_INFO:
1387                 return vfio_pci_ioctl_get_irq_info(vdev, uarg);
1388         case VFIO_DEVICE_GET_PCI_HOT_RESET_INFO:
1389                 return vfio_pci_ioctl_get_pci_hot_reset_info(vdev, uarg);
1390         case VFIO_DEVICE_GET_REGION_INFO:
1391                 return vfio_pci_ioctl_get_region_info(vdev, uarg);
1392         case VFIO_DEVICE_IOEVENTFD:
1393                 return vfio_pci_ioctl_ioeventfd(vdev, uarg);
1394         case VFIO_DEVICE_PCI_HOT_RESET:
1395                 return vfio_pci_ioctl_pci_hot_reset(vdev, uarg);
1396         case VFIO_DEVICE_RESET:
1397                 return vfio_pci_ioctl_reset(vdev, uarg);
1398         case VFIO_DEVICE_SET_IRQS:
1399                 return vfio_pci_ioctl_set_irqs(vdev, uarg);
1400         default:
1401                 return -ENOTTY;
1402         }
1403 }
1404 EXPORT_SYMBOL_GPL(vfio_pci_core_ioctl);
1405
1406 static int vfio_pci_core_feature_token(struct vfio_device *device, u32 flags,
1407                                        uuid_t __user *arg, size_t argsz)
1408 {
1409         struct vfio_pci_core_device *vdev =
1410                 container_of(device, struct vfio_pci_core_device, vdev);
1411         uuid_t uuid;
1412         int ret;
1413
1414         if (!vdev->vf_token)
1415                 return -ENOTTY;
1416         /*
1417          * We do not support GET of the VF Token UUID as this could
1418          * expose the token of the previous device user.
1419          */
1420         ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET,
1421                                  sizeof(uuid));
1422         if (ret != 1)
1423                 return ret;
1424
1425         if (copy_from_user(&uuid, arg, sizeof(uuid)))
1426                 return -EFAULT;
1427
1428         mutex_lock(&vdev->vf_token->lock);
1429         uuid_copy(&vdev->vf_token->uuid, &uuid);
1430         mutex_unlock(&vdev->vf_token->lock);
1431         return 0;
1432 }
1433
1434 int vfio_pci_core_ioctl_feature(struct vfio_device *device, u32 flags,
1435                                 void __user *arg, size_t argsz)
1436 {
1437         switch (flags & VFIO_DEVICE_FEATURE_MASK) {
1438         case VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY:
1439                 return vfio_pci_core_pm_entry(device, flags, arg, argsz);
1440         case VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY_WITH_WAKEUP:
1441                 return vfio_pci_core_pm_entry_with_wakeup(device, flags,
1442                                                           arg, argsz);
1443         case VFIO_DEVICE_FEATURE_LOW_POWER_EXIT:
1444                 return vfio_pci_core_pm_exit(device, flags, arg, argsz);
1445         case VFIO_DEVICE_FEATURE_PCI_VF_TOKEN:
1446                 return vfio_pci_core_feature_token(device, flags, arg, argsz);
1447         default:
1448                 return -ENOTTY;
1449         }
1450 }
1451 EXPORT_SYMBOL_GPL(vfio_pci_core_ioctl_feature);
1452
1453 static ssize_t vfio_pci_rw(struct vfio_pci_core_device *vdev, char __user *buf,
1454                            size_t count, loff_t *ppos, bool iswrite)
1455 {
1456         unsigned int index = VFIO_PCI_OFFSET_TO_INDEX(*ppos);
1457         int ret;
1458
1459         if (index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions)
1460                 return -EINVAL;
1461
1462         ret = pm_runtime_resume_and_get(&vdev->pdev->dev);
1463         if (ret) {
1464                 pci_info_ratelimited(vdev->pdev, "runtime resume failed %d\n",
1465                                      ret);
1466                 return -EIO;
1467         }
1468
1469         switch (index) {
1470         case VFIO_PCI_CONFIG_REGION_INDEX:
1471                 ret = vfio_pci_config_rw(vdev, buf, count, ppos, iswrite);
1472                 break;
1473
1474         case VFIO_PCI_ROM_REGION_INDEX:
1475                 if (iswrite)
1476                         ret = -EINVAL;
1477                 else
1478                         ret = vfio_pci_bar_rw(vdev, buf, count, ppos, false);
1479                 break;
1480
1481         case VFIO_PCI_BAR0_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX:
1482                 ret = vfio_pci_bar_rw(vdev, buf, count, ppos, iswrite);
1483                 break;
1484
1485         case VFIO_PCI_VGA_REGION_INDEX:
1486                 ret = vfio_pci_vga_rw(vdev, buf, count, ppos, iswrite);
1487                 break;
1488
1489         default:
1490                 index -= VFIO_PCI_NUM_REGIONS;
1491                 ret = vdev->region[index].ops->rw(vdev, buf,
1492                                                    count, ppos, iswrite);
1493                 break;
1494         }
1495
1496         pm_runtime_put(&vdev->pdev->dev);
1497         return ret;
1498 }
1499
1500 ssize_t vfio_pci_core_read(struct vfio_device *core_vdev, char __user *buf,
1501                 size_t count, loff_t *ppos)
1502 {
1503         struct vfio_pci_core_device *vdev =
1504                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1505
1506         if (!count)
1507                 return 0;
1508
1509         return vfio_pci_rw(vdev, buf, count, ppos, false);
1510 }
1511 EXPORT_SYMBOL_GPL(vfio_pci_core_read);
1512
1513 ssize_t vfio_pci_core_write(struct vfio_device *core_vdev, const char __user *buf,
1514                 size_t count, loff_t *ppos)
1515 {
1516         struct vfio_pci_core_device *vdev =
1517                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1518
1519         if (!count)
1520                 return 0;
1521
1522         return vfio_pci_rw(vdev, (char __user *)buf, count, ppos, true);
1523 }
1524 EXPORT_SYMBOL_GPL(vfio_pci_core_write);
1525
1526 /* Return 1 on zap and vma_lock acquired, 0 on contention (only with @try) */
1527 static int vfio_pci_zap_and_vma_lock(struct vfio_pci_core_device *vdev, bool try)
1528 {
1529         struct vfio_pci_mmap_vma *mmap_vma, *tmp;
1530
1531         /*
1532          * Lock ordering:
1533          * vma_lock is nested under mmap_lock for vm_ops callback paths.
1534          * The memory_lock semaphore is used by both code paths calling
1535          * into this function to zap vmas and the vm_ops.fault callback
1536          * to protect the memory enable state of the device.
1537          *
1538          * When zapping vmas we need to maintain the mmap_lock => vma_lock
1539          * ordering, which requires using vma_lock to walk vma_list to
1540          * acquire an mm, then dropping vma_lock to get the mmap_lock and
1541          * reacquiring vma_lock.  This logic is derived from similar
1542          * requirements in uverbs_user_mmap_disassociate().
1543          *
1544          * mmap_lock must always be the top-level lock when it is taken.
1545          * Therefore we can only hold the memory_lock write lock when
1546          * vma_list is empty, as we'd need to take mmap_lock to clear
1547          * entries.  vma_list can only be guaranteed empty when holding
1548          * vma_lock, thus memory_lock is nested under vma_lock.
1549          *
1550          * This enables the vm_ops.fault callback to acquire vma_lock,
1551          * followed by memory_lock read lock, while already holding
1552          * mmap_lock without risk of deadlock.
1553          */
1554         while (1) {
1555                 struct mm_struct *mm = NULL;
1556
1557                 if (try) {
1558                         if (!mutex_trylock(&vdev->vma_lock))
1559                                 return 0;
1560                 } else {
1561                         mutex_lock(&vdev->vma_lock);
1562                 }
1563                 while (!list_empty(&vdev->vma_list)) {
1564                         mmap_vma = list_first_entry(&vdev->vma_list,
1565                                                     struct vfio_pci_mmap_vma,
1566                                                     vma_next);
1567                         mm = mmap_vma->vma->vm_mm;
1568                         if (mmget_not_zero(mm))
1569                                 break;
1570
1571                         list_del(&mmap_vma->vma_next);
1572                         kfree(mmap_vma);
1573                         mm = NULL;
1574                 }
1575                 if (!mm)
1576                         return 1;
1577                 mutex_unlock(&vdev->vma_lock);
1578
1579                 if (try) {
1580                         if (!mmap_read_trylock(mm)) {
1581                                 mmput(mm);
1582                                 return 0;
1583                         }
1584                 } else {
1585                         mmap_read_lock(mm);
1586                 }
1587                 if (try) {
1588                         if (!mutex_trylock(&vdev->vma_lock)) {
1589                                 mmap_read_unlock(mm);
1590                                 mmput(mm);
1591                                 return 0;
1592                         }
1593                 } else {
1594                         mutex_lock(&vdev->vma_lock);
1595                 }
1596                 list_for_each_entry_safe(mmap_vma, tmp,
1597                                          &vdev->vma_list, vma_next) {
1598                         struct vm_area_struct *vma = mmap_vma->vma;
1599
1600                         if (vma->vm_mm != mm)
1601                                 continue;
1602
1603                         list_del(&mmap_vma->vma_next);
1604                         kfree(mmap_vma);
1605
1606                         zap_vma_ptes(vma, vma->vm_start,
1607                                      vma->vm_end - vma->vm_start);
1608                 }
1609                 mutex_unlock(&vdev->vma_lock);
1610                 mmap_read_unlock(mm);
1611                 mmput(mm);
1612         }
1613 }
1614
1615 void vfio_pci_zap_and_down_write_memory_lock(struct vfio_pci_core_device *vdev)
1616 {
1617         vfio_pci_zap_and_vma_lock(vdev, false);
1618         down_write(&vdev->memory_lock);
1619         mutex_unlock(&vdev->vma_lock);
1620 }
1621
1622 u16 vfio_pci_memory_lock_and_enable(struct vfio_pci_core_device *vdev)
1623 {
1624         u16 cmd;
1625
1626         down_write(&vdev->memory_lock);
1627         pci_read_config_word(vdev->pdev, PCI_COMMAND, &cmd);
1628         if (!(cmd & PCI_COMMAND_MEMORY))
1629                 pci_write_config_word(vdev->pdev, PCI_COMMAND,
1630                                       cmd | PCI_COMMAND_MEMORY);
1631
1632         return cmd;
1633 }
1634
1635 void vfio_pci_memory_unlock_and_restore(struct vfio_pci_core_device *vdev, u16 cmd)
1636 {
1637         pci_write_config_word(vdev->pdev, PCI_COMMAND, cmd);
1638         up_write(&vdev->memory_lock);
1639 }
1640
1641 /* Caller holds vma_lock */
1642 static int __vfio_pci_add_vma(struct vfio_pci_core_device *vdev,
1643                               struct vm_area_struct *vma)
1644 {
1645         struct vfio_pci_mmap_vma *mmap_vma;
1646
1647         mmap_vma = kmalloc(sizeof(*mmap_vma), GFP_KERNEL);
1648         if (!mmap_vma)
1649                 return -ENOMEM;
1650
1651         mmap_vma->vma = vma;
1652         list_add(&mmap_vma->vma_next, &vdev->vma_list);
1653
1654         return 0;
1655 }
1656
1657 /*
1658  * Zap mmaps on open so that we can fault them in on access and therefore
1659  * our vma_list only tracks mappings accessed since last zap.
1660  */
1661 static void vfio_pci_mmap_open(struct vm_area_struct *vma)
1662 {
1663         zap_vma_ptes(vma, vma->vm_start, vma->vm_end - vma->vm_start);
1664 }
1665
1666 static void vfio_pci_mmap_close(struct vm_area_struct *vma)
1667 {
1668         struct vfio_pci_core_device *vdev = vma->vm_private_data;
1669         struct vfio_pci_mmap_vma *mmap_vma;
1670
1671         mutex_lock(&vdev->vma_lock);
1672         list_for_each_entry(mmap_vma, &vdev->vma_list, vma_next) {
1673                 if (mmap_vma->vma == vma) {
1674                         list_del(&mmap_vma->vma_next);
1675                         kfree(mmap_vma);
1676                         break;
1677                 }
1678         }
1679         mutex_unlock(&vdev->vma_lock);
1680 }
1681
1682 static vm_fault_t vfio_pci_mmap_fault(struct vm_fault *vmf)
1683 {
1684         struct vm_area_struct *vma = vmf->vma;
1685         struct vfio_pci_core_device *vdev = vma->vm_private_data;
1686         struct vfio_pci_mmap_vma *mmap_vma;
1687         vm_fault_t ret = VM_FAULT_NOPAGE;
1688
1689         mutex_lock(&vdev->vma_lock);
1690         down_read(&vdev->memory_lock);
1691
1692         /*
1693          * Memory region cannot be accessed if the low power feature is engaged
1694          * or memory access is disabled.
1695          */
1696         if (vdev->pm_runtime_engaged || !__vfio_pci_memory_enabled(vdev)) {
1697                 ret = VM_FAULT_SIGBUS;
1698                 goto up_out;
1699         }
1700
1701         /*
1702          * We populate the whole vma on fault, so we need to test whether
1703          * the vma has already been mapped, such as for concurrent faults
1704          * to the same vma.  io_remap_pfn_range() will trigger a BUG_ON if
1705          * we ask it to fill the same range again.
1706          */
1707         list_for_each_entry(mmap_vma, &vdev->vma_list, vma_next) {
1708                 if (mmap_vma->vma == vma)
1709                         goto up_out;
1710         }
1711
1712         if (io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
1713                                vma->vm_end - vma->vm_start,
1714                                vma->vm_page_prot)) {
1715                 ret = VM_FAULT_SIGBUS;
1716                 zap_vma_ptes(vma, vma->vm_start, vma->vm_end - vma->vm_start);
1717                 goto up_out;
1718         }
1719
1720         if (__vfio_pci_add_vma(vdev, vma)) {
1721                 ret = VM_FAULT_OOM;
1722                 zap_vma_ptes(vma, vma->vm_start, vma->vm_end - vma->vm_start);
1723         }
1724
1725 up_out:
1726         up_read(&vdev->memory_lock);
1727         mutex_unlock(&vdev->vma_lock);
1728         return ret;
1729 }
1730
1731 static const struct vm_operations_struct vfio_pci_mmap_ops = {
1732         .open = vfio_pci_mmap_open,
1733         .close = vfio_pci_mmap_close,
1734         .fault = vfio_pci_mmap_fault,
1735 };
1736
1737 int vfio_pci_core_mmap(struct vfio_device *core_vdev, struct vm_area_struct *vma)
1738 {
1739         struct vfio_pci_core_device *vdev =
1740                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1741         struct pci_dev *pdev = vdev->pdev;
1742         unsigned int index;
1743         u64 phys_len, req_len, pgoff, req_start;
1744         int ret;
1745
1746         index = vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT);
1747
1748         if (index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions)
1749                 return -EINVAL;
1750         if (vma->vm_end < vma->vm_start)
1751                 return -EINVAL;
1752         if ((vma->vm_flags & VM_SHARED) == 0)
1753                 return -EINVAL;
1754         if (index >= VFIO_PCI_NUM_REGIONS) {
1755                 int regnum = index - VFIO_PCI_NUM_REGIONS;
1756                 struct vfio_pci_region *region = vdev->region + regnum;
1757
1758                 if (region->ops && region->ops->mmap &&
1759                     (region->flags & VFIO_REGION_INFO_FLAG_MMAP))
1760                         return region->ops->mmap(vdev, region, vma);
1761                 return -EINVAL;
1762         }
1763         if (index >= VFIO_PCI_ROM_REGION_INDEX)
1764                 return -EINVAL;
1765         if (!vdev->bar_mmap_supported[index])
1766                 return -EINVAL;
1767
1768         phys_len = PAGE_ALIGN(pci_resource_len(pdev, index));
1769         req_len = vma->vm_end - vma->vm_start;
1770         pgoff = vma->vm_pgoff &
1771                 ((1U << (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT)) - 1);
1772         req_start = pgoff << PAGE_SHIFT;
1773
1774         if (req_start + req_len > phys_len)
1775                 return -EINVAL;
1776
1777         /*
1778          * Even though we don't make use of the barmap for the mmap,
1779          * we need to request the region and the barmap tracks that.
1780          */
1781         if (!vdev->barmap[index]) {
1782                 ret = pci_request_selected_regions(pdev,
1783                                                    1 << index, "vfio-pci");
1784                 if (ret)
1785                         return ret;
1786
1787                 vdev->barmap[index] = pci_iomap(pdev, index, 0);
1788                 if (!vdev->barmap[index]) {
1789                         pci_release_selected_regions(pdev, 1 << index);
1790                         return -ENOMEM;
1791                 }
1792         }
1793
1794         vma->vm_private_data = vdev;
1795         vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1796         vma->vm_pgoff = (pci_resource_start(pdev, index) >> PAGE_SHIFT) + pgoff;
1797
1798         /*
1799          * See remap_pfn_range(), called from vfio_pci_fault() but we can't
1800          * change vm_flags within the fault handler.  Set them now.
1801          */
1802         vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
1803         vma->vm_ops = &vfio_pci_mmap_ops;
1804
1805         return 0;
1806 }
1807 EXPORT_SYMBOL_GPL(vfio_pci_core_mmap);
1808
1809 void vfio_pci_core_request(struct vfio_device *core_vdev, unsigned int count)
1810 {
1811         struct vfio_pci_core_device *vdev =
1812                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1813         struct pci_dev *pdev = vdev->pdev;
1814
1815         mutex_lock(&vdev->igate);
1816
1817         if (vdev->req_trigger) {
1818                 if (!(count % 10))
1819                         pci_notice_ratelimited(pdev,
1820                                 "Relaying device request to user (#%u)\n",
1821                                 count);
1822                 eventfd_signal(vdev->req_trigger, 1);
1823         } else if (count == 0) {
1824                 pci_warn(pdev,
1825                         "No device request channel registered, blocked until released by user\n");
1826         }
1827
1828         mutex_unlock(&vdev->igate);
1829 }
1830 EXPORT_SYMBOL_GPL(vfio_pci_core_request);
1831
1832 static int vfio_pci_validate_vf_token(struct vfio_pci_core_device *vdev,
1833                                       bool vf_token, uuid_t *uuid)
1834 {
1835         /*
1836          * There's always some degree of trust or collaboration between SR-IOV
1837          * PF and VFs, even if just that the PF hosts the SR-IOV capability and
1838          * can disrupt VFs with a reset, but often the PF has more explicit
1839          * access to deny service to the VF or access data passed through the
1840          * VF.  We therefore require an opt-in via a shared VF token (UUID) to
1841          * represent this trust.  This both prevents that a VF driver might
1842          * assume the PF driver is a trusted, in-kernel driver, and also that
1843          * a PF driver might be replaced with a rogue driver, unknown to in-use
1844          * VF drivers.
1845          *
1846          * Therefore when presented with a VF, if the PF is a vfio device and
1847          * it is bound to the vfio-pci driver, the user needs to provide a VF
1848          * token to access the device, in the form of appending a vf_token to
1849          * the device name, for example:
1850          *
1851          * "0000:04:10.0 vf_token=bd8d9d2b-5a5f-4f5a-a211-f591514ba1f3"
1852          *
1853          * When presented with a PF which has VFs in use, the user must also
1854          * provide the current VF token to prove collaboration with existing
1855          * VF users.  If VFs are not in use, the VF token provided for the PF
1856          * device will act to set the VF token.
1857          *
1858          * If the VF token is provided but unused, an error is generated.
1859          */
1860         if (vdev->pdev->is_virtfn) {
1861                 struct vfio_pci_core_device *pf_vdev = vdev->sriov_pf_core_dev;
1862                 bool match;
1863
1864                 if (!pf_vdev) {
1865                         if (!vf_token)
1866                                 return 0; /* PF is not vfio-pci, no VF token */
1867
1868                         pci_info_ratelimited(vdev->pdev,
1869                                 "VF token incorrectly provided, PF not bound to vfio-pci\n");
1870                         return -EINVAL;
1871                 }
1872
1873                 if (!vf_token) {
1874                         pci_info_ratelimited(vdev->pdev,
1875                                 "VF token required to access device\n");
1876                         return -EACCES;
1877                 }
1878
1879                 mutex_lock(&pf_vdev->vf_token->lock);
1880                 match = uuid_equal(uuid, &pf_vdev->vf_token->uuid);
1881                 mutex_unlock(&pf_vdev->vf_token->lock);
1882
1883                 if (!match) {
1884                         pci_info_ratelimited(vdev->pdev,
1885                                 "Incorrect VF token provided for device\n");
1886                         return -EACCES;
1887                 }
1888         } else if (vdev->vf_token) {
1889                 mutex_lock(&vdev->vf_token->lock);
1890                 if (vdev->vf_token->users) {
1891                         if (!vf_token) {
1892                                 mutex_unlock(&vdev->vf_token->lock);
1893                                 pci_info_ratelimited(vdev->pdev,
1894                                         "VF token required to access device\n");
1895                                 return -EACCES;
1896                         }
1897
1898                         if (!uuid_equal(uuid, &vdev->vf_token->uuid)) {
1899                                 mutex_unlock(&vdev->vf_token->lock);
1900                                 pci_info_ratelimited(vdev->pdev,
1901                                         "Incorrect VF token provided for device\n");
1902                                 return -EACCES;
1903                         }
1904                 } else if (vf_token) {
1905                         uuid_copy(&vdev->vf_token->uuid, uuid);
1906                 }
1907
1908                 mutex_unlock(&vdev->vf_token->lock);
1909         } else if (vf_token) {
1910                 pci_info_ratelimited(vdev->pdev,
1911                         "VF token incorrectly provided, not a PF or VF\n");
1912                 return -EINVAL;
1913         }
1914
1915         return 0;
1916 }
1917
1918 #define VF_TOKEN_ARG "vf_token="
1919
1920 int vfio_pci_core_match(struct vfio_device *core_vdev, char *buf)
1921 {
1922         struct vfio_pci_core_device *vdev =
1923                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
1924         bool vf_token = false;
1925         uuid_t uuid;
1926         int ret;
1927
1928         if (strncmp(pci_name(vdev->pdev), buf, strlen(pci_name(vdev->pdev))))
1929                 return 0; /* No match */
1930
1931         if (strlen(buf) > strlen(pci_name(vdev->pdev))) {
1932                 buf += strlen(pci_name(vdev->pdev));
1933
1934                 if (*buf != ' ')
1935                         return 0; /* No match: non-whitespace after name */
1936
1937                 while (*buf) {
1938                         if (*buf == ' ') {
1939                                 buf++;
1940                                 continue;
1941                         }
1942
1943                         if (!vf_token && !strncmp(buf, VF_TOKEN_ARG,
1944                                                   strlen(VF_TOKEN_ARG))) {
1945                                 buf += strlen(VF_TOKEN_ARG);
1946
1947                                 if (strlen(buf) < UUID_STRING_LEN)
1948                                         return -EINVAL;
1949
1950                                 ret = uuid_parse(buf, &uuid);
1951                                 if (ret)
1952                                         return ret;
1953
1954                                 vf_token = true;
1955                                 buf += UUID_STRING_LEN;
1956                         } else {
1957                                 /* Unknown/duplicate option */
1958                                 return -EINVAL;
1959                         }
1960                 }
1961         }
1962
1963         ret = vfio_pci_validate_vf_token(vdev, vf_token, &uuid);
1964         if (ret)
1965                 return ret;
1966
1967         return 1; /* Match */
1968 }
1969 EXPORT_SYMBOL_GPL(vfio_pci_core_match);
1970
1971 static int vfio_pci_bus_notifier(struct notifier_block *nb,
1972                                  unsigned long action, void *data)
1973 {
1974         struct vfio_pci_core_device *vdev = container_of(nb,
1975                                                     struct vfio_pci_core_device, nb);
1976         struct device *dev = data;
1977         struct pci_dev *pdev = to_pci_dev(dev);
1978         struct pci_dev *physfn = pci_physfn(pdev);
1979
1980         if (action == BUS_NOTIFY_ADD_DEVICE &&
1981             pdev->is_virtfn && physfn == vdev->pdev) {
1982                 pci_info(vdev->pdev, "Captured SR-IOV VF %s driver_override\n",
1983                          pci_name(pdev));
1984                 pdev->driver_override = kasprintf(GFP_KERNEL, "%s",
1985                                                   vdev->vdev.ops->name);
1986         } else if (action == BUS_NOTIFY_BOUND_DRIVER &&
1987                    pdev->is_virtfn && physfn == vdev->pdev) {
1988                 struct pci_driver *drv = pci_dev_driver(pdev);
1989
1990                 if (drv && drv != pci_dev_driver(vdev->pdev))
1991                         pci_warn(vdev->pdev,
1992                                  "VF %s bound to driver %s while PF bound to driver %s\n",
1993                                  pci_name(pdev), drv->name,
1994                                  pci_dev_driver(vdev->pdev)->name);
1995         }
1996
1997         return 0;
1998 }
1999
2000 static int vfio_pci_vf_init(struct vfio_pci_core_device *vdev)
2001 {
2002         struct pci_dev *pdev = vdev->pdev;
2003         struct vfio_pci_core_device *cur;
2004         struct pci_dev *physfn;
2005         int ret;
2006
2007         if (pdev->is_virtfn) {
2008                 /*
2009                  * If this VF was created by our vfio_pci_core_sriov_configure()
2010                  * then we can find the PF vfio_pci_core_device now, and due to
2011                  * the locking in pci_disable_sriov() it cannot change until
2012                  * this VF device driver is removed.
2013                  */
2014                 physfn = pci_physfn(vdev->pdev);
2015                 mutex_lock(&vfio_pci_sriov_pfs_mutex);
2016                 list_for_each_entry(cur, &vfio_pci_sriov_pfs, sriov_pfs_item) {
2017                         if (cur->pdev == physfn) {
2018                                 vdev->sriov_pf_core_dev = cur;
2019                                 break;
2020                         }
2021                 }
2022                 mutex_unlock(&vfio_pci_sriov_pfs_mutex);
2023                 return 0;
2024         }
2025
2026         /* Not a SRIOV PF */
2027         if (!pdev->is_physfn)
2028                 return 0;
2029
2030         vdev->vf_token = kzalloc(sizeof(*vdev->vf_token), GFP_KERNEL);
2031         if (!vdev->vf_token)
2032                 return -ENOMEM;
2033
2034         mutex_init(&vdev->vf_token->lock);
2035         uuid_gen(&vdev->vf_token->uuid);
2036
2037         vdev->nb.notifier_call = vfio_pci_bus_notifier;
2038         ret = bus_register_notifier(&pci_bus_type, &vdev->nb);
2039         if (ret) {
2040                 kfree(vdev->vf_token);
2041                 return ret;
2042         }
2043         return 0;
2044 }
2045
2046 static void vfio_pci_vf_uninit(struct vfio_pci_core_device *vdev)
2047 {
2048         if (!vdev->vf_token)
2049                 return;
2050
2051         bus_unregister_notifier(&pci_bus_type, &vdev->nb);
2052         WARN_ON(vdev->vf_token->users);
2053         mutex_destroy(&vdev->vf_token->lock);
2054         kfree(vdev->vf_token);
2055 }
2056
2057 static int vfio_pci_vga_init(struct vfio_pci_core_device *vdev)
2058 {
2059         struct pci_dev *pdev = vdev->pdev;
2060         int ret;
2061
2062         if (!vfio_pci_is_vga(pdev))
2063                 return 0;
2064
2065         ret = aperture_remove_conflicting_pci_devices(pdev, vdev->vdev.ops->name);
2066         if (ret)
2067                 return ret;
2068
2069         ret = vga_client_register(pdev, vfio_pci_set_decode);
2070         if (ret)
2071                 return ret;
2072         vga_set_legacy_decoding(pdev, vfio_pci_set_decode(pdev, false));
2073         return 0;
2074 }
2075
2076 static void vfio_pci_vga_uninit(struct vfio_pci_core_device *vdev)
2077 {
2078         struct pci_dev *pdev = vdev->pdev;
2079
2080         if (!vfio_pci_is_vga(pdev))
2081                 return;
2082         vga_client_unregister(pdev);
2083         vga_set_legacy_decoding(pdev, VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM |
2084                                               VGA_RSRC_LEGACY_IO |
2085                                               VGA_RSRC_LEGACY_MEM);
2086 }
2087
2088 int vfio_pci_core_init_dev(struct vfio_device *core_vdev)
2089 {
2090         struct vfio_pci_core_device *vdev =
2091                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
2092
2093         vdev->pdev = to_pci_dev(core_vdev->dev);
2094         vdev->irq_type = VFIO_PCI_NUM_IRQS;
2095         mutex_init(&vdev->igate);
2096         spin_lock_init(&vdev->irqlock);
2097         mutex_init(&vdev->ioeventfds_lock);
2098         INIT_LIST_HEAD(&vdev->dummy_resources_list);
2099         INIT_LIST_HEAD(&vdev->ioeventfds_list);
2100         mutex_init(&vdev->vma_lock);
2101         INIT_LIST_HEAD(&vdev->vma_list);
2102         INIT_LIST_HEAD(&vdev->sriov_pfs_item);
2103         init_rwsem(&vdev->memory_lock);
2104
2105         return 0;
2106 }
2107 EXPORT_SYMBOL_GPL(vfio_pci_core_init_dev);
2108
2109 void vfio_pci_core_release_dev(struct vfio_device *core_vdev)
2110 {
2111         struct vfio_pci_core_device *vdev =
2112                 container_of(core_vdev, struct vfio_pci_core_device, vdev);
2113
2114         mutex_destroy(&vdev->igate);
2115         mutex_destroy(&vdev->ioeventfds_lock);
2116         mutex_destroy(&vdev->vma_lock);
2117         kfree(vdev->region);
2118         kfree(vdev->pm_save);
2119 }
2120 EXPORT_SYMBOL_GPL(vfio_pci_core_release_dev);
2121
2122 int vfio_pci_core_register_device(struct vfio_pci_core_device *vdev)
2123 {
2124         struct pci_dev *pdev = vdev->pdev;
2125         struct device *dev = &pdev->dev;
2126         int ret;
2127
2128         /* Drivers must set the vfio_pci_core_device to their drvdata */
2129         if (WARN_ON(vdev != dev_get_drvdata(dev)))
2130                 return -EINVAL;
2131
2132         if (pdev->hdr_type != PCI_HEADER_TYPE_NORMAL)
2133                 return -EINVAL;
2134
2135         if (vdev->vdev.mig_ops) {
2136                 if (!(vdev->vdev.mig_ops->migration_get_state &&
2137                       vdev->vdev.mig_ops->migration_set_state &&
2138                       vdev->vdev.mig_ops->migration_get_data_size) ||
2139                     !(vdev->vdev.migration_flags & VFIO_MIGRATION_STOP_COPY))
2140                         return -EINVAL;
2141         }
2142
2143         if (vdev->vdev.log_ops && !(vdev->vdev.log_ops->log_start &&
2144             vdev->vdev.log_ops->log_stop &&
2145             vdev->vdev.log_ops->log_read_and_clear))
2146                 return -EINVAL;
2147
2148         /*
2149          * Prevent binding to PFs with VFs enabled, the VFs might be in use
2150          * by the host or other users.  We cannot capture the VFs if they
2151          * already exist, nor can we track VF users.  Disabling SR-IOV here
2152          * would initiate removing the VFs, which would unbind the driver,
2153          * which is prone to blocking if that VF is also in use by vfio-pci.
2154          * Just reject these PFs and let the user sort it out.
2155          */
2156         if (pci_num_vf(pdev)) {
2157                 pci_warn(pdev, "Cannot bind to PF with SR-IOV enabled\n");
2158                 return -EBUSY;
2159         }
2160
2161         if (pci_is_root_bus(pdev->bus)) {
2162                 ret = vfio_assign_device_set(&vdev->vdev, vdev);
2163         } else if (!pci_probe_reset_slot(pdev->slot)) {
2164                 ret = vfio_assign_device_set(&vdev->vdev, pdev->slot);
2165         } else {
2166                 /*
2167                  * If there is no slot reset support for this device, the whole
2168                  * bus needs to be grouped together to support bus-wide resets.
2169                  */
2170                 ret = vfio_assign_device_set(&vdev->vdev, pdev->bus);
2171         }
2172
2173         if (ret)
2174                 return ret;
2175         ret = vfio_pci_vf_init(vdev);
2176         if (ret)
2177                 return ret;
2178         ret = vfio_pci_vga_init(vdev);
2179         if (ret)
2180                 goto out_vf;
2181
2182         vfio_pci_probe_power_state(vdev);
2183
2184         /*
2185          * pci-core sets the device power state to an unknown value at
2186          * bootup and after being removed from a driver.  The only
2187          * transition it allows from this unknown state is to D0, which
2188          * typically happens when a driver calls pci_enable_device().
2189          * We're not ready to enable the device yet, but we do want to
2190          * be able to get to D3.  Therefore first do a D0 transition
2191          * before enabling runtime PM.
2192          */
2193         vfio_pci_set_power_state(vdev, PCI_D0);
2194
2195         dev->driver->pm = &vfio_pci_core_pm_ops;
2196         pm_runtime_allow(dev);
2197         if (!disable_idle_d3)
2198                 pm_runtime_put(dev);
2199
2200         ret = vfio_register_group_dev(&vdev->vdev);
2201         if (ret)
2202                 goto out_power;
2203         return 0;
2204
2205 out_power:
2206         if (!disable_idle_d3)
2207                 pm_runtime_get_noresume(dev);
2208
2209         pm_runtime_forbid(dev);
2210 out_vf:
2211         vfio_pci_vf_uninit(vdev);
2212         return ret;
2213 }
2214 EXPORT_SYMBOL_GPL(vfio_pci_core_register_device);
2215
2216 void vfio_pci_core_unregister_device(struct vfio_pci_core_device *vdev)
2217 {
2218         vfio_pci_core_sriov_configure(vdev, 0);
2219
2220         vfio_unregister_group_dev(&vdev->vdev);
2221
2222         vfio_pci_vf_uninit(vdev);
2223         vfio_pci_vga_uninit(vdev);
2224
2225         if (!disable_idle_d3)
2226                 pm_runtime_get_noresume(&vdev->pdev->dev);
2227
2228         pm_runtime_forbid(&vdev->pdev->dev);
2229 }
2230 EXPORT_SYMBOL_GPL(vfio_pci_core_unregister_device);
2231
2232 pci_ers_result_t vfio_pci_core_aer_err_detected(struct pci_dev *pdev,
2233                                                 pci_channel_state_t state)
2234 {
2235         struct vfio_pci_core_device *vdev = dev_get_drvdata(&pdev->dev);
2236
2237         mutex_lock(&vdev->igate);
2238
2239         if (vdev->err_trigger)
2240                 eventfd_signal(vdev->err_trigger, 1);
2241
2242         mutex_unlock(&vdev->igate);
2243
2244         return PCI_ERS_RESULT_CAN_RECOVER;
2245 }
2246 EXPORT_SYMBOL_GPL(vfio_pci_core_aer_err_detected);
2247
2248 int vfio_pci_core_sriov_configure(struct vfio_pci_core_device *vdev,
2249                                   int nr_virtfn)
2250 {
2251         struct pci_dev *pdev = vdev->pdev;
2252         int ret = 0;
2253
2254         device_lock_assert(&pdev->dev);
2255
2256         if (nr_virtfn) {
2257                 mutex_lock(&vfio_pci_sriov_pfs_mutex);
2258                 /*
2259                  * The thread that adds the vdev to the list is the only thread
2260                  * that gets to call pci_enable_sriov() and we will only allow
2261                  * it to be called once without going through
2262                  * pci_disable_sriov()
2263                  */
2264                 if (!list_empty(&vdev->sriov_pfs_item)) {
2265                         ret = -EINVAL;
2266                         goto out_unlock;
2267                 }
2268                 list_add_tail(&vdev->sriov_pfs_item, &vfio_pci_sriov_pfs);
2269                 mutex_unlock(&vfio_pci_sriov_pfs_mutex);
2270
2271                 /*
2272                  * The PF power state should always be higher than the VF power
2273                  * state. The PF can be in low power state either with runtime
2274                  * power management (when there is no user) or PCI_PM_CTRL
2275                  * register write by the user. If PF is in the low power state,
2276                  * then change the power state to D0 first before enabling
2277                  * SR-IOV. Also, this function can be called at any time, and
2278                  * userspace PCI_PM_CTRL write can race against this code path,
2279                  * so protect the same with 'memory_lock'.
2280                  */
2281                 ret = pm_runtime_resume_and_get(&pdev->dev);
2282                 if (ret)
2283                         goto out_del;
2284
2285                 down_write(&vdev->memory_lock);
2286                 vfio_pci_set_power_state(vdev, PCI_D0);
2287                 ret = pci_enable_sriov(pdev, nr_virtfn);
2288                 up_write(&vdev->memory_lock);
2289                 if (ret) {
2290                         pm_runtime_put(&pdev->dev);
2291                         goto out_del;
2292                 }
2293                 return nr_virtfn;
2294         }
2295
2296         if (pci_num_vf(pdev)) {
2297                 pci_disable_sriov(pdev);
2298                 pm_runtime_put(&pdev->dev);
2299         }
2300
2301 out_del:
2302         mutex_lock(&vfio_pci_sriov_pfs_mutex);
2303         list_del_init(&vdev->sriov_pfs_item);
2304 out_unlock:
2305         mutex_unlock(&vfio_pci_sriov_pfs_mutex);
2306         return ret;
2307 }
2308 EXPORT_SYMBOL_GPL(vfio_pci_core_sriov_configure);
2309
2310 const struct pci_error_handlers vfio_pci_core_err_handlers = {
2311         .error_detected = vfio_pci_core_aer_err_detected,
2312 };
2313 EXPORT_SYMBOL_GPL(vfio_pci_core_err_handlers);
2314
2315 static bool vfio_dev_in_groups(struct vfio_pci_core_device *vdev,
2316                                struct vfio_pci_group_info *groups)
2317 {
2318         unsigned int i;
2319
2320         for (i = 0; i < groups->count; i++)
2321                 if (vfio_file_has_dev(groups->files[i], &vdev->vdev))
2322                         return true;
2323         return false;
2324 }
2325
2326 static int vfio_pci_is_device_in_set(struct pci_dev *pdev, void *data)
2327 {
2328         struct vfio_device_set *dev_set = data;
2329         struct vfio_device *cur;
2330
2331         list_for_each_entry(cur, &dev_set->device_list, dev_set_list)
2332                 if (cur->dev == &pdev->dev)
2333                         return 0;
2334         return -EBUSY;
2335 }
2336
2337 /*
2338  * vfio-core considers a group to be viable and will create a vfio_device even
2339  * if some devices are bound to drivers like pci-stub or pcieport. Here we
2340  * require all PCI devices to be inside our dev_set since that ensures they stay
2341  * put and that every driver controlling the device can co-ordinate with the
2342  * device reset.
2343  *
2344  * Returns the pci_dev to pass to pci_reset_bus() if every PCI device to be
2345  * reset is inside the dev_set, and pci_reset_bus() can succeed. NULL otherwise.
2346  */
2347 static struct pci_dev *
2348 vfio_pci_dev_set_resettable(struct vfio_device_set *dev_set)
2349 {
2350         struct pci_dev *pdev;
2351
2352         lockdep_assert_held(&dev_set->lock);
2353
2354         /*
2355          * By definition all PCI devices in the dev_set share the same PCI
2356          * reset, so any pci_dev will have the same outcomes for
2357          * pci_probe_reset_*() and pci_reset_bus().
2358          */
2359         pdev = list_first_entry(&dev_set->device_list,
2360                                 struct vfio_pci_core_device,
2361                                 vdev.dev_set_list)->pdev;
2362
2363         /* pci_reset_bus() is supported */
2364         if (pci_probe_reset_slot(pdev->slot) && pci_probe_reset_bus(pdev->bus))
2365                 return NULL;
2366
2367         if (vfio_pci_for_each_slot_or_bus(pdev, vfio_pci_is_device_in_set,
2368                                           dev_set,
2369                                           !pci_probe_reset_slot(pdev->slot)))
2370                 return NULL;
2371         return pdev;
2372 }
2373
2374 static int vfio_pci_dev_set_pm_runtime_get(struct vfio_device_set *dev_set)
2375 {
2376         struct vfio_pci_core_device *cur;
2377         int ret;
2378
2379         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) {
2380                 ret = pm_runtime_resume_and_get(&cur->pdev->dev);
2381                 if (ret)
2382                         goto unwind;
2383         }
2384
2385         return 0;
2386
2387 unwind:
2388         list_for_each_entry_continue_reverse(cur, &dev_set->device_list,
2389                                              vdev.dev_set_list)
2390                 pm_runtime_put(&cur->pdev->dev);
2391
2392         return ret;
2393 }
2394
2395 /*
2396  * We need to get memory_lock for each device, but devices can share mmap_lock,
2397  * therefore we need to zap and hold the vma_lock for each device, and only then
2398  * get each memory_lock.
2399  */
2400 static int vfio_pci_dev_set_hot_reset(struct vfio_device_set *dev_set,
2401                                       struct vfio_pci_group_info *groups)
2402 {
2403         struct vfio_pci_core_device *cur_mem;
2404         struct vfio_pci_core_device *cur_vma;
2405         struct vfio_pci_core_device *cur;
2406         struct pci_dev *pdev;
2407         bool is_mem = true;
2408         int ret;
2409
2410         mutex_lock(&dev_set->lock);
2411         cur_mem = list_first_entry(&dev_set->device_list,
2412                                    struct vfio_pci_core_device,
2413                                    vdev.dev_set_list);
2414
2415         pdev = vfio_pci_dev_set_resettable(dev_set);
2416         if (!pdev) {
2417                 ret = -EINVAL;
2418                 goto err_unlock;
2419         }
2420
2421         /*
2422          * Some of the devices in the dev_set can be in the runtime suspended
2423          * state. Increment the usage count for all the devices in the dev_set
2424          * before reset and decrement the same after reset.
2425          */
2426         ret = vfio_pci_dev_set_pm_runtime_get(dev_set);
2427         if (ret)
2428                 goto err_unlock;
2429
2430         list_for_each_entry(cur_vma, &dev_set->device_list, vdev.dev_set_list) {
2431                 /*
2432                  * Test whether all the affected devices are contained by the
2433                  * set of groups provided by the user.
2434                  */
2435                 if (!vfio_dev_in_groups(cur_vma, groups)) {
2436                         ret = -EINVAL;
2437                         goto err_undo;
2438                 }
2439
2440                 /*
2441                  * Locking multiple devices is prone to deadlock, runaway and
2442                  * unwind if we hit contention.
2443                  */
2444                 if (!vfio_pci_zap_and_vma_lock(cur_vma, true)) {
2445                         ret = -EBUSY;
2446                         goto err_undo;
2447                 }
2448         }
2449         cur_vma = NULL;
2450
2451         list_for_each_entry(cur_mem, &dev_set->device_list, vdev.dev_set_list) {
2452                 if (!down_write_trylock(&cur_mem->memory_lock)) {
2453                         ret = -EBUSY;
2454                         goto err_undo;
2455                 }
2456                 mutex_unlock(&cur_mem->vma_lock);
2457         }
2458         cur_mem = NULL;
2459
2460         /*
2461          * The pci_reset_bus() will reset all the devices in the bus.
2462          * The power state can be non-D0 for some of the devices in the bus.
2463          * For these devices, the pci_reset_bus() will internally set
2464          * the power state to D0 without vfio driver involvement.
2465          * For the devices which have NoSoftRst-, the reset function can
2466          * cause the PCI config space reset without restoring the original
2467          * state (saved locally in 'vdev->pm_save').
2468          */
2469         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list)
2470                 vfio_pci_set_power_state(cur, PCI_D0);
2471
2472         ret = pci_reset_bus(pdev);
2473
2474 err_undo:
2475         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) {
2476                 if (cur == cur_mem)
2477                         is_mem = false;
2478                 if (cur == cur_vma)
2479                         break;
2480                 if (is_mem)
2481                         up_write(&cur->memory_lock);
2482                 else
2483                         mutex_unlock(&cur->vma_lock);
2484         }
2485
2486         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list)
2487                 pm_runtime_put(&cur->pdev->dev);
2488 err_unlock:
2489         mutex_unlock(&dev_set->lock);
2490         return ret;
2491 }
2492
2493 static bool vfio_pci_dev_set_needs_reset(struct vfio_device_set *dev_set)
2494 {
2495         struct vfio_pci_core_device *cur;
2496         bool needs_reset = false;
2497
2498         /* No other VFIO device in the set can be open. */
2499         if (vfio_device_set_open_count(dev_set) > 1)
2500                 return false;
2501
2502         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list)
2503                 needs_reset |= cur->needs_reset;
2504         return needs_reset;
2505 }
2506
2507 /*
2508  * If a bus or slot reset is available for the provided dev_set and:
2509  *  - All of the devices affected by that bus or slot reset are unused
2510  *  - At least one of the affected devices is marked dirty via
2511  *    needs_reset (such as by lack of FLR support)
2512  * Then attempt to perform that bus or slot reset.
2513  */
2514 static void vfio_pci_dev_set_try_reset(struct vfio_device_set *dev_set)
2515 {
2516         struct vfio_pci_core_device *cur;
2517         struct pci_dev *pdev;
2518         bool reset_done = false;
2519
2520         if (!vfio_pci_dev_set_needs_reset(dev_set))
2521                 return;
2522
2523         pdev = vfio_pci_dev_set_resettable(dev_set);
2524         if (!pdev)
2525                 return;
2526
2527         /*
2528          * Some of the devices in the bus can be in the runtime suspended
2529          * state. Increment the usage count for all the devices in the dev_set
2530          * before reset and decrement the same after reset.
2531          */
2532         if (!disable_idle_d3 && vfio_pci_dev_set_pm_runtime_get(dev_set))
2533                 return;
2534
2535         if (!pci_reset_bus(pdev))
2536                 reset_done = true;
2537
2538         list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) {
2539                 if (reset_done)
2540                         cur->needs_reset = false;
2541
2542                 if (!disable_idle_d3)
2543                         pm_runtime_put(&cur->pdev->dev);
2544         }
2545 }
2546
2547 void vfio_pci_core_set_params(bool is_nointxmask, bool is_disable_vga,
2548                               bool is_disable_idle_d3)
2549 {
2550         nointxmask = is_nointxmask;
2551         disable_vga = is_disable_vga;
2552         disable_idle_d3 = is_disable_idle_d3;
2553 }
2554 EXPORT_SYMBOL_GPL(vfio_pci_core_set_params);
2555
2556 static void vfio_pci_core_cleanup(void)
2557 {
2558         vfio_pci_uninit_perm_bits();
2559 }
2560
2561 static int __init vfio_pci_core_init(void)
2562 {
2563         /* Allocate shared config space permission data used by all devices */
2564         return vfio_pci_init_perm_bits();
2565 }
2566
2567 module_init(vfio_pci_core_init);
2568 module_exit(vfio_pci_core_cleanup);
2569
2570 MODULE_LICENSE("GPL v2");
2571 MODULE_AUTHOR(DRIVER_AUTHOR);
2572 MODULE_DESCRIPTION(DRIVER_DESC);
This page took 0.182517 seconds and 4 git commands to generate.