assigned-dev.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878
  1. /*
  2. * Kernel-based Virtual Machine - device assignment support
  3. *
  4. * Copyright (C) 2010 Red Hat, Inc. and/or its affiliates.
  5. *
  6. * This work is licensed under the terms of the GNU GPL, version 2. See
  7. * the COPYING file in the top-level directory.
  8. *
  9. */
  10. #include <linux/kvm_host.h>
  11. #include <linux/kvm.h>
  12. #include <linux/uaccess.h>
  13. #include <linux/vmalloc.h>
  14. #include <linux/errno.h>
  15. #include <linux/spinlock.h>
  16. #include <linux/pci.h>
  17. #include <linux/interrupt.h>
  18. #include <linux/slab.h>
  19. #include <linux/namei.h>
  20. #include <linux/fs.h>
  21. #include "irq.h"
  22. static struct kvm_assigned_dev_kernel *kvm_find_assigned_dev(struct list_head *head,
  23. int assigned_dev_id)
  24. {
  25. struct list_head *ptr;
  26. struct kvm_assigned_dev_kernel *match;
  27. list_for_each(ptr, head) {
  28. match = list_entry(ptr, struct kvm_assigned_dev_kernel, list);
  29. if (match->assigned_dev_id == assigned_dev_id)
  30. return match;
  31. }
  32. return NULL;
  33. }
  34. static int find_index_from_host_irq(struct kvm_assigned_dev_kernel
  35. *assigned_dev, int irq)
  36. {
  37. int i, index;
  38. struct msix_entry *host_msix_entries;
  39. host_msix_entries = assigned_dev->host_msix_entries;
  40. index = -1;
  41. for (i = 0; i < assigned_dev->entries_nr; i++)
  42. if (irq == host_msix_entries[i].vector) {
  43. index = i;
  44. break;
  45. }
  46. if (index < 0) {
  47. printk(KERN_WARNING "Fail to find correlated MSI-X entry!\n");
  48. return 0;
  49. }
  50. return index;
  51. }
  52. static irqreturn_t kvm_assigned_dev_thread(int irq, void *dev_id)
  53. {
  54. struct kvm_assigned_dev_kernel *assigned_dev = dev_id;
  55. if (assigned_dev->irq_requested_type & KVM_DEV_IRQ_HOST_INTX) {
  56. spin_lock(&assigned_dev->intx_lock);
  57. disable_irq_nosync(irq);
  58. assigned_dev->host_irq_disabled = true;
  59. spin_unlock(&assigned_dev->intx_lock);
  60. }
  61. kvm_set_irq(assigned_dev->kvm, assigned_dev->irq_source_id,
  62. assigned_dev->guest_irq, 1);
  63. return IRQ_HANDLED;
  64. }
  65. #ifdef __KVM_HAVE_MSIX
  66. static irqreturn_t kvm_assigned_dev_thread_msix(int irq, void *dev_id)
  67. {
  68. struct kvm_assigned_dev_kernel *assigned_dev = dev_id;
  69. int index = find_index_from_host_irq(assigned_dev, irq);
  70. u32 vector;
  71. if (index >= 0) {
  72. vector = assigned_dev->guest_msix_entries[index].vector;
  73. kvm_set_irq(assigned_dev->kvm, assigned_dev->irq_source_id,
  74. vector, 1);
  75. }
  76. return IRQ_HANDLED;
  77. }
  78. #endif
  79. /* Ack the irq line for an assigned device */
  80. static void kvm_assigned_dev_ack_irq(struct kvm_irq_ack_notifier *kian)
  81. {
  82. struct kvm_assigned_dev_kernel *dev =
  83. container_of(kian, struct kvm_assigned_dev_kernel,
  84. ack_notifier);
  85. kvm_set_irq(dev->kvm, dev->irq_source_id, dev->guest_irq, 0);
  86. /* The guest irq may be shared so this ack may be
  87. * from another device.
  88. */
  89. spin_lock(&dev->intx_lock);
  90. if (dev->host_irq_disabled) {
  91. enable_irq(dev->host_irq);
  92. dev->host_irq_disabled = false;
  93. }
  94. spin_unlock(&dev->intx_lock);
  95. }
  96. static void deassign_guest_irq(struct kvm *kvm,
  97. struct kvm_assigned_dev_kernel *assigned_dev)
  98. {
  99. if (assigned_dev->ack_notifier.gsi != -1)
  100. kvm_unregister_irq_ack_notifier(kvm,
  101. &assigned_dev->ack_notifier);
  102. kvm_set_irq(assigned_dev->kvm, assigned_dev->irq_source_id,
  103. assigned_dev->guest_irq, 0);
  104. if (assigned_dev->irq_source_id != -1)
  105. kvm_free_irq_source_id(kvm, assigned_dev->irq_source_id);
  106. assigned_dev->irq_source_id = -1;
  107. assigned_dev->irq_requested_type &= ~(KVM_DEV_IRQ_GUEST_MASK);
  108. }
  109. /* The function implicit hold kvm->lock mutex due to cancel_work_sync() */
  110. static void deassign_host_irq(struct kvm *kvm,
  111. struct kvm_assigned_dev_kernel *assigned_dev)
  112. {
  113. /*
  114. * We disable irq here to prevent further events.
  115. *
  116. * Notice this maybe result in nested disable if the interrupt type is
  117. * INTx, but it's OK for we are going to free it.
  118. *
  119. * If this function is a part of VM destroy, please ensure that till
  120. * now, the kvm state is still legal for probably we also have to wait
  121. * on a currently running IRQ handler.
  122. */
  123. if (assigned_dev->irq_requested_type & KVM_DEV_IRQ_HOST_MSIX) {
  124. int i;
  125. for (i = 0; i < assigned_dev->entries_nr; i++)
  126. disable_irq(assigned_dev->host_msix_entries[i].vector);
  127. for (i = 0; i < assigned_dev->entries_nr; i++)
  128. free_irq(assigned_dev->host_msix_entries[i].vector,
  129. assigned_dev);
  130. assigned_dev->entries_nr = 0;
  131. kfree(assigned_dev->host_msix_entries);
  132. kfree(assigned_dev->guest_msix_entries);
  133. pci_disable_msix(assigned_dev->dev);
  134. } else {
  135. /* Deal with MSI and INTx */
  136. disable_irq(assigned_dev->host_irq);
  137. free_irq(assigned_dev->host_irq, assigned_dev);
  138. if (assigned_dev->irq_requested_type & KVM_DEV_IRQ_HOST_MSI)
  139. pci_disable_msi(assigned_dev->dev);
  140. }
  141. assigned_dev->irq_requested_type &= ~(KVM_DEV_IRQ_HOST_MASK);
  142. }
  143. static int kvm_deassign_irq(struct kvm *kvm,
  144. struct kvm_assigned_dev_kernel *assigned_dev,
  145. unsigned long irq_requested_type)
  146. {
  147. unsigned long guest_irq_type, host_irq_type;
  148. if (!irqchip_in_kernel(kvm))
  149. return -EINVAL;
  150. /* no irq assignment to deassign */
  151. if (!assigned_dev->irq_requested_type)
  152. return -ENXIO;
  153. host_irq_type = irq_requested_type & KVM_DEV_IRQ_HOST_MASK;
  154. guest_irq_type = irq_requested_type & KVM_DEV_IRQ_GUEST_MASK;
  155. if (host_irq_type)
  156. deassign_host_irq(kvm, assigned_dev);
  157. if (guest_irq_type)
  158. deassign_guest_irq(kvm, assigned_dev);
  159. return 0;
  160. }
  161. static void kvm_free_assigned_irq(struct kvm *kvm,
  162. struct kvm_assigned_dev_kernel *assigned_dev)
  163. {
  164. kvm_deassign_irq(kvm, assigned_dev, assigned_dev->irq_requested_type);
  165. }
  166. static void kvm_free_assigned_device(struct kvm *kvm,
  167. struct kvm_assigned_dev_kernel
  168. *assigned_dev)
  169. {
  170. kvm_free_assigned_irq(kvm, assigned_dev);
  171. pci_reset_function(assigned_dev->dev);
  172. if (pci_load_and_free_saved_state(assigned_dev->dev,
  173. &assigned_dev->pci_saved_state))
  174. printk(KERN_INFO "%s: Couldn't reload %s saved state\n",
  175. __func__, dev_name(&assigned_dev->dev->dev));
  176. else
  177. pci_restore_state(assigned_dev->dev);
  178. assigned_dev->dev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED;
  179. pci_release_regions(assigned_dev->dev);
  180. pci_disable_device(assigned_dev->dev);
  181. pci_dev_put(assigned_dev->dev);
  182. list_del(&assigned_dev->list);
  183. kfree(assigned_dev);
  184. }
  185. void kvm_free_all_assigned_devices(struct kvm *kvm)
  186. {
  187. struct list_head *ptr, *ptr2;
  188. struct kvm_assigned_dev_kernel *assigned_dev;
  189. list_for_each_safe(ptr, ptr2, &kvm->arch.assigned_dev_head) {
  190. assigned_dev = list_entry(ptr,
  191. struct kvm_assigned_dev_kernel,
  192. list);
  193. kvm_free_assigned_device(kvm, assigned_dev);
  194. }
  195. }
  196. static int assigned_device_enable_host_intx(struct kvm *kvm,
  197. struct kvm_assigned_dev_kernel *dev)
  198. {
  199. dev->host_irq = dev->dev->irq;
  200. /* Even though this is PCI, we don't want to use shared
  201. * interrupts. Sharing host devices with guest-assigned devices
  202. * on the same interrupt line is not a happy situation: there
  203. * are going to be long delays in accepting, acking, etc.
  204. */
  205. if (request_threaded_irq(dev->host_irq, NULL, kvm_assigned_dev_thread,
  206. IRQF_ONESHOT, dev->irq_name, dev))
  207. return -EIO;
  208. return 0;
  209. }
  210. #ifdef __KVM_HAVE_MSI
  211. static int assigned_device_enable_host_msi(struct kvm *kvm,
  212. struct kvm_assigned_dev_kernel *dev)
  213. {
  214. int r;
  215. if (!dev->dev->msi_enabled) {
  216. r = pci_enable_msi(dev->dev);
  217. if (r)
  218. return r;
  219. }
  220. dev->host_irq = dev->dev->irq;
  221. if (request_threaded_irq(dev->host_irq, NULL, kvm_assigned_dev_thread,
  222. 0, dev->irq_name, dev)) {
  223. pci_disable_msi(dev->dev);
  224. return -EIO;
  225. }
  226. return 0;
  227. }
  228. #endif
  229. #ifdef __KVM_HAVE_MSIX
  230. static int assigned_device_enable_host_msix(struct kvm *kvm,
  231. struct kvm_assigned_dev_kernel *dev)
  232. {
  233. int i, r = -EINVAL;
  234. /* host_msix_entries and guest_msix_entries should have been
  235. * initialized */
  236. if (dev->entries_nr == 0)
  237. return r;
  238. r = pci_enable_msix(dev->dev, dev->host_msix_entries, dev->entries_nr);
  239. if (r)
  240. return r;
  241. for (i = 0; i < dev->entries_nr; i++) {
  242. r = request_threaded_irq(dev->host_msix_entries[i].vector,
  243. NULL, kvm_assigned_dev_thread_msix,
  244. 0, dev->irq_name, dev);
  245. if (r)
  246. goto err;
  247. }
  248. return 0;
  249. err:
  250. for (i -= 1; i >= 0; i--)
  251. free_irq(dev->host_msix_entries[i].vector, dev);
  252. pci_disable_msix(dev->dev);
  253. return r;
  254. }
  255. #endif
  256. static int assigned_device_enable_guest_intx(struct kvm *kvm,
  257. struct kvm_assigned_dev_kernel *dev,
  258. struct kvm_assigned_irq *irq)
  259. {
  260. dev->guest_irq = irq->guest_irq;
  261. dev->ack_notifier.gsi = irq->guest_irq;
  262. return 0;
  263. }
  264. #ifdef __KVM_HAVE_MSI
  265. static int assigned_device_enable_guest_msi(struct kvm *kvm,
  266. struct kvm_assigned_dev_kernel *dev,
  267. struct kvm_assigned_irq *irq)
  268. {
  269. dev->guest_irq = irq->guest_irq;
  270. dev->ack_notifier.gsi = -1;
  271. dev->host_irq_disabled = false;
  272. return 0;
  273. }
  274. #endif
  275. #ifdef __KVM_HAVE_MSIX
  276. static int assigned_device_enable_guest_msix(struct kvm *kvm,
  277. struct kvm_assigned_dev_kernel *dev,
  278. struct kvm_assigned_irq *irq)
  279. {
  280. dev->guest_irq = irq->guest_irq;
  281. dev->ack_notifier.gsi = -1;
  282. dev->host_irq_disabled = false;
  283. return 0;
  284. }
  285. #endif
  286. static int assign_host_irq(struct kvm *kvm,
  287. struct kvm_assigned_dev_kernel *dev,
  288. __u32 host_irq_type)
  289. {
  290. int r = -EEXIST;
  291. if (dev->irq_requested_type & KVM_DEV_IRQ_HOST_MASK)
  292. return r;
  293. snprintf(dev->irq_name, sizeof(dev->irq_name), "kvm:%s",
  294. pci_name(dev->dev));
  295. switch (host_irq_type) {
  296. case KVM_DEV_IRQ_HOST_INTX:
  297. r = assigned_device_enable_host_intx(kvm, dev);
  298. break;
  299. #ifdef __KVM_HAVE_MSI
  300. case KVM_DEV_IRQ_HOST_MSI:
  301. r = assigned_device_enable_host_msi(kvm, dev);
  302. break;
  303. #endif
  304. #ifdef __KVM_HAVE_MSIX
  305. case KVM_DEV_IRQ_HOST_MSIX:
  306. r = assigned_device_enable_host_msix(kvm, dev);
  307. break;
  308. #endif
  309. default:
  310. r = -EINVAL;
  311. }
  312. if (!r)
  313. dev->irq_requested_type |= host_irq_type;
  314. return r;
  315. }
  316. static int assign_guest_irq(struct kvm *kvm,
  317. struct kvm_assigned_dev_kernel *dev,
  318. struct kvm_assigned_irq *irq,
  319. unsigned long guest_irq_type)
  320. {
  321. int id;
  322. int r = -EEXIST;
  323. if (dev->irq_requested_type & KVM_DEV_IRQ_GUEST_MASK)
  324. return r;
  325. id = kvm_request_irq_source_id(kvm);
  326. if (id < 0)
  327. return id;
  328. dev->irq_source_id = id;
  329. switch (guest_irq_type) {
  330. case KVM_DEV_IRQ_GUEST_INTX:
  331. r = assigned_device_enable_guest_intx(kvm, dev, irq);
  332. break;
  333. #ifdef __KVM_HAVE_MSI
  334. case KVM_DEV_IRQ_GUEST_MSI:
  335. r = assigned_device_enable_guest_msi(kvm, dev, irq);
  336. break;
  337. #endif
  338. #ifdef __KVM_HAVE_MSIX
  339. case KVM_DEV_IRQ_GUEST_MSIX:
  340. r = assigned_device_enable_guest_msix(kvm, dev, irq);
  341. break;
  342. #endif
  343. default:
  344. r = -EINVAL;
  345. }
  346. if (!r) {
  347. dev->irq_requested_type |= guest_irq_type;
  348. if (dev->ack_notifier.gsi != -1)
  349. kvm_register_irq_ack_notifier(kvm, &dev->ack_notifier);
  350. } else
  351. kvm_free_irq_source_id(kvm, dev->irq_source_id);
  352. return r;
  353. }
  354. /* TODO Deal with KVM_DEV_IRQ_ASSIGNED_MASK_MSIX */
  355. static int kvm_vm_ioctl_assign_irq(struct kvm *kvm,
  356. struct kvm_assigned_irq *assigned_irq)
  357. {
  358. int r = -EINVAL;
  359. struct kvm_assigned_dev_kernel *match;
  360. unsigned long host_irq_type, guest_irq_type;
  361. if (!irqchip_in_kernel(kvm))
  362. return r;
  363. mutex_lock(&kvm->lock);
  364. r = -ENODEV;
  365. match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  366. assigned_irq->assigned_dev_id);
  367. if (!match)
  368. goto out;
  369. host_irq_type = (assigned_irq->flags & KVM_DEV_IRQ_HOST_MASK);
  370. guest_irq_type = (assigned_irq->flags & KVM_DEV_IRQ_GUEST_MASK);
  371. r = -EINVAL;
  372. /* can only assign one type at a time */
  373. if (hweight_long(host_irq_type) > 1)
  374. goto out;
  375. if (hweight_long(guest_irq_type) > 1)
  376. goto out;
  377. if (host_irq_type == 0 && guest_irq_type == 0)
  378. goto out;
  379. r = 0;
  380. if (host_irq_type)
  381. r = assign_host_irq(kvm, match, host_irq_type);
  382. if (r)
  383. goto out;
  384. if (guest_irq_type)
  385. r = assign_guest_irq(kvm, match, assigned_irq, guest_irq_type);
  386. out:
  387. mutex_unlock(&kvm->lock);
  388. return r;
  389. }
  390. static int kvm_vm_ioctl_deassign_dev_irq(struct kvm *kvm,
  391. struct kvm_assigned_irq
  392. *assigned_irq)
  393. {
  394. int r = -ENODEV;
  395. struct kvm_assigned_dev_kernel *match;
  396. mutex_lock(&kvm->lock);
  397. match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  398. assigned_irq->assigned_dev_id);
  399. if (!match)
  400. goto out;
  401. r = kvm_deassign_irq(kvm, match, assigned_irq->flags);
  402. out:
  403. mutex_unlock(&kvm->lock);
  404. return r;
  405. }
  406. /*
  407. * We want to test whether the caller has been granted permissions to
  408. * use this device. To be able to configure and control the device,
  409. * the user needs access to PCI configuration space and BAR resources.
  410. * These are accessed through PCI sysfs. PCI config space is often
  411. * passed to the process calling this ioctl via file descriptor, so we
  412. * can't rely on access to that file. We can check for permissions
  413. * on each of the BAR resource files, which is a pretty clear
  414. * indicator that the user has been granted access to the device.
  415. */
  416. static int probe_sysfs_permissions(struct pci_dev *dev)
  417. {
  418. #ifdef CONFIG_SYSFS
  419. int i;
  420. bool bar_found = false;
  421. for (i = PCI_STD_RESOURCES; i <= PCI_STD_RESOURCE_END; i++) {
  422. char *kpath, *syspath;
  423. struct path path;
  424. struct inode *inode;
  425. int r;
  426. if (!pci_resource_len(dev, i))
  427. continue;
  428. kpath = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
  429. if (!kpath)
  430. return -ENOMEM;
  431. /* Per sysfs-rules, sysfs is always at /sys */
  432. syspath = kasprintf(GFP_KERNEL, "/sys%s/resource%d", kpath, i);
  433. kfree(kpath);
  434. if (!syspath)
  435. return -ENOMEM;
  436. r = kern_path(syspath, LOOKUP_FOLLOW, &path);
  437. kfree(syspath);
  438. if (r)
  439. return r;
  440. inode = path.dentry->d_inode;
  441. r = inode_permission(inode, MAY_READ | MAY_WRITE | MAY_ACCESS);
  442. path_put(&path);
  443. if (r)
  444. return r;
  445. bar_found = true;
  446. }
  447. /* If no resources, probably something special */
  448. if (!bar_found)
  449. return -EPERM;
  450. return 0;
  451. #else
  452. return -EINVAL; /* No way to control the device without sysfs */
  453. #endif
  454. }
  455. static int kvm_vm_ioctl_assign_device(struct kvm *kvm,
  456. struct kvm_assigned_pci_dev *assigned_dev)
  457. {
  458. int r = 0, idx;
  459. struct kvm_assigned_dev_kernel *match;
  460. struct pci_dev *dev;
  461. u8 header_type;
  462. if (!(assigned_dev->flags & KVM_DEV_ASSIGN_ENABLE_IOMMU))
  463. return -EINVAL;
  464. mutex_lock(&kvm->lock);
  465. idx = srcu_read_lock(&kvm->srcu);
  466. match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  467. assigned_dev->assigned_dev_id);
  468. if (match) {
  469. /* device already assigned */
  470. r = -EEXIST;
  471. goto out;
  472. }
  473. match = kzalloc(sizeof(struct kvm_assigned_dev_kernel), GFP_KERNEL);
  474. if (match == NULL) {
  475. printk(KERN_INFO "%s: Couldn't allocate memory\n",
  476. __func__);
  477. r = -ENOMEM;
  478. goto out;
  479. }
  480. dev = pci_get_domain_bus_and_slot(assigned_dev->segnr,
  481. assigned_dev->busnr,
  482. assigned_dev->devfn);
  483. if (!dev) {
  484. printk(KERN_INFO "%s: host device not found\n", __func__);
  485. r = -EINVAL;
  486. goto out_free;
  487. }
  488. /* Don't allow bridges to be assigned */
  489. pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type);
  490. if ((header_type & PCI_HEADER_TYPE) != PCI_HEADER_TYPE_NORMAL) {
  491. r = -EPERM;
  492. goto out_put;
  493. }
  494. r = probe_sysfs_permissions(dev);
  495. if (r)
  496. goto out_put;
  497. if (pci_enable_device(dev)) {
  498. printk(KERN_INFO "%s: Could not enable PCI device\n", __func__);
  499. r = -EBUSY;
  500. goto out_put;
  501. }
  502. r = pci_request_regions(dev, "kvm_assigned_device");
  503. if (r) {
  504. printk(KERN_INFO "%s: Could not get access to device regions\n",
  505. __func__);
  506. goto out_disable;
  507. }
  508. pci_reset_function(dev);
  509. pci_save_state(dev);
  510. match->pci_saved_state = pci_store_saved_state(dev);
  511. if (!match->pci_saved_state)
  512. printk(KERN_DEBUG "%s: Couldn't store %s saved state\n",
  513. __func__, dev_name(&dev->dev));
  514. match->assigned_dev_id = assigned_dev->assigned_dev_id;
  515. match->host_segnr = assigned_dev->segnr;
  516. match->host_busnr = assigned_dev->busnr;
  517. match->host_devfn = assigned_dev->devfn;
  518. match->flags = assigned_dev->flags;
  519. match->dev = dev;
  520. spin_lock_init(&match->intx_lock);
  521. match->irq_source_id = -1;
  522. match->kvm = kvm;
  523. match->ack_notifier.irq_acked = kvm_assigned_dev_ack_irq;
  524. list_add(&match->list, &kvm->arch.assigned_dev_head);
  525. if (!kvm->arch.iommu_domain) {
  526. r = kvm_iommu_map_guest(kvm);
  527. if (r)
  528. goto out_list_del;
  529. }
  530. r = kvm_assign_device(kvm, match);
  531. if (r)
  532. goto out_list_del;
  533. out:
  534. srcu_read_unlock(&kvm->srcu, idx);
  535. mutex_unlock(&kvm->lock);
  536. return r;
  537. out_list_del:
  538. if (pci_load_and_free_saved_state(dev, &match->pci_saved_state))
  539. printk(KERN_INFO "%s: Couldn't reload %s saved state\n",
  540. __func__, dev_name(&dev->dev));
  541. list_del(&match->list);
  542. pci_release_regions(dev);
  543. out_disable:
  544. pci_disable_device(dev);
  545. out_put:
  546. pci_dev_put(dev);
  547. out_free:
  548. kfree(match);
  549. srcu_read_unlock(&kvm->srcu, idx);
  550. mutex_unlock(&kvm->lock);
  551. return r;
  552. }
  553. static int kvm_vm_ioctl_deassign_device(struct kvm *kvm,
  554. struct kvm_assigned_pci_dev *assigned_dev)
  555. {
  556. int r = 0;
  557. struct kvm_assigned_dev_kernel *match;
  558. mutex_lock(&kvm->lock);
  559. match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  560. assigned_dev->assigned_dev_id);
  561. if (!match) {
  562. printk(KERN_INFO "%s: device hasn't been assigned before, "
  563. "so cannot be deassigned\n", __func__);
  564. r = -EINVAL;
  565. goto out;
  566. }
  567. kvm_deassign_device(kvm, match);
  568. kvm_free_assigned_device(kvm, match);
  569. out:
  570. mutex_unlock(&kvm->lock);
  571. return r;
  572. }
  573. #ifdef __KVM_HAVE_MSIX
  574. static int kvm_vm_ioctl_set_msix_nr(struct kvm *kvm,
  575. struct kvm_assigned_msix_nr *entry_nr)
  576. {
  577. int r = 0;
  578. struct kvm_assigned_dev_kernel *adev;
  579. mutex_lock(&kvm->lock);
  580. adev = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  581. entry_nr->assigned_dev_id);
  582. if (!adev) {
  583. r = -EINVAL;
  584. goto msix_nr_out;
  585. }
  586. if (adev->entries_nr == 0) {
  587. adev->entries_nr = entry_nr->entry_nr;
  588. if (adev->entries_nr == 0 ||
  589. adev->entries_nr > KVM_MAX_MSIX_PER_DEV) {
  590. r = -EINVAL;
  591. goto msix_nr_out;
  592. }
  593. adev->host_msix_entries = kzalloc(sizeof(struct msix_entry) *
  594. entry_nr->entry_nr,
  595. GFP_KERNEL);
  596. if (!adev->host_msix_entries) {
  597. r = -ENOMEM;
  598. goto msix_nr_out;
  599. }
  600. adev->guest_msix_entries =
  601. kzalloc(sizeof(struct msix_entry) * entry_nr->entry_nr,
  602. GFP_KERNEL);
  603. if (!adev->guest_msix_entries) {
  604. kfree(adev->host_msix_entries);
  605. r = -ENOMEM;
  606. goto msix_nr_out;
  607. }
  608. } else /* Not allowed set MSI-X number twice */
  609. r = -EINVAL;
  610. msix_nr_out:
  611. mutex_unlock(&kvm->lock);
  612. return r;
  613. }
  614. static int kvm_vm_ioctl_set_msix_entry(struct kvm *kvm,
  615. struct kvm_assigned_msix_entry *entry)
  616. {
  617. int r = 0, i;
  618. struct kvm_assigned_dev_kernel *adev;
  619. mutex_lock(&kvm->lock);
  620. adev = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
  621. entry->assigned_dev_id);
  622. if (!adev) {
  623. r = -EINVAL;
  624. goto msix_entry_out;
  625. }
  626. for (i = 0; i < adev->entries_nr; i++)
  627. if (adev->guest_msix_entries[i].vector == 0 ||
  628. adev->guest_msix_entries[i].entry == entry->entry) {
  629. adev->guest_msix_entries[i].entry = entry->entry;
  630. adev->guest_msix_entries[i].vector = entry->gsi;
  631. adev->host_msix_entries[i].entry = entry->entry;
  632. break;
  633. }
  634. if (i == adev->entries_nr) {
  635. r = -ENOSPC;
  636. goto msix_entry_out;
  637. }
  638. msix_entry_out:
  639. mutex_unlock(&kvm->lock);
  640. return r;
  641. }
  642. #endif
  643. long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
  644. unsigned long arg)
  645. {
  646. void __user *argp = (void __user *)arg;
  647. int r;
  648. switch (ioctl) {
  649. case KVM_ASSIGN_PCI_DEVICE: {
  650. struct kvm_assigned_pci_dev assigned_dev;
  651. r = -EFAULT;
  652. if (copy_from_user(&assigned_dev, argp, sizeof assigned_dev))
  653. goto out;
  654. r = kvm_vm_ioctl_assign_device(kvm, &assigned_dev);
  655. if (r)
  656. goto out;
  657. break;
  658. }
  659. case KVM_ASSIGN_IRQ: {
  660. r = -EOPNOTSUPP;
  661. break;
  662. }
  663. case KVM_ASSIGN_DEV_IRQ: {
  664. struct kvm_assigned_irq assigned_irq;
  665. r = -EFAULT;
  666. if (copy_from_user(&assigned_irq, argp, sizeof assigned_irq))
  667. goto out;
  668. r = kvm_vm_ioctl_assign_irq(kvm, &assigned_irq);
  669. if (r)
  670. goto out;
  671. break;
  672. }
  673. case KVM_DEASSIGN_DEV_IRQ: {
  674. struct kvm_assigned_irq assigned_irq;
  675. r = -EFAULT;
  676. if (copy_from_user(&assigned_irq, argp, sizeof assigned_irq))
  677. goto out;
  678. r = kvm_vm_ioctl_deassign_dev_irq(kvm, &assigned_irq);
  679. if (r)
  680. goto out;
  681. break;
  682. }
  683. case KVM_DEASSIGN_PCI_DEVICE: {
  684. struct kvm_assigned_pci_dev assigned_dev;
  685. r = -EFAULT;
  686. if (copy_from_user(&assigned_dev, argp, sizeof assigned_dev))
  687. goto out;
  688. r = kvm_vm_ioctl_deassign_device(kvm, &assigned_dev);
  689. if (r)
  690. goto out;
  691. break;
  692. }
  693. #ifdef KVM_CAP_IRQ_ROUTING
  694. case KVM_SET_GSI_ROUTING: {
  695. struct kvm_irq_routing routing;
  696. struct kvm_irq_routing __user *urouting;
  697. struct kvm_irq_routing_entry *entries;
  698. r = -EFAULT;
  699. if (copy_from_user(&routing, argp, sizeof(routing)))
  700. goto out;
  701. r = -EINVAL;
  702. if (routing.nr >= KVM_MAX_IRQ_ROUTES)
  703. goto out;
  704. if (routing.flags)
  705. goto out;
  706. r = -ENOMEM;
  707. entries = vmalloc(routing.nr * sizeof(*entries));
  708. if (!entries)
  709. goto out;
  710. r = -EFAULT;
  711. urouting = argp;
  712. if (copy_from_user(entries, urouting->entries,
  713. routing.nr * sizeof(*entries)))
  714. goto out_free_irq_routing;
  715. r = kvm_set_irq_routing(kvm, entries, routing.nr,
  716. routing.flags);
  717. out_free_irq_routing:
  718. vfree(entries);
  719. break;
  720. }
  721. #endif /* KVM_CAP_IRQ_ROUTING */
  722. #ifdef __KVM_HAVE_MSIX
  723. case KVM_ASSIGN_SET_MSIX_NR: {
  724. struct kvm_assigned_msix_nr entry_nr;
  725. r = -EFAULT;
  726. if (copy_from_user(&entry_nr, argp, sizeof entry_nr))
  727. goto out;
  728. r = kvm_vm_ioctl_set_msix_nr(kvm, &entry_nr);
  729. if (r)
  730. goto out;
  731. break;
  732. }
  733. case KVM_ASSIGN_SET_MSIX_ENTRY: {
  734. struct kvm_assigned_msix_entry entry;
  735. r = -EFAULT;
  736. if (copy_from_user(&entry, argp, sizeof entry))
  737. goto out;
  738. r = kvm_vm_ioctl_set_msix_entry(kvm, &entry);
  739. if (r)
  740. goto out;
  741. break;
  742. }
  743. #endif
  744. default:
  745. r = -ENOTTY;
  746. break;
  747. }
  748. out:
  749. return r;
  750. }