[Kimchi-devel] [PATCH] [Kimchi 1/3] Disallow hotplug of graphic cards because it is no supported
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Feb 23 18:35:01 UTC 2016
On 02/22/2016 04:38 PM, Jose Ricardo Ziviani wrote:
> - Currently it is only possible to perform cold plug of 3D graphic
> cards, so this commit blocks hot plug of such device in the backend.
>
> Signed-off-by: Jose Ricardo Ziviani <joserz at linux.vnet.ibm.com>
> ---
> i18n.py | 1 +
> model/host.py | 15 +++++++++++++++
> model/vmhostdevs.py | 5 +++++
> 3 files changed, 21 insertions(+)
>
> diff --git a/i18n.py b/i18n.py
> index 42ee884..4391dff 100644
> --- a/i18n.py
> +++ b/i18n.py
> @@ -142,6 +142,7 @@ messages = {
> "For AMD CPU, add 'iommu=pt iommu=1'."),
> "KCHVMHDEV0004E": _('"name" should be a device name string'),
> "KCHVMHDEV0005E": _('The device %(name)s is probably in use by the host. Unable to attach it to the guest.'),
> + "KCHVMHDEV0006E": _('Hot-plug of device %(name)s is not supported.'),
>
> "KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"),
> "KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"),
> diff --git a/model/host.py b/model/host.py
> index 583accd..53a8692 100644
> --- a/model/host.py
> +++ b/model/host.py
> @@ -18,6 +18,7 @@
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>
> import libvirt
> +import os
> from collections import defaultdict
> from lxml import objectify
>
> @@ -176,6 +177,7 @@ class DeviceModel(object):
>
> info = hostdev.get_dev_info(dev)
> info['multifunction'] = self.is_multifunction_pci(info)
> + info['vga3d'] = self.is_device_3D_controller(info)
> return info
As you are adding a new parameter to the API, please, update docs/API.md
accordingly.
> def is_multifunction_pci(self, info):
> @@ -184,6 +186,19 @@ class DeviceModel(object):
> iommu_group_nr = int(info['iommuGroup'])
> return len(self.iommu_groups[iommu_group_nr]) > 1
>
> + def is_device_3D_controller(self, info):
> + try:
> + with open(os.path.join(info['path'], 'class')) as f:
> + pci_class = int(f.readline().strip(), 16)
> +
> + except:
> + return False
> +
> + if pci_class == 0x030200:
> + return True
> +
> + return False
> +
> @staticmethod
> def _toint(num_str):
> if num_str.startswith('0x'):
> diff --git a/model/vmhostdevs.py b/model/vmhostdevs.py
> index de52cd8..2a56f9f 100644
> --- a/model/vmhostdevs.py
> +++ b/model/vmhostdevs.py
> @@ -184,6 +184,11 @@ class VMHostDevsModel(object):
> DOM_STATE_MAP[dom.info()[0]] == "shutoff"
> pci_infos = sorted(pci_infos, key=itemgetter('name'))
>
> + if dev_model.is_device_3D_controller(dev_info) and \
> + DOM_STATE_MAP[dom.info()[0]] != "shutoff":
> + raise InvalidOperation('KCHVMHDEV0006E',
> + {'name': dev_info['name']})
> +
> # all devices in the group that is going to be attached to the vm
> # must be detached from the host first
> with RollbackContext() as rollback:
More information about the Kimchi-devel
mailing list