Compare commits

..

353 Commits

Author SHA1 Message Date
74aa4d5b6b Disable polkit by default 2018-01-24 16:02:39 -06:00
b7f2ffc0cc Make polkit support optional
This commit modifies the spec file for libvirt to make the inclusion of
support for PolicyKit optional. It is enabled by default to preserve the
existing behavior, but can be disabled by passing `--without-polkit` to
`rpmbuild`.
2018-01-24 16:02:39 -06:00
Daniel P. Berrange
21316e7a45 Avoid undefined symbols from new linker flags
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-23 13:01:06 +00:00
Daniel P. Berrange
8adbb7a402 Cull changelog before 2017
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-19 17:34:53 +00:00
Daniel P. Berrange
3f19d41908 Fix rpc package name
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-19 16:37:43 +00:00
Daniel P. Berrange
34da93e0c9 Fix typos
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-19 16:30:19 +00:00
Daniel P. Berrange
208f506190 Add rpcgen + tirpc-devel dependancies
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-19 16:28:25 +00:00
Daniel P. Berrange
0ca715cad9 Update to version 4.0.0
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2018-01-19 16:14:30 +00:00
Cole Robinson
0f5d8c1c22 Rebuild for xen 4.10 2017-12-20 07:05:15 -05:00
Daniel P. Berrange
a56bcbd063 Update to 3.10.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-12-05 11:11:01 +00:00
Daniel P. Berrange
89c3fa751c Update to 3.9.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-11-03 11:14:48 +00:00
Daniel P. Berrange
051644ffcb Update to 3.8.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-10-04 14:46:26 +01:00
Daniel P. Berrange
2a9c282548 Update to 3.7.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-09-04 11:33:13 +01:00
Daniel P. Berrange
2ae80af461 Disable qemumonitorjsontest temporarily
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-08-04 10:30:58 +01:00
Daniel P. Berrange
7335ede0e1 Rebase to 3.6.0
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-08-02 10:47:35 +01:00
Florian Weimer
6c92ba3805 Rebuild with fixed binutils for ppc64le (#1475636) 2017-07-30 19:09:40 +02:00
Daniel P. Berrange
446f680673 Disabled RBD on i386, arm, ppc64 (rhbz #1474743)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-07-25 11:11:19 +01:00
Daniel P. Berrange
3f56aa2870 Rebuild for changed rbd soname
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-07-25 09:14:27 +01:00
Cole Robinson
3cec91694f Remove unused patch 2017-07-17 09:01:37 -04:00
Cole Robinson
cb0cfa566f Rebuild for xen 4.9 2017-07-17 09:00:52 -04:00
Petr Písař
a27acebf66 perl dependency renamed to perl-interpreter <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules> 2017-07-12 15:20:34 +02:00
Daniel P. Berrange
99d3a0ca1a Update to 3.5.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-07-06 15:32:03 +01:00
Daniel P. Berrange
9c962ebc4f Add patch to fix gnulib build
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-06-05 11:13:10 +01:00
Daniel P. Berrange
99cbbf6606 Fix clash between gnulib and glibc system headers
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-06-05 11:11:32 +01:00
Daniel P. Berrange
b73e509648 Update to 3.4.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-06-02 12:08:34 +01:00
Daniel P. Berrange
b23ff9c0f7 Update to 3.3.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-05-08 10:45:19 +01:00
Cole Robinson
20f9ed9c4c Remove unused patch 2017-05-04 20:10:10 -04:00
Daniel P. Berrange
04cb28c315 Update to 3.2.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-04-03 14:30:13 +01:00
Daniel P. Berrange
a74ea318d1 Update to 3.1.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-03-03 16:48:12 +00:00
Fedora Release Engineering
98ed6b4e36 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild 2017-02-10 19:39:29 +00:00
Daniel P. Berrange
2c49d1fd11 Update to 3.0.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-01-19 10:16:16 +00:00
Igor Gnatenko
6e7bca6631 Rebuild for readline 7.x
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2017-01-12 17:30:33 +01:00
Daniel P. Berrange
2fe145bb02 Rebuild to pick up new libxen* soname
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-12-08 18:31:20 +00:00
Daniel P. Berrange
10b7d235e3 Temp hack for gnutls 3.5.6 regression
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-12-05 12:06:04 +00:00
Daniel P. Berrange
232e2e7de2 Add workaround for wireshark-devel brokeness yet again
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-12-05 11:21:03 +00:00
Daniel P. Berrange
fb1e4b061e Kill changeog entries prior to 2015
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-12-05 10:07:41 +00:00
Daniel P. Berrange
0b1a013081 Update to 2.5.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-12-05 10:06:54 +00:00
Daniel P. Berrange
a972457f43 Update to 2.4.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-11-02 09:20:09 +00:00
Daniel P. Berrange
67cfa34a05 Update to 2.3.0 release 2016-10-06 11:42:08 +01:00
Daniel P. Berrange
fc2ebb7646 Update to 2.2.0 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-09-05 12:42:42 +01:00
Daniel P. Berrange
e92b461b4f Upload 2.1.0 tar
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-08-02 15:12:35 +01:00
Daniel P. Berrange
b1ac7b5791 Rebase to 2.1.0
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-08-02 15:11:55 +01:00
Richard W.M. Jones
88424efe85 Rebuild to attempt to fix 'nothing provides libxenctrl.so.4.6()(64bit) needed
by libvirt-daemon-2.0.0-1.fc25.x86_64'
2016-07-23 16:35:53 +01:00
Daniel P. Berrange
4e2aab98a2 Add deps on systemd-container 2016-07-13 17:50:00 +01:00
Daniel P. Berrange
f4bc1a2fe2 Disable wireshark 2016-07-01 11:21:55 +01:00
Daniel P. Berrange
a4bf2768b8 Update to 2.0.0 release 2016-07-01 10:43:53 +01:00
Richard W.M. Jones
47cd44e9da Rebuild against new glibc
(see https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/VUOTESHSWFRCYPXIVG6BSMAUITS7QCK2/).
2016-06-13 14:29:22 +01:00
Daniel P. Berrange
731c6b90ff Add patch to avoid building against libsystemd-daemon.so
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-06-07 09:48:24 +01:00
Daniel P. Berrange
47ca46905d Rebase to 1.3.5
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-06-06 11:46:44 +01:00
Cole Robinson
860ffc5b13 Fix libxl video config via virt-install (bz #1334557)
Advertise fedora edk2 firmware builds to apps (bz #1335395)
2016-05-20 16:37:26 -04:00
Cole Robinson
611b2ee520 Rebased to version 1.3.4 2016-05-02 20:22:05 -04:00
Richard W.M. Jones
edcb926f9d Fix 200ms performance problem when waiting for monitor socket of new domains. 2016-04-19 11:53:54 +01:00
Cole Robinson
caebff8304 Re-run autotools, since patches touch configure 2016-04-15 06:23:13 -04:00
Cole Robinson
8fa41135ca libvirt assigns same address to two PCI devices (bz #1325085)
Fix build with -Werror
2016-04-14 19:46:33 -04:00
Cole Robinson
0debbff964 Rebased to version 1.3.3 2016-04-07 09:55:06 -04:00
Cole Robinson
d6cc78be66 Fix qemu:///session disconnect after 30 seconds
Fix 'permission denied' errors trying to unlink disk images (bz #1289327)
Fix qemu:///session connect race failures (bz #1271183)
driver: log missing modules as INFO, not WARN (bz #1274849)
2016-03-17 17:38:30 -04:00
Richard W.M. Jones
8d9645735e Add fix for RHBZ#1315606. 2016-03-09 14:51:59 +00:00
Daniel P. Berrange
4c65f08330 Update to 1.3.2 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-03-01 14:26:53 +00:00
Daniel P. Berrange
2427f8f078 Re-enable wireshark 2016-02-24 22:23:39 +00:00
Dennis Gilmore
d168e4f934 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 2016-02-04 04:06:44 +00:00
Daniel P. Berrange
4dd365589f Disable wireshark due to https://bugzilla.redhat.com/show_bug.cgi?id=1300002 2016-01-19 17:44:37 +00:00
Daniel P. Berrange
50e253df29 Update to 1.3.1 release 2016-01-19 14:44:36 +00:00
Daniel P. Berrange
cb71801a2b Add patch to fix 32-bit test suite check
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2015-12-11 12:15:31 +00:00
Daniel P. Berrange
4a9c74e91d Update to 1.3.0 release 2015-12-09 20:53:57 +00:00
Daniel P. Berrange
281508ec99 Update to 1.2.21 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2015-11-11 10:01:32 +00:00
Cole Robinson
feb92626e1 Rebuild for xen 4.6 2015-10-11 16:08:21 -04:00
Daniel P. Berrange
93cadb0880 Update to 1.2.20 release 2015-10-02 15:58:35 +01:00
Daniel P. Berrange
dd6b57aa60 Update to 1.2.19 release 2015-09-02 12:52:54 +01:00
Daniel P. Berrange
b8cb754e9d Add workaround for //bugzilla.redhat.com/show_bug.cgi?id=1250020 2015-08-04 12:29:04 +01:00
Daniel P. Berrange
dbe61507bd Update to 1.2.18 release 2015-08-04 09:50:35 +01:00
Richard W.M. Jones
ce7b23d9d0 Fix 'Cannot write data: Broken pipe [code=38 domain=7]' (RHBZ#1247746). 2015-07-29 11:35:59 +01:00
Cole Robinson
8ded6ff93e Fix dep for f23 polkit packaging changes 2015-07-14 14:05:12 -04:00
Cole Robinson
1ef96f3488 Disable test suite, currently crashing on i686 2015-07-14 12:42:13 -04:00
Cole Robinson
ee3bf37900 Update spec for 1.2.17 2015-07-14 12:23:04 -04:00
Peter Robinson
7452a06938 Rebuild (aarch64) 2015-07-12 22:27:12 +01:00
Daniel Veillard
fe8f9ed9c4 Upstream release 1.2.17 2015-07-02 13:40:30 +08:00
Daniel P. Berrange
1b64f74c82 Rebuild for libwsman soname change
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2015-06-16 14:49:54 +01:00
Daniel P. Berrange
c81949046d Update to 1.2.16 release 2015-06-01 10:05:32 +01:00
Daniel Veillard
19dcb913e6 Upstream release 1.2.16 2015-06-01 10:49:59 +08:00
Richard W.M. Jones
e4b5ba1a9d Add Cole Robinson's patch to fix arch selection (bz# 1219198, bz#1219191) 2015-05-07 15:08:12 +01:00
Cole Robinson
5f1a422d83 Rebased to version 1.2.15 2015-05-04 13:28:39 -04:00
Cole Robinson
c5b0b3ef9d Fix LXC domain startup (bz #1210397)
Fix race starting multiple session daemons (bz #1200149)
Fix change-media success messages
Strip invalid control codes from XML (bz #1066564, bz #1184131)
2015-04-15 14:40:41 -04:00
Cole Robinson
c0a04cb876 Rebased to version 1.2.14 2015-04-02 12:44:09 -04:00
Daniel Veillard
3cc7cdf12f Upstream release 1.2.14 2015-04-02 15:56:44 +08:00
Cole Robinson
6b531d9967 Fix connecting to qemu:///session (bz #1198244) 2015-03-10 11:10:16 -04:00
Cole Robinson
4d05ac021c Rebased to version 1.2.13
lot of improvements around NUMA code
a lot of improvement and bug fixes
2015-03-02 11:36:45 -05:00
Daniel Veillard
d29aa84b17 upstream release of libvirt-1.2.13 2015-03-02 11:46:49 +08:00
Daniel P. Berrange
a075adc818 Rebuild for changed xen soname 2015-02-03 09:21:55 +00:00
Daniel P. Berrange
4d0e63f99c Update to 1.2.12 release 2015-01-27 10:53:52 +00:00
Daniel P. Berrange
9e11936ec5 Disable -Werror 2014-12-15 15:29:30 +00:00
Daniel P. Berrange
a4075ec632 Update to 1.2.11 release 2014-12-15 12:01:37 +00:00
Cole Robinson
dadb59c95f Allow arm/aarch64 with UEFI 2014-11-21 10:15:51 -05:00
Cole Robinson
e73cc6a9d8 Fix caps probing when KVM is disabled (bz #1160318)
ppc64le fixes (bz #1163439)
2014-11-15 18:33:55 -05:00
Cole Robinson
10cd84e37f Remove unused patches 2014-11-15 15:21:48 -05:00
Daniel Veillard
e63e2040cd Upstream release of 1.2.10 2014-11-03 15:13:32 +08:00
Cole Robinson
91063332d7 Fix creating i686 guest with x86_64 emulator (bz #1153797)
Fix tests with latest libxml2
2014-10-30 11:01:41 -04:00
Cole Robinson
503330ba5d Fix selinux errors with /dev/net/tun (bz #1147057) 2014-10-09 13:00:53 -04:00
Cole Robinson
0a64085f47 Fix specifying CPU for qemu aarch64 2014-10-03 09:32:42 -04:00
Daniel P. Berrange
1073e2447a Update to 1.2.9 release 2014-10-01 17:09:48 +01:00
Cole Robinson
5b1a906ace Fix labelling host devices (bz #1145968) 2014-09-24 12:15:49 -04:00
Cole Robinson
aff97e0146 Fix specifying CPU for qemu aarch64 2014-09-23 17:27:47 -04:00
Cole Robinson
a4b41a378b Rerun autotools for new patches 2014-09-18 16:06:49 -04:00
Cole Robinson
3ec523d168 Don't mess up labelling of /dev/net/tun (bz #1141879)
pflash/nvram support for UEFI/OVMF
2014-09-18 15:36:06 -04:00
Cole Robinson
622cf0d642 Fix preun script (bz #1142367) 2014-09-17 10:55:26 -04:00
Cole Robinson
a540751e83 Generate non-colliding network IP range at RPM install time (bz #811967)
Fix directory creation at session daemon startup (bz #1139672)
Disable wireshark building, currently broken on f21/rawhide
2014-09-15 14:52:07 -04:00
Daniel P. Berrange
11b596669a Re-disable wireshark 2014-09-05 16:42:57 +01:00
Daniel P. Berrange
fefbae879b Update to 1.2.8 release 2014-09-05 16:15:21 +01:00
Peter Robinson
695b281409 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild 2014-08-17 06:38:41 +00:00
Cole Robinson
9f9eae34c1 Rebased to version 1.2.7 2014-08-12 13:58:50 -04:00
Peter Robinson
ae37ed3500 Enable kvm on aarch64, Cleanup F-16/18 conditionals 2014-07-15 17:52:18 +01:00
Daniel P. Berrange
f7f509999b Update to 1.2.6 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2014-07-02 17:21:15 +01:00
Daniel Veillard
419bcc4b2f new release 2014-07-02 14:25:52 +08:00
Dennis Gilmore
7b59d4f7eb - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild 2014-06-07 00:55:30 -05:00
Daniel P. Berrange
03326e9c04 Update to 1.2.5 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2014-06-02 10:42:59 +01:00
Daniel P. Berrange
f40b464d1e Update to 1.2.4 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2014-05-06 15:54:45 +01:00
Cole Robinson
810ca6c207 Fix LXC from throwing error System lacks NETNS support (bz #1084902) 2014-04-11 15:53:56 -04:00
Cole Robinson
8df3aef6aa Add sources 2014-04-01 18:00:14 -04:00
Cole Robinson
0223d5a656 Rebased to version 1.2.3 2014-04-01 17:50:30 -04:00
Cole Robinson
aad810a204 Rebuild for xen 4.4 2014-03-24 08:53:56 -04:00
Daniel P. Berrange
1b8b7567b1 Update to 1.2.2 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2014-03-03 11:19:24 +00:00
Cole Robinson
442040caac Rebuild for openwsman soname bump 2014-01-27 13:21:35 -05:00
Daniel P. Berrange
65efaafca2 Update to 1.2.1 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2014-01-21 11:18:53 +00:00
Cole Robinson
e87c8ab0c7 Remove unused patch 2014-01-16 20:36:40 -05:00
Daniel Veillard
be6bda45b4 Updated to new tarball, but not the spec file 2014-01-16 18:17:37 +08:00
Daniel P. Berrange
8c9e40d383 Update to 1.2.0 release with python binding split off
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-12-03 15:10:43 +00:00
Daniel Veillard
0f6f9b973a New release, but do not build until libvirt-python is in git too 2013-12-02 13:31:49 +08:00
Cole Robinson
3db6039b2b virsh nodedev-detach fails if device has no driver (bz #1028629) 2013-11-12 09:46:29 -05:00
Daniel P. Berrange
4051217c8b Remove obsolete sources files
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-11-05 12:03:07 +08:00
Daniel Veillard
c5c28baba1 Upstream release of libvirt-1.1.4 2013-11-04 14:27:40 +08:00
Cole Robinson
43618df1d4 Allow QoS change with update-device (bz #1014200)
Fix nwfilter crash during firewalld install (bz #1014762)
Fix crash with nographics (bz #1014088)
2013-10-06 15:14:15 -04:00
Daniel Veillard
a2951dccb5 Rebase ot upstream 1.1.3 2013-10-01 15:51:28 +08:00
Cole Robinson
b884323c03 Fix snapshot restore when VM has disabled usb support (bz #1011520) 2013-09-24 10:27:38 -04:00
Cole Robinson
adeaf839fd Sync with v1.1.2-maint
Rebuild for libswan soname bump (bz #1009701)
CVE-2013-4311: Insecure polkit usage (bz #1009539, bz #1005332)
CVE-2013-4296: Invalid free memory stats (bz #1006173, bz #1009667)
CVE-2013-4297: Invalid free in NBDDeviceAssociate (bz #1006505, bz #1006511)
Fix virsh block-commit abort (bz #1010056)
2013-09-23 14:35:01 -04:00
Daniel P. Berrange
40d99010e1 Rebuild for soname break in openswman package 2013-09-18 14:44:25 +01:00
Daniel P. Berrange
11755d8663 Update to 1.1.2 release, rebasing ARM patches
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-09-02 11:48:17 +01:00
Cole Robinson
2daa92daf9 Fix launching ARM guests on x86 (patches posted upstream, F20 feature) 2013-08-20 15:25:47 -04:00
Cole Robinson
db2858c661 CVE-2013-4239: xen: memory corruption in legacy driver (bz #996241, bz #996244) 2013-08-14 20:00:13 -04:00
Daniel P. Berrange
53adb9aaba Re-add code to delete python tests
Upstream mistakenly deleted code to remove the python test
files from the docs dir

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-07-30 11:27:28 +01:00
Daniel P. Berrange
168df8b606 Update to 1.1.1 release
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-07-30 10:59:15 +01:00
Dennis Gilmore
f9085f2538 fix doc path in libvirt-python 2013-07-28 22:28:27 -05:00
Cole Robinson
b159bbdc98 CVE-2013-4153: Fix double free of returned JSON (bz #986408, bz #986383)
CVE-2013-4154: Crash of libvirtd if guest agent not configured (bz #986386, bz #986406)
2013-07-25 17:53:26 -04:00
Daniel P. Berrange
a5af3cf105 Rebuild for change in Xen library ABI/soname 2013-07-17 13:15:58 +01:00
Cole Robinson
27ca069db7 CVE-2013-2230 libvirt: multiple registered events crash 2013-07-11 16:47:16 -04:00
Daniel Veillard
000a3274d2 Release of libvirt-1.1.0 2013-07-01 19:30:25 +08:00
Peter Robinson
19c7799c31 Enable KVM support on ARM 2013-06-14 14:30:53 +01:00
Cole Robinson
198ff818c6 Drop bogus dep on vbox 2013-06-08 18:44:16 -04:00
Daniel P. Berrange
e80c83ad06 Update to 1.0.6 release 2013-06-03 16:27:28 +01:00
Cole Robinson
660e0112c6 Rebased to version 1.0.5.1
Follow updated packaging guidelines for user alloc (bz #924501)
CVE-2013-1962 Open files DoS (bz #963789, bz #953107)
2013-05-19 18:33:15 -04:00
Cole Robinson
45c1cabef6 Fix stream operations like screenshot (bz #960879) 2013-05-14 17:32:09 -04:00
Richard W.M. Jones
56be2c5e38 Fix network driver when using qemu:///session (bz #958907). 2013-05-03 15:15:22 +01:00
Daniel Veillard
4aa9c4f1a3 Upstream release of libvirt-1.0.5 2013-05-02 18:39:42 +08:00
Daniel Veillard
7be420ad22 Update to 1.0.4 release 2013-04-01 15:54:31 +08:00
Daniel P. Berrange
40b00623a4 Update to 1.0.3 release 2013-03-05 16:00:44 +00:00
Richard W.M. Jones
ce09ec66c7 Fix bogus dates in libvirt.spec by comparing changelog to true dates in git log. 2013-02-28 13:22:28 +00:00
Richard W.M. Jones
97d7c80e2e Disable virnettlscontexttest which apparently fails because of a broken gnutls3.
Note since this patch touches Makefile.am, I have enabled autoreconf
(enable_autotools).
2013-02-28 13:02:27 +00:00
Richard W.M. Jones
b856ae03bf Backport "qemu: check backing chains even when cgroup is omitted"
(RHBZ#896685).
2013-02-28 09:58:19 +00:00
Daniel P. Berrange
803b3b891a Fix missing python binding constants 2013-02-05 15:51:47 +00:00
Daniel P. Berrange
350081d1a9 Update to 1.0.2 release 2013-02-01 10:48:53 +00:00
Cole Robinson
1b71b68bb9 Fix network persistence after define (bz #890492) 2013-01-29 20:17:02 -05:00
Cole Robinson
4084288dd5 CVE-2013-0170 libvirt: use-after-free in virNetMessageFree() (bz #893450, bz #905173) 2013-01-28 15:11:38 -05:00
Richard W.M. Jones
d1cd1b7ceb Rebuild for libnl soname breakage (RHBZ#901569). 2013-01-20 19:56:14 +00:00
Daniel P. Berrange
5ed69704b9 Work around kernel headers problem 2013-01-18 20:01:53 +00:00
Daniel P. Berrange
be6e136cb1 Rebuild for libnl3 soname change 2013-01-18 14:46:40 +00:00
Cole Robinson
d3109abfa4 Fix scriplet warning when uninstalling libvirt-client (bz #888071) 2012-12-17 18:48:44 -05:00
Daniel Veillard
f5ff4a2393 Update to upstream 1.0.1 release 2012-12-17 14:24:00 +08:00
Daniel P. Berrange
8cc50838dc Update to 1.0.0 release 2012-11-08 22:21:41 +01:00
Cole Robinson
2c2e71c0ce Disable libxl on F18 too 2012-10-30 20:54:40 -04:00
Cole Robinson
96b1b18b42 Rebased to version 0.10.2.1
Fix lvm volume creation when alloc=0 (bz #866481)
Clarify virsh send-keys man page example (bz #860004)
Fix occasional deadlock via virDomainDestroy (bz #859009)
Fix LXC deadlock from ctrl-c (bz #848119)
Fix occasional selinux denials with macvtap (bz #798605)
Fix multilib conflict with systemtap files (bz #831425)
Don't trigger keytab warning in system logs (bz #745203)
Fix qemu domxml-2-native NIC model out (bz #636832)
Fix error message if not enough space for lvm vol (bz #609104)
2012-10-27 17:56:09 -04:00
Cole Robinson
f7763bfd17 Disable libxl driver, since it doesn't build with xen 4.2 in rawhide 2012-10-25 17:16:59 -04:00
Richard W.M. Jones
404e58cb18 Add upstream patches: don't duplicate environment variables (RHBZ#859596). 2012-09-24 20:59:05 +01:00
Richard W.M. Jones
cd3767e3b9 Re-add 0001-Use-qemu-system-i386-as-binary-instead-of-qemu.patch
NB: This patch is Fedora-specific and not upstream.
2012-09-24 18:36:40 +01:00
Daniel Veillard
f1867a5ecc Upstream release 0.10.2 2012-09-24 14:22:55 +08:00
Richard W.M. Jones
b5548f62cb Add (upstream) patches to label sockets for SELinux (RHBZ#853393). 2012-09-21 18:58:41 +01:00
Richard W.M. Jones
52f3bedee7 Fix for 32 bit qemu renamed to qemu-system-i386 (RHBZ#857026).
The difference in the output of virsh capabilities (non-root)
before and after is:

 <capabilities>

   <host>
-    <uuid>9ecd5b8f-4b44-5dae-f4c6-4b9cf108e47a</uuid>
+    <uuid>4cae6f0f-dd64-8d9a-bc36-b3f2e62844cf</uuid>
     <cpu>
       <arch>i686</arch>
       <model>Westmere</model>
@@ -34,7 +34,7 @@
     <os_type>hvm</os_type>
     <arch name='i686'>
       <wordsize>32</wordsize>
-      <emulator>/bin/qemu-system-x86_64</emulator>
+      <emulator>/bin/qemu-system-i386</emulator>
       <machine>pc-1.2</machine>
       <machine>none</machine>
       <machine canonical='pc-1.2'>pc</machine>
2012-09-13 15:03:19 +01:00
Cole Robinson
f87237919c Drop unneeded dnsmasq --filterwin2k
Fix unwanted connection closing, needed for boxes
Fix libvirtd segfault with old netcf-libs (bz 853381)
2012-09-12 08:18:36 -04:00
Daniel P. Berrange
e8969fb913 Remove dep on ceph RPM (rhbz #854360) 2012-09-05 11:01:22 +01:00
Daniel Veillard
74d46bc7dd Release of libvirt-0.10.1
Brown paper bag release
2012-08-31 21:52:10 +08:00
Daniel Veillard
4b6ea94306 Upstream release of 0.10.0
- agent: add qemuAgentArbitraryCommand() for general qemu agent command
- Introduce virDomainPinEmulator and virDomainGetEmulatorPinInfo functions
- network: use firewalld instead of iptables, when available
- network: make network driver vlan-aware
- esx: Implement network driver
- driver for parallels hypervisor
- Various LXC improvements
- Add virDomainGetHostname
- a lot of bug fixes, improvements and portability work
2012-08-29 14:32:06 +08:00
Daniel Veillard
963754bc8c Fix a missing build requirement on dbus-devel 2012-08-23 16:14:20 +08:00
Daniel Veillard
7b5483236c release candidate 1 of 0.10.0 2012-08-23 15:53:24 +08:00
Daniel P. Berrange
438006407c Add correct patch for fixing module linkage & enable autotools
Add the correct patch to fix the module linkage problems
and enable autotools, so the Makefile.am changes actually
get applied
2012-08-14 16:21:02 +01:00
Daniel Veillard
76c8282ee2 Fix missing symbols in libvirt daemon in rc0 snapshot 2012-08-14 20:06:04 +08:00
Daniel Veillard
f463598b24 Prerelease for libvirt-0.10.0
Snapshot before 0.10.0 expected beginning of september
2012-08-08 22:45:35 +08:00
Richard W.M. Jones
f4e752a385 Add upstream patch to fix RHBZ#842114. 2012-07-23 14:09:48 +01:00
Dennis Gilmore
c37cb21dea - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 2012-07-19 16:33:02 -05:00
Cole Robinson
e0bfc1f8aa BuildRequires: openssl-devel for rbd 2012-07-15 13:26:31 -04:00
Daniel Veillard
544ad4a787 Release of libvirt-0.9.13
- S390: support for s390(x)
- snapshot: implement new APIs for esx and vbox
- snapshot: new query APIs and many improvements
- virsh: Allow users to reedit rejected XML
- nwfilter: add DHCP snooping
- Enable driver modules in libvirt RPM
- Default to enable driver modules for libvirtd
- storage backend: Add RBD (RADOS Block Device) support
- sVirt support for LXC domains inprovement
- a lot of bug fixes, improvements and portability work
2012-07-02 13:15:52 +08:00
Daniel Veillard
8f163760ed Update to 0.9.12 2012-05-14 22:23:10 +08:00
Cole Robinson
565427cf89 Remove all accidentally added patches 2012-04-27 17:01:40 -04:00
Cole Robinson
e10da2f6d4 Rebased to version 0.9.11.3
Abide URI username when connecting to hypervisor (bz 811397)
Fix managed USB mode (bz 814866)
Fix crash connecting to ESX host (bz 811891)
2012-04-27 16:56:05 -04:00
Cole Robinson
aa386576d5 Fix python doc filelist 2012-04-26 20:39:12 -04:00
Cole Robinson
c73c129b48 Rebased to version 0.9.11.2
Abide URI username when connecting to hypervisor (bz 811397)
Fix managed USB mode (bz 814866)
Fix crash connecting to ESX host (bz 811891)
2012-04-26 20:14:34 -04:00
Daniel P. Berrange
afe729ac3c Fix initial hypervisor conditionals 2012-04-04 11:42:12 +01:00
Daniel P. Berrange
b6038bae4f Remove bogus xen-devel dep from libvirt-devel RPM 2012-04-04 11:42:00 +01:00
Daniel P. Berrange
e6d9787587 Introduce per-hypervisor virtual RPMs 2012-04-04 11:41:48 +01:00
Daniel P. Berrange
44699dc495 Split config files & daemon off from main daemon RPM 2012-04-04 11:41:26 +01:00
Daniel P. Berrange
991d719dde Remove API XML files from libvirt RPM 2012-04-04 11:41:06 +01:00
Daniel P. Berrange
96a520b555 Move all documentation into a -docs sub-RPM 2012-04-04 11:40:53 +01:00
Daniel P. Berrange
e31df5e9de Update to 0.9.11 release 2012-04-04 11:40:32 +01:00
Daniel P. Berrange
6763b267b9 Fix client only RPM build & other misc RPM problems 2012-04-04 11:39:42 +01:00
Daniel P. Berrange
24e91208a4 spec: Add missed dependancy for numad 2012-04-04 11:38:11 +01:00
Daniel P. Berrange
15dec999e7 Add qemu support for ppc64 on FC16 or above for rpm packaging 2012-04-04 11:37:55 +01:00
Daniel P. Berrange
d6b0635d3d Fixed service handling in specfile 2012-04-04 11:37:36 +01:00
Daniel P. Berrange
336a93264e storage: Allow runtime detection of scrub 2012-04-04 11:36:56 +01:00
Daniel P. Berrange
6398d1cff5 Fix typos in API XML file paths 2012-04-04 11:36:26 +01:00
Daniel P. Berrange
6926ed26ea Install API XML desc to a standard location 2012-04-04 11:36:11 +01:00
Daniel P. Berrange
6253f97a2d Revert previous change 2012-04-03 11:02:04 +01:00
Daniel P. Berrange
37ddbd0eac Refactor RPM spec to allow install without default configs 2012-03-31 12:38:10 +01:00
Daniel P. Berrange
95fe7c8df2 Rebuild for libparted soname break 2012-03-15 15:10:56 +00:00
Peter Robinson
79ae809020 fix ix86 macros 2012-02-17 15:27:03 +00:00
Daniel P. Berrange
f19e302ba9 Update to 0.9.10 2012-02-13 16:10:28 +00:00
Daniel P. Berrange
e9c1d3f4b0 Update to 0.9.10-rc2 release 2012-02-08 11:34:10 +00:00
Daniel P. Berrange
0f577d932b Fix LXC I/O handling 2012-01-12 21:07:02 +00:00
Daniel P. Berrange
21a02c2e90 Fix LXC I/O handling 2012-01-12 21:04:43 +00:00
Daniel Veillard
4e460d5f09 Upstream release of 0.9.9 2012-01-07 21:53:09 +08:00
Peter Robinson
f9de2f6bc6 update util-linux-ng -> util-linux 2011-12-29 16:21:18 +00:00
Daniel P. Berrange
2daa1b7814 Add BR on gettext-devel when autotools is enabled 2011-12-08 14:39:53 +00:00
Daniel P. Berrange
f99eeb8567 Fix install of libvirt-guests.service and libvirtd.service 2011-12-08 13:50:55 +00:00
Daniel Veillard
7069f75cb8 update to libvirt-0.9.8
cleanup of old patches, of spec too
2011-12-08 17:03:16 +08:00
Justin M. Forbes
2cac7dac46 Remove versioning on yajl buildreq 2011-11-14 17:54:13 -06:00
Daniel P. Berrange
913c3c6554 Rebuild for yajl 2.0.1 release 2011-11-10 16:24:26 +00:00
Daniel P. Berrange
a5a4c0c89b Another attempt to disable shunloadtest 2011-11-08 20:18:01 +00:00
Daniel P. Berrange
8c8aca2fab Update to 0.9.7 release 2011-11-08 19:52:05 +00:00
Dan Horák
daf8e124ca xenlight available only on Xen arches (#745020) 2011-10-11 10:29:54 +02:00
Laine Stump
38c4b724fe release 0.9.6-2
* Make PCI multifunction support more manual - Bug 742836
* Builds on F15 should still use cgconfig - Bug 738725
2011-10-03 00:27:06 -04:00
Daniel Veillard
4d00487275 Upstream release of 0.9.6
Fix the qemu reboot bug from 0.9.5 and a few others bug fixes
2011-09-22 16:33:16 +08:00
Daniel Veillard
a6831c26c1 Upstream release of libvirt-0.9.5 2011-09-20 14:51:18 +08:00
Daniel Veillard
c363c7ebdb Upstream release of 0.9.4 2011-08-03 13:19:23 +08:00
Dan Horak
18ee6daf8a xenlight available only on Xen arches 2011-07-30 13:16:44 -04:00
Peter Robinson
459eb426c3 add ARM to NUMA platform exlcludes 2011-07-06 15:19:11 +01:00
Daniel Veillard
a0d670d2bf Temporary disable sanlock as version is too old 2011-07-04 23:05:01 +08:00
Daniel Veillard
d7b41212c1 Updating for 0.9.3 upstream release, Daniel 2011-07-04 21:22:51 +08:00
Richard W.M. Jones
2e1539eba4 Rebuild because of libparted soname bump (libparted.so.0 -> libparted.so.1). 2011-06-29 22:07:28 +01:00
Laine Stump
ee9521d87c update to 0.9.2
- require netcf-0.1.8 so transactional network config APIs are included
- document that CVE-2011-2178 has been resolved
2011-06-21 20:25:22 -04:00
Daniel Veillard
8d8fc08bac Deactivate sanlock for now until Dan Berrange updates it 2011-06-06 17:06:09 +08:00
Daniel Veillard
e79d304c79 Release of libvirt-0.9.2 upstream 2011-06-06 13:19:32 +08:00
Richard W.M. Jones
db03f03fd9 Add patch so users can try out virt-dmesg. 2011-05-25 22:29:05 +01:00
Daniel Veillard
957403ebec Update to upstream release 0.9.1
- support various persistent domain updates
- improvements on memory APIs
- Add virDomainEventRebootNew
- various improvements to libxl driver
- Spice: support audio, images and stream compression
- Various improvements and bug fixes
2011-05-05 13:23:46 +08:00
Daniel Veillard
6c32e1aaeb Fix libvirt-0.9.0 build for rawhide, Daniel 2011-04-08 15:16:29 +08:00
Daniel Veillard
362e335c0b Try to force the buidl with libxenlight 2011-04-07 17:13:40 +08:00
Daniel Veillard
ed6c49f874 Update to release 0.9.0 2011-04-07 15:47:13 +08:00
Daniel Veillard
47fcec5405 Fix for CVE-2011-1146, missing checks on read-only connections 2011-03-14 21:48:48 +08:00
Daniel P. Berrange
d7239a45b6 Add patch to fix -kernel boot with latest QEMU 2011-02-21 14:34:17 +00:00
Daniel Veillard
f13fb18c58 Release of libvirt-0.8.8 upstream
- expose new API for sysinfo extraction
- cgroup blkio weight support
- smartcard device support
- qemu: Support per-device boot ordering
- Various improvements and bug fixes
Daniel
2011-02-17 12:29:20 +08:00
Dennis Gilmore
d29644418d - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 2011-02-08 06:38:06 -06:00
Daniel Veillard
ed9e426b26 Update to libvirt 0.8.7
- Preliminary support for VirtualBox 4.0
- IPv6 support
- Add VMware Workstation and Player driver driver
- Add network disk support
- Various improvements and bug fixes
- from 0.8.6:
- Add support for iSCSI target auto-discovery
- QED: Basic support for QED images
- remote console support
- support for SPICE graphics
- sysinfo and VMBIOS support
- virsh qemu-monitor-command
2011-01-06 10:45:38 +08:00
Daniel Veillard
659febf9ff Temporary disable xen support on fedora build
temporary workaround since 0.8.5 fails with xen on F15 missing
MAX_VIRT_CPUS, to fix once sorted out upstream
2010-10-29 18:11:45 +02:00
Daniel Veillard
fca1fccfad Upstream release of 0.8.5
- Enable JSON and netdev features in QEMU >= 0.13
- framework for auditing integration
- framework DTrace/SystemTap integration
- Setting the number of vcpu at boot
- Enable support for nested SVM
- Virtio plan9fs filesystem QEMU
- Memory parameter controls
- various improvements and bug fixes
Daniel
2010-10-29 17:57:15 +02:00
Jesse Keating
f713d63bab - Rebuilt for gcc bug 634757 2010-09-29 14:43:44 -07:00
Dan Horák
5a45e466cf - disable the nwfilterxml2xmltest also on s390(x) 2010-09-16 22:29:05 +02:00
Daniel Veillard
742b24eb23 Upstream release libvirt-0.8.4 2010-09-13 15:26:25 +02:00
Daniel P. Berrange
03369d2383 Fix potential overflow in boot menu code 2010-08-23 21:14:34 +01:00
Daniel P. Berrange
2605d662e0 Update to 0.8.3 sources 2010-08-23 19:50:11 +01:00
Daniel P. Berrange
e8394ab5b5 Update 0.8.3 release 2010-08-23 19:45:47 +01:00
Fedora Release Engineering
8ad156a5c2 dist-git conversion 2010-07-29 07:20:27 +00:00
dmalcolm
f2d6fb6239 - Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild 2010-07-22 02:22:13 +00:00
Daniel P. Berrange
e3a592c38d Fix CVE-2010-2237, CVE-2010-2238, CVE-2010-2239, CVE-2010-2242 2010-07-12 16:01:43 +00:00
Daniel Veillard
7e99819dda Release of libvirt-0.8.2, update of spec file, Daniel 2010-07-05 15:51:43 +00:00
Daniel Veillard
a160d7f98d Upstream release of libvirt-0.8.1, Daniel 2010-04-30 17:10:08 +00:00
Daniel Veillard
36cab842e8 - Upstream release 0.8.0
- Snapshotting support (QEmu/VBox/ESX)
- Network filtering API
- XenAPI driver
- new APIs for domain events
- Libvirt managed save API
- timer subselection for domain clock
- synchronous hooks
- API to update guest CPU to host CPU
- virDomainUpdateDeviceFlags new API
- migrate max downtime API
- volume wiping API
- and many bug fixes
Daniel
2010-04-12 18:05:13 +00:00
Richard W.M. Jones
7b7b86e327 No change, just rebuild against new libparted with bumped soname. 2010-03-30 21:08:36 +00:00
Cole Robinson
f4bfe638b6 Fix USB devices by product with security enabled (bz 574136)
Set kernel/initrd in security driver, fixes some URL installs (bz 566425)
2010-03-22 15:19:02 +00:00
Daniel Veillard
0e9d242f05 Upstream release 0.7.7
Daniel
2010-03-05 16:33:57 +00:00
Adam Jackson
e24467a8c2 * Tue Feb 16 2010 Adam Jackson <ajax@redhat.com> 0.7.6-2
- libvirt-0.7.6-add-needed.patch: Fix FTBFS from --no-add-needed
- Add BuildRequires: xmlrpc-c-client for libxmlrpc_client.so
2010-02-17 00:11:39 +00:00
Adam Jackson
b39c370a76 add the patch 2010-02-16 23:59:23 +00:00
Adam Jackson
62e4e7cde2 * Tue Feb 16 2010 Adam Jackson <ajax@redhat.com> 0.7.6-2
- libvirt-0.7.6-add-needed.patch: Fix FTBFS from --no-add-needed
2010-02-16 23:49:24 +00:00
Daniel Veillard
f822179f97 Oops forgot to bump version, Daniel 2010-02-03 17:40:46 +00:00
Daniel Veillard
47e7e1e548 upstream release of 0.7.6
daniel
2010-02-03 17:39:33 +00:00
Chris Weyl
e73b75314b * Thu Jan 14 2010 Chris Weyl <cweyl@alumni.drew.edu> 0.7.5-3
- bump for libssh2 rebuild
2010-01-14 16:59:58 +00:00
Daniel P. Berrange
8193a55b4a Rebuild for libparted soname change 2010-01-12 14:10:20 +00:00
Daniel Veillard
6036708fa2 Fix a problem in spec file, Daniel 2009-12-23 15:56:25 +00:00
Daniel Veillard
4717aa0b6d Upstream release of 0.7.5, Daniel 2009-12-23 15:40:21 +00:00
Bill Nottingham
97ae25ea7d Fix typo that causes a failure to update the common directory. (releng #2781) 2009-11-25 23:51:22 +00:00
Daniel Veillard
6470ed033b Upstream release of 0.7.3, Daniel 2009-11-20 18:59:17 +00:00
Daniel Veillard
b550f9c1d5 Fix netcf BuildRequire, Daniel 2009-11-20 18:02:51 +00:00
Daniel Veillard
ee0273ffc3 Upstream release of libvirt-0.7.3, Daniel 2009-11-20 16:55:47 +00:00
Daniel P. Berrange
50fce74b00 Really fix restore file labelling this time 2009-11-19 12:51:32 +00:00
Daniel P. Berrange
e29f71d1c9 Disable numactl on s390[x] 2009-11-11 18:11:49 +00:00
Daniel P. Berrange
427ed20801 Fix QEMU save/restore permissions / labelling 2009-11-11 15:33:52 +00:00
Mark McLoughlin
d23e6c285b * Thu Oct 29 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.2-3
- Avoid compressing small log files (#531030)
2009-10-29 17:26:05 +00:00
Mark McLoughlin
2c139b45d8 * Thu Oct 29 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.2-2
- Fix qemu machine types handling
2009-10-29 10:57:55 +00:00
Mark McLoughlin
762435e3b7 * Thu Oct 29 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.2-2
- Make libvirt-devel require libvirt-client, not libvirt
2009-10-29 10:15:23 +00:00
Daniel Veillard
6383d6b056 0.7.2 release, Daniel 2009-10-14 13:03:30 +00:00
Mark McLoughlin
3712441ea6 Add the second patch for #523158 2009-10-13 15:43:47 +00:00
Mark McLoughlin
9d0bc882fa * Tue Oct 13 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-12
- Fix restore of qemu guest using raw save format (#523158)
2009-10-13 15:34:15 +00:00
Mark McLoughlin
90dddf3d3d * Fri Oct 9 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-11
- Fix libvirtd memory leak during error reply sending (#528162)
- Add several PCI hot-unplug typo fixes from upstream
2009-10-09 14:53:48 +00:00
Mark McLoughlin
86abd54d02 * Tue Oct 6 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-10
- Create /var/log/libvirt/{lxc,uml} dirs for logrotate
- Make libvirt-python dependon on libvirt-client
- Sync misc minor changes from upstream spec
2009-10-06 12:48:58 +00:00
Mark McLoughlin
4ab5ad5425 * Tue Oct 6 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-9
- Change logrotate config to weekly (#526769)
2009-10-06 09:45:04 +00:00
Mark McLoughlin
f9c1b758c3 - Re-label qcow2 backing files (#497131) 2009-10-01 15:17:31 +00:00
Mark McLoughlin
38cf1bd5ba * Thu Oct 1 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-8
- Disable sound backend, even when selinux is disabled (#524499)
2009-10-01 08:35:16 +00:00
Mark McLoughlin
aeda455930 * Wed Sep 30 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-7
- Fix USB device passthrough (#522683)
2009-09-30 17:58:52 +00:00
Chris Weyl
288291b795 * Mon Sep 21 2009 Chris Weyl <cweyl@alumni.drew.edu> - 0.7.1-6
- rebuild for libssh2 1.2
2009-09-22 03:52:07 +00:00
Mark McLoughlin
7c2073faca * Mon Sep 21 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-5
- Don't set a bogus error in virDrvSupportsFeature()
- Fix raw save format
2009-09-21 15:32:34 +00:00
Mark McLoughlin
5b528ba717 Fix typo 2009-09-17 14:58:55 +00:00
Mark McLoughlin
4f731a7250 Got the wrong bug number 2009-09-17 14:51:05 +00:00
Mark McLoughlin
f1ac0031f5 * Thu Sep 17 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-4%
- A couple of hot-unplug memory handling fixes (#523960)
2009-09-17 14:47:51 +00:00
Daniel Veillard
e45b9c9030 Disable numactl on s390[x], Daniel 2009-09-17 13:30:50 +00:00
Daniel Veillard
3cf75c269d Refactoring of spec file by danpb for RHEL 5/6 compat, daniel 2009-09-17 12:32:32 +00:00
Daniel Veillard
585033f372 Release of 0.7.1 upstream, Daniel 2009-09-15 12:50:58 +00:00
Mark McLoughlin
897506e66a * Mon Sep 14 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-0.2.gitfac3f4c
- Update to newer snapshot of 0.7.1
- Stop libvirt using untrusted 'info vcpus' PID data (#520864)
- Support relabelling of USB and PCI devices
- Enable multipath storage support
- Restart libvirtd upon RPM upgrade
2009-09-14 18:30:45 +00:00
Mark McLoughlin
e4bf8ffa42 * Sun Sep 6 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.1-0.1.gitg3ef2e05
- Update to pre-release git snapshot of 0.7.1
- Drop upstreamed patches
2009-09-06 13:46:19 +00:00
Mark McLoughlin
20367a58a6 Add URL to source tag 2009-08-21 10:19:53 +00:00
Mark McLoughlin
aa037364ed * Wed Aug 19 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-6
- Fix migration completion with newer versions of qemu (#516187)
2009-08-19 17:13:01 +00:00
Mark McLoughlin
c034c1a3b2 * Wed Aug 19 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-5
- Add PCI host device hotplug support
- Allow PCI bus reset to reset other devices (#499678)
- Fix stupid PCI reset error message (bug #499678)
- Allow PM reset on multi-function PCI devices (bug #515689)
- Re-attach PCI host devices after guest shuts down (bug #499561)
- Fix list corruption after disk hot-unplug
- Fix minor 'virsh nodedev-list --tree' annoyance
2009-08-19 16:26:27 +00:00
Mark McLoughlin
da05e02884 Sync patches from git 2009-08-17 08:08:46 +00:00
Daniel P. Berrange
e1b7b518ac Added utterly crazy build dep on CVS for stupid autopoint tool 2009-08-13 15:43:14 +00:00
Daniel P. Berrange
581b5f5022 Log and ignore NUMA topology problems (rhbz #506590) 2009-08-13 15:30:19 +00:00
Daniel P. Berrange
c476c8b683 Rewrite policykit support (rhbz #499970) 2009-08-13 15:27:42 +00:00
Mark McLoughlin
b93eafc59f Add bz number 516497 for reference 2009-08-10 10:32:28 +00:00
Mark McLoughlin
2105d62ca8 * Mon Aug 10 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-3
- Don't fail to start network if ipv6 modules is not loaded
2009-08-10 10:24:12 +00:00
Mark McLoughlin
743adffffe * Thu Aug 6 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-2
- Make sure qemu can access kernel/initrd (bug #516034)
- Set perms on /var/lib/libvirt/boot to 0711 (bug #516034)
2009-08-06 15:01:49 +00:00
Daniel Veillard
11e3b51c0d - Upstream release of 0.7.0
- ESX, VBox3, Power Hypervisor drivers
- new net filesystem glusterfs
- Storage cloning for LVM and Disk backends
- interface implementation based on netcf
- Support cgroups in QEMU driver
- QEmu hotplug NIC support
- a lot of fixes
Daniel
2009-08-05 15:24:45 +00:00
Mark McLoughlin
66df925739 * Fri Jul 31 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.9.gite195b43
- Set perms on /var/lib/libvirt/images to 0711
2009-07-31 08:55:24 +00:00
Mark McLoughlin
b20a5c6d3b * Thu Jul 30 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.8.gite195b43
- Add patch from upstream to fix qemu pidfile perms problem
2009-07-30 17:02:50 +00:00
Daniel P. Berrange
7f58f3aa54 Create qemu/kvm user & group to fix upgrades 2009-07-30 11:07:16 +00:00
Daniel Veillard
6577b14441 - another prerelease with qemu, uml and remote patches
- drop the news patch as it's now UTF8 upstream
Daniel
2009-07-29 14:58:18 +00:00
Mark McLoughlin
2e7812764f - Fix disabling polkit and netcf on older fedoras 2009-07-29 09:08:57 +00:00
Mark McLoughlin
854b878580 * Wed Jul 29 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.5.gitf055724
- Move ldconfig call to libvirt-client %post/%postun
- Fix rpmlint warning about libvirt-client summary
2009-07-29 09:00:02 +00:00
Mark McLoughlin
89c28e4013 * Wed Jul 29 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.4.gitf055724
- Drop explicit libselinux requires, it is autorequired
- Drop cleanup of python/tests, apparently not needed
- Cherry-pick upstream patch to convert NEWS to UTF-8, drop iconv
- Drop python BR; python-devel requires it
2009-07-29 08:09:45 +00:00
Mark McLoughlin
db269c2d21 Fix some more trivial differences between upstream spec 2009-07-28 18:13:09 +00:00
Mark McLoughlin
98e4f7ee9f - Set perms on /var/{run,lib,cache}/libvirt/qemu 2009-07-28 18:06:43 +00:00
Mark McLoughlin
0c4afc5ee9 - Remove explicit dir creating in makeinstall, replaced by attr in files 2009-07-28 18:02:50 +00:00
Mark McLoughlin
593255292e - Pass --with-qemu-user=qemu etc. to configure 2009-07-28 17:41:33 +00:00
Mark McLoughlin
ccafc8ecb4 - Remove explicit libxml2 requires, again
- Build with --without-capng if capng support is disabled
2009-07-28 17:40:29 +00:00
Mark McLoughlin
a38fb9cbc1 - Move various requires to the libvirt-client sub-package
- Sync some trivial cleanups from upstream spec file
2009-07-28 17:17:13 +00:00
Mark McLoughlin
6359121866 * Tue Jul 28 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.3.gitf055724
- Enable netcf support
2009-07-28 17:04:23 +00:00
Mark McLoughlin
b20d669e88 * Tue Jul 28 2009 Mark McLoughlin <markmc@redhat.com> - 0.7.0-0.2.gitf055724
- Drop glusterfs dep to 2.0.1 (bug #514191)
2009-07-28 09:58:42 +00:00
Daniel Veillard
a3e1cc37ed Push a prerelease of 0.7.0 for F12 'deadline', Daniel 2009-07-27 17:52:28 +00:00
Jesse Keating
a6eca3382d - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild 2009-07-25 08:51:35 +00:00
Richard W.M. Jones
c6c5072e90 Bump release number to rebuild against new libparted. 2009-07-10 22:08:43 +00:00
Daniel Veillard
705fd20a0e Fix libcap-ng-devel require, Daniel 2009-07-03 15:22:52 +00:00
Daniel Veillard
e0e9927d93 Remove the qemu BuildRequires I re-added, Daniel 2009-07-03 15:11:43 +00:00
Daniel Veillard
bae7a0fb84 Upstream release of libvirt-0.6.5, Daniel 2009-07-03 15:07:12 +00:00
Mark McLoughlin
36aee593bc * Fri Jul 3 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.4-4.fc12
- Fix libvirtd crash with bad capabilities data (bug #505635)
2009-07-03 10:08:42 +00:00
Mark McLoughlin
dc0cb0e91a * Fri Jul 3 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.4-3.fc12
- Handle shared/readonly image labelling (bug #493692)
- Don't unnecessarily try to change a file context (bug #507555)
- Don't try to label a disk with no path (e.g. empty cdrom) (bug #499569)
2009-07-03 09:57:08 +00:00
Mark McLoughlin
84d66312fe * Fri Jun 5 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.4-2.fc12
- Remove the qemu BuildRequires
2009-06-05 11:46:47 +00:00
Daniel Veillard
4f644ce267 Old patch didn't apply in kodji ??? Daniel 2009-05-29 17:28:28 +00:00
Daniel Veillard
cdd5b3d62d Keep that patch, daniel 2009-05-29 17:05:50 +00:00
Daniel Veillard
53f63aa62d Upstream release 0.6.4 2009-05-29 16:57:14 +00:00
Mark McLoughlin
748df35c5f * Mon May 25 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.3-11.fc12
- Bring up the bridge, even if it doesn't have an IP address (bug #501912)
2009-05-25 15:22:34 +00:00
Mark McLoughlin
a6e23d00fa * Thu May 21 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.3-10.fc12
- Fix XML attribute escaping (bug #499791)
- Fix serious event handling issues causing guests to be destroyed (bug #499698)
2009-05-21 12:07:09 +00:00
Mark McLoughlin
c6d11b43c9 * Thu May 21 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.3-9.fc12
- Fix qemu argv detection with latest qemu (bug #501923)
2009-05-21 10:42:33 +00:00
Mark McLoughlin
83091ff0dd Add bz numbers for each patch 2009-05-21 10:35:02 +00:00
Cole Robinson
4465a63872 Don't try to label a disk with no path (e.g. empty cdrom) (bug #499569) 2009-05-11 02:29:05 +00:00
Mark McLoughlin
3f397d9786 * Thu May 7 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.3-7.fc12
- Enable migration for qemu 0.10 (bug #499704)
2009-05-07 19:09:00 +00:00
Cole Robinson
750aec5507 Refresh qemu caps when getCapabilities is called (bug #460649) 2009-05-06 16:33:16 +00:00
Mark McLoughlin
d7c1d3bbc0 Revert accidentally committed change 2009-05-06 15:52:08 +00:00
Mark McLoughlin
fa0f21c263 * Wed May 6 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.3-5.fc12
- Fix handling of <hostdev managed='yes'> (bug #499386)
2009-05-06 15:45:57 +00:00
Daniel P. Berrange
afdaf5d354 Fix readonly/shared disk image labelling (rhbz #493692) 2009-05-05 13:38:26 +00:00
Daniel Veillard
26bba5aea9 was also missing /usr/share/gtk-doc/html/libvirt in -devel
Daniel
2009-04-28 10:53:22 +00:00
Daniel Veillard
1a4185bdcc - fix packaging bug #496945 libvirt should own /var/cache/libvirt
Daniel
2009-04-28 09:18:35 +00:00
Daniel Veillard
6a73119e65 Upstream release, 0.6.3, Daniel 2009-04-24 14:57:21 +00:00
Mark McLoughlin
1e2f9fce0a * Thu Apr 16 2009 Mark McLoughlin <markmc@redhat.com> - 0.6.2-2.fc12
- Fix qemu drive format specification (#496092)
2009-04-16 15:25:28 +00:00
43 changed files with 2032 additions and 4925 deletions

View File

@@ -1,8 +0,0 @@
.build*.log
*.rpm
i686
x86_64
libvirt-*.tar.gz
libvirt-0.6.0.tar.gz
libvirt-0.6.1.tar.gz
libvirt-0.6.2.tar.gz

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.build*.log
*.rpm
i686
x86_64
libvirt-*.tar.xz

View File

@@ -4,7 +4,7 @@ NAME := libvirt
SPECFILE = $(firstword $(wildcard *.spec))
define find-makefile-common
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
endef
MAKEFILE_COMMON := $(shell $(find-makefile-common))

1
branch
View File

@@ -1 +0,0 @@
F-11

View File

@@ -1,30 +0,0 @@
From 6e80c60b89728de28267242f7373ecf553e40bc1 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Thu, 28 May 2009 13:15:57 +0000
Subject: [PATCH] Avoid broken networking with new QEMU/KVM >= 86
(cherry picked from commit 2afc3bfd8b779ddba974da9d66d6ea337fc91c01)
Fedora-patch: libvirt-0.6.2-avoid-broken-networking-with-newer-qemu.patch
---
src/qemu_conf.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index fc0e772..99f13c6 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -658,8 +658,8 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
}
snprintf(tapfdstr, sizeof(tapfdstr),
- "tap,fd=%d,script=,vlan=%d,ifname=%s",
- tapfd, vlan, net->ifname);
+ "tap,fd=%d,vlan=%d",
+ tapfd, vlan);
if (!(retval = strdup(tapfdstr)))
goto no_memory;
--
1.6.2.5

View File

@@ -1,49 +0,0 @@
From 6635abc3bbe54e6b0168182805de92cd70d125e4 Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Tue, 12 May 2009 15:31:22 +0000
Subject: [PATCH] * src/network_driver.c: enable bridges which are not up without an IP address, patch by Ludwig Nussel
(cherry picked from commit e978774ec67f4b062b1f65e5c76a13193a9430eb)
Fedora-patch: libvirt-0.6.2-bring-up-ipless-bridge.patch
---
src/network_driver.c | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/src/network_driver.c b/src/network_driver.c
index a17a769..a163b15 100644
--- a/src/network_driver.c
+++ b/src/network_driver.c
@@ -836,8 +836,7 @@ static int networkStartNetworkDaemon(virConnectPtr conn,
goto err_delbr;
}
- if (network->def->ipAddress &&
- (err = brSetInterfaceUp(driver->brctl, network->def->bridge, 1))) {
+ if ((err = brSetInterfaceUp(driver->brctl, network->def->bridge, 1))) {
virReportSystemError(conn, err,
_("failed to bring the bridge '%s' up"),
network->def->bridge);
@@ -878,8 +877,7 @@ static int networkStartNetworkDaemon(virConnectPtr conn,
networkRemoveIptablesRules(driver, network);
err_delbr1:
- if (network->def->ipAddress &&
- (err = brSetInterfaceUp(driver->brctl, network->def->bridge, 0))) {
+ if ((err = brSetInterfaceUp(driver->brctl, network->def->bridge, 0))) {
char ebuf[1024];
networkLog(NETWORK_WARN, _("Failed to bring down bridge '%s' : %s\n"),
network->def->bridge, virStrerror(err, ebuf, sizeof ebuf));
@@ -920,8 +918,7 @@ static int networkShutdownNetworkDaemon(virConnectPtr conn,
networkRemoveIptablesRules(driver, network);
char ebuf[1024];
- if (network->def->ipAddress &&
- (err = brSetInterfaceUp(driver->brctl, network->def->bridge, 0))) {
+ if ((err = brSetInterfaceUp(driver->brctl, network->def->bridge, 0))) {
networkLog(NETWORK_WARN, _("Failed to bring down bridge '%s' : %s\n"),
network->def->bridge, virStrerror(err, ebuf, sizeof ebuf));
}
--
1.6.2.5

View File

@@ -1,33 +0,0 @@
From f793cd9b7220145b6df8086d77db4fdc035d680b Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Tue, 4 Aug 2009 18:13:09 +0100
Subject: [PATCH] Fix escaping of 8-bit high characters
Fix https://bugzilla.redhat.com/show_bug.cgi?id=479517
* src/buf.c: Cast to 'unsigned char' before doing compare to
avoid rejecting 8-bit high characters
(cherry picked from commit 8feb499ba2c3625632210c997b49f5df515c05d4)
Fedora-patch: libvirt-0.6.2-buf-locale-escape.patch
---
src/buf.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/buf.c b/src/buf.c
index 259175d..c802aa2 100644
--- a/src/buf.c
+++ b/src/buf.c
@@ -304,7 +304,7 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st
*out++ = 'o';
*out++ = 's';
*out++ = ';';
- } else if ((*cur >= 0x20) || (*cur == '\n') || (*cur == '\t') ||
+ } else if (((unsigned char)*cur >= 0x20) || (*cur == '\n') || (*cur == '\t') ||
(*cur == '\r')) {
/*
* default case, just copy !
--
1.6.2.5

View File

@@ -1,170 +0,0 @@
From fe3cb2edefceacc76d0dc9c98b8d3b677a495c32 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Thu, 11 Jun 2009 14:15:49 +0000
Subject: [PATCH] Detect newer qemu-kvm versions
The KVM version string can be one of the following:
- qemu-kvm-x.y.z in stable releases
- kvm-XX for kvm versions up to kvm-85
- qemu-kvm-devel-XX for kvm version kvm-86 and later
There are only a few of places where we need to detect
differences between KVM versions based on 0.9.1:
1) VNET_HDR introduced in kvm-74
2) -incoming tcp introduced in kvm-79
3) -incoming exec introduced in kvm-80
4) -incoming stdio in all earlier kvm versions
With qemu-kvm-0.10.x, we can now assume that (1) is available
if it's a KVM release, (2) and (3) is always available and
(4) is never available.
So, from now on we should only need to check the qemu version
number and the "is_kvm" flag for detecting feature availability.
We only need the KVM version number for older releases.
(cherry picked from commit 04cbe687974b3b46c96fa20180bbb07ffeff69da)
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Fedora-patch: libvirt-0.6.2-detect-newer-qemu-kvm-versions.patch
---
src/qemu_conf.c | 44 +++++++++++++++++++++++++++++++-------------
1 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index e488d74..d76b2b6 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -416,6 +416,7 @@ virCapsPtr qemudCapsInit(void) {
static unsigned int qemudComputeCmdFlags(const char *help,
unsigned int version,
+ unsigned int is_kvm,
unsigned int kvm_version)
{
unsigned int flags = 0;
@@ -441,7 +442,8 @@ static unsigned int qemudComputeCmdFlags(const char *help,
flags |= QEMUD_CMD_FLAG_DRIVE_BOOT;
if (version >= 9000)
flags |= QEMUD_CMD_FLAG_VNC_COLON;
- if (kvm_version >= 74)
+
+ if (is_kvm && (version >= 10000 || kvm_version >= 74))
flags |= QEMUD_CMD_FLAG_VNET_HDR;
/*
@@ -454,15 +456,15 @@ static unsigned int qemudComputeCmdFlags(const char *help,
* was broken, because it blocked the monitor console
* while waiting for data, so pretend it doesn't exist
*/
- if (kvm_version >= 79) {
+ if (version >= 10000) {
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
+ } else if (kvm_version >= 79) {
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
if (kvm_version >= 80)
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
} else if (kvm_version > 0) {
flags |= QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO;
- } else if (version >= 10000) {
- flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
- flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
}
return flags;
@@ -472,10 +474,19 @@ static unsigned int qemudComputeCmdFlags(const char *help,
* version number. The first bit is easy, just parse
* 'QEMU PC emulator version x.y.z'.
*
- * With qemu-kvm, however, that is followed by a kvm-XX
- * string in parenthesis.
+ * With qemu-kvm, however, that is followed by a string
+ * in parenthesis as follows:
+ * - qemu-kvm-x.y.z in stable releases
+ * - kvm-XX for kvm versions up to kvm-85
+ * - qemu-kvm-devel-XX for kvm version kvm-86 and later
+ *
+ * For qemu-kvm versions before 0.10.z, we need to detect
+ * the KVM version number for some features. With 0.10.z
+ * and later, we just need the QEMU version number and
+ * whether it is KVM QEMU or mainline QEMU.
*/
#define QEMU_VERSION_STR "QEMU PC emulator version"
+#define QEMU_KVM_VER_PREFIX "(qemu-kvm-"
#define KVM_VER_PREFIX "(kvm-"
#define SKIP_BLANKS(p) do { while ((*(p) == ' ') || (*(p) == '\t')) (p)++; } while (0)
@@ -483,12 +494,13 @@ static unsigned int qemudComputeCmdFlags(const char *help,
static int qemudParseHelpStr(const char *help,
unsigned int *flags,
unsigned int *version,
+ unsigned int *is_kvm,
unsigned int *kvm_version)
{
unsigned major, minor, micro;
const char *p = help;
- *flags = *version = *kvm_version = 0;
+ *flags = *version = *is_kvm = *kvm_version = 0;
if (!STRPREFIX(p, QEMU_VERSION_STR))
goto fail;
@@ -515,9 +527,13 @@ static int qemudParseHelpStr(const char *help,
SKIP_BLANKS(p);
- if (STRPREFIX(p, KVM_VER_PREFIX)) {
+ if (STRPREFIX(p, QEMU_KVM_VER_PREFIX)) {
+ *is_kvm = 1;
+ p += strlen(QEMU_KVM_VER_PREFIX);
+ } else if (STRPREFIX(p, KVM_VER_PREFIX)) {
int ret;
+ *is_kvm = 1;
p += strlen(KVM_VER_PREFIX);
ret = virParseNumber(&p);
@@ -529,12 +545,14 @@ static int qemudParseHelpStr(const char *help,
*version = (major * 1000 * 1000) + (minor * 1000) + micro;
- *flags = qemudComputeCmdFlags(help, *version, *kvm_version);
+ *flags = qemudComputeCmdFlags(help, *version, *is_kvm, *kvm_version);
qemudDebug("Version %u.%u.%u, cooked version %u, flags %u",
major, minor, micro, *version, *flags);
if (*kvm_version)
- qemudDebug("KVM version %u detected", *kvm_version);
+ qemudDebug("KVM version %d detected", *kvm_version);
+ else if (*is_kvm)
+ qemudDebug("qemu-kvm version %u.%u.%u detected", major, minor, micro);
return 0;
@@ -560,7 +578,7 @@ int qemudExtractVersionInfo(const char *qemu,
pid_t child;
int newstdout = -1;
int ret = -1, status;
- unsigned int version, kvm_version;
+ unsigned int version, is_kvm, kvm_version;
unsigned int flags = 0;
if (retflags)
@@ -581,7 +599,7 @@ int qemudExtractVersionInfo(const char *qemu,
goto cleanup2;
}
- if (qemudParseHelpStr(help, &flags, &version, &kvm_version) == -1)
+ if (qemudParseHelpStr(help, &flags, &version, &is_kvm, &kvm_version) == -1)
goto cleanup2;
if (retversion)
--
1.6.2.5

View File

@@ -1,208 +0,0 @@
From 182a3cac2b4339e988802eb02279e7ab4c883c67 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
Date: Thu, 16 Apr 2009 15:56:27 +0000
Subject: [PATCH] Don't log monitor output to domain log file.
It's logged via the logging system already. Prefix monitor debug output with vm
name.
(cherry picked from commit 5caa1e0eb050a12fe8ed02cf635bb672a56cdb6f)
Fedora-patch: libvirt-0.6.2-do-not-log-monitor-output.patch
---
src/qemu_driver.c | 60 +++++++++++++++++++++-------------------------------
1 files changed, 24 insertions(+), 36 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 5ca3d20..cb738b2 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1706,27 +1706,11 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
goto error;
}
}
-
- /* Log, but ignore failures to write logfile for VM */
- if (safewrite(vm->logfile, buf, strlen(buf)) < 0) {
- char ebuf[1024];
- VIR_WARN(_("Unable to log VM console data: %s\n"),
- virStrerror(errno, ebuf, sizeof ebuf));
- }
-
*reply = buf;
return 0;
error:
- if (buf) {
- /* Log, but ignore failures to write logfile for VM */
- if (safewrite(vm->logfile, buf, strlen(buf)) < 0) {
- char ebuf[1024];
- VIR_WARN(_("Unable to log VM console data: %s\n"),
- virStrerror(errno, ebuf, sizeof ebuf));
- }
- VIR_FREE(buf);
- }
+ VIR_FREE(buf);
return -1;
}
@@ -2461,7 +2445,7 @@ static int qemudDomainGetMemoryBalloon(virConnectPtr conn,
goto cleanup;
}
- DEBUG ("balloon reply: '%s'", reply);
+ DEBUG ("%s: balloon reply: '%s'", vm->def->name, reply);
if ((offset = strstr(reply, BALLOON_PREFIX)) != NULL) {
unsigned int memMB;
char *end;
@@ -2515,7 +2499,7 @@ static int qemudDomainSetMemoryBalloon(virConnectPtr conn,
/* If the command failed qemu prints: 'unknown command'
* No message is printed on success it seems */
- DEBUG ("balloon reply: %s", reply);
+ DEBUG ("%s: balloon reply: %s",vm->def->name, reply);
if (strstr(reply, "\nunknown command:")) {
/* Don't set error - it is expected memory balloon fails on many qemu */
ret = 0;
@@ -2810,7 +2794,7 @@ static int qemudDomainSave(virDomainPtr dom,
goto cleanup;
}
- DEBUG ("migrate reply: %s", info);
+ DEBUG ("%s: migrate reply: %s", vm->def->name, info);
/* If the command isn't supported then qemu prints:
* unknown command: migrate" */
@@ -3662,7 +3646,7 @@ static int qemudDomainChangeEjectableMedia(virConnectPtr conn,
/* If the command failed qemu prints:
* device not found, device is locked ...
* No message is printed on success it seems */
- DEBUG ("ejectable media change reply: %s", reply);
+ DEBUG ("%s: ejectable media change reply: %s", vm->def->name, reply);
if (strstr(reply, "\ndevice ")) {
qemudReportError (conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
_("changing cdrom media failed: %s"), reply);
@@ -3723,7 +3707,7 @@ static int qemudDomainAttachPciDiskDevice(virConnectPtr conn,
return -1;
}
- DEBUG ("pci_add reply: %s", reply);
+ DEBUG ("%s: pci_add reply: %s", vm->def->name, reply);
/* If the command succeeds qemu prints:
* OK bus 0... */
#define PCI_ATTACH_OK_MSG "OK bus 0, slot "
@@ -3791,7 +3775,7 @@ static int qemudDomainAttachUsbMassstorageDevice(virConnectPtr conn,
return -1;
}
- DEBUG ("attach_usb reply: %s", reply);
+ DEBUG ("%s: attach_usb reply: %s",vm->def->name, reply);
/* If the command failed qemu prints:
* Could not add ... */
if (strstr(reply, "Could not add ")) {
@@ -3845,7 +3829,7 @@ static int qemudDomainAttachHostDevice(virConnectPtr conn,
return -1;
}
- DEBUG ("attach_usb reply: %s", reply);
+ DEBUG ("%s: attach_usb reply: %s", vm->def->name, reply);
/* If the command failed qemu prints:
* Could not add ... */
if (strstr(reply, "Could not add ")) {
@@ -3984,7 +3968,7 @@ static int qemudDomainDetachPciDiskDevice(virConnectPtr conn,
goto cleanup;
}
- DEBUG ("pci_del reply: %s", reply);
+ DEBUG ("%s: pci_del reply: %s",vm->def->name, reply);
/* If the command fails due to a wrong slot qemu prints: invalid slot,
* nothing is printed on success */
if (strstr(reply, "invalid slot")) {
@@ -4214,7 +4198,7 @@ qemudDomainBlockStats (virDomainPtr dom,
"%s", _("'info blockstats' command failed"));
goto cleanup;
}
- DEBUG ("info blockstats reply: %s", info);
+ DEBUG ("%s: info blockstats reply: %s", vm->def->name, info);
/* If the command isn't supported then qemu prints the supported
* info commands, so the output starts "info ". Since this is
@@ -4255,21 +4239,25 @@ qemudDomainBlockStats (virDomainPtr dom,
if (STRPREFIX (p, "rd_bytes=")) {
p += 9;
if (virStrToLong_ll (p, &dummy, 10, &stats->rd_bytes) == -1)
- DEBUG ("error reading rd_bytes: %s", p);
+ DEBUG ("%s: error reading rd_bytes: %s",
+ vm->def->name, p);
} else if (STRPREFIX (p, "wr_bytes=")) {
p += 9;
if (virStrToLong_ll (p, &dummy, 10, &stats->wr_bytes) == -1)
- DEBUG ("error reading wr_bytes: %s", p);
+ DEBUG ("%s: error reading wr_bytes: %s",
+ vm->def->name, p);
} else if (STRPREFIX (p, "rd_operations=")) {
p += 14;
if (virStrToLong_ll (p, &dummy, 10, &stats->rd_req) == -1)
- DEBUG ("error reading rd_req: %s", p);
+ DEBUG ("%s: error reading rd_req: %s",
+ vm->def->name, p);
} else if (STRPREFIX (p, "wr_operations=")) {
p += 14;
if (virStrToLong_ll (p, &dummy, 10, &stats->wr_req) == -1)
- DEBUG ("error reading wr_req: %s", p);
+ DEBUG ("%s: error reading wr_req: %s",
+ vm->def->name, p);
} else
- DEBUG ("unknown block stat near %s", p);
+ DEBUG ("%s: unknown block stat near %s", vm->def->name, p);
/* Skip to next label. */
p = strchr (p, ' ');
@@ -4481,7 +4469,7 @@ qemudDomainMemoryPeek (virDomainPtr dom,
goto cleanup;
}
- DEBUG ("memsave reply: %s", info);
+ DEBUG ("%s: memsave reply: %s", vm->def->name, info);
/* Read the memory file into buffer. */
if (saferead (fd, buffer, size) == (ssize_t) -1) {
@@ -4798,7 +4786,7 @@ qemudDomainMigratePerform (virDomainPtr dom,
"%s", _("off-line migration specified, but suspend operation failed"));
goto cleanup;
}
- DEBUG ("stop reply: %s", info);
+ DEBUG ("%s: stop reply: %s", vm->def->name, info);
VIR_FREE(info);
paused = 1;
@@ -4815,7 +4803,7 @@ qemudDomainMigratePerform (virDomainPtr dom,
snprintf (cmd, sizeof cmd, "migrate_set_speed %lum", resource);
qemudMonitorCommand (vm, cmd, &info);
- DEBUG ("migrate_set_speed reply: %s", info);
+ DEBUG ("%s: migrate_set_speed reply: %s", vm->def->name, info);
VIR_FREE (info);
}
@@ -4834,7 +4822,7 @@ qemudDomainMigratePerform (virDomainPtr dom,
goto cleanup;
}
- DEBUG ("migrate reply: %s", info);
+ DEBUG ("%s: migrate reply: %s", vm->def->name, info);
/* Now check for "fail" in the output string */
if (strstr(info, "fail") != NULL) {
@@ -4873,7 +4861,7 @@ cleanup:
vm->def->name);
}
else {
- DEBUG ("cont reply: %s", info);
+ DEBUG ("%s: cont reply: %s", vm->def->name, info);
VIR_FREE(info);
}
--
1.6.2.5

View File

@@ -1,49 +0,0 @@
From 2d299525f5de29d11c6dc4810aa41e893535695b Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 3 Jul 2009 10:27:46 +0000
Subject: [PATCH] Don't unnecessarily try to change a file context
As pointed out by Tim Waugh here:
https://bugzilla.redhat.com/507555
We shouldn't bother trying to set the context of a file if it already
matches what we want.
(Fixed to use STREQ() and not use tabs, as pointed out by danpb)
(cherry picked from commit add254feeaa830dd5af1118c141cb140bf55b5a7)
Fedora-patch: libvirt-0.6.2-do-not-unnecessarily-try-to-change-a-file-context.patch
---
src/security_selinux.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/src/security_selinux.c b/src/security_selinux.c
index 450fce2..8ebe1fe 100644
--- a/src/security_selinux.c
+++ b/src/security_selinux.c
@@ -280,10 +280,19 @@ static int
SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
{
char ebuf[1024];
+ security_context_t econ;
VIR_INFO("Setting SELinux context on '%s' to '%s'", path, tcon);
- if(setfilecon(path, tcon) < 0) {
+ if (setfilecon(path, tcon) < 0) {
+ if (getfilecon(path, &econ) >= 0) {
+ if (STREQ(tcon, econ)) {
+ freecon(econ);
+ /* It's alright, there's nothing to change anyway. */
+ return 0;
+ }
+ freecon(econ);
+ }
virSecurityReportError(conn, VIR_ERR_ERROR,
_("%s: unable to set security context "
"'\%s\' on %s: %s."), __func__,
--
1.6.2.5

View File

@@ -1,48 +0,0 @@
From 9b41d6550b6bf8d4450bb5b86550eb605cc1fd91 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Fri, 8 May 2009 10:07:15 +0000
Subject: [PATCH] Enable save/restore/migrate for QEMU >= 0.10.0
(cherry picked from commit 88e22e4e8cb7fc7e1fa1d132778aa1994f4b55b6)
Fedora-patch: libvirt-0.6.2-enable-qemu-0-10-migration.patch
---
src/qemu_conf.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 6f9e610..929fe00 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -472,16 +472,13 @@ int qemudExtractVersionInfo(const char *qemu,
/*
* Handling of -incoming arg with varying features
- * -incoming tcp (kvm >= 79)
- * -incoming exec (kvm >= 80)
+ * -incoming tcp (kvm >= 79, qemu >= 0.10.0)
+ * -incoming exec (kvm >= 80, qemu >= 0.10.0)
* -incoming stdio (all earlier kvm)
*
* NB, there was a pre-kvm-79 'tcp' support, but it
* was broken, because it blocked the monitor console
* while waiting for data, so pretend it doesn't exist
- *
- * XXX when next QEMU release after 0.9.1 arrives,
- * we'll need to add MIGRATE_QEMU_TCP/EXEC here too
*/
if (kvm_version >= 79) {
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
@@ -489,6 +486,9 @@ int qemudExtractVersionInfo(const char *qemu,
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
} else if (kvm_version > 0) {
flags |= QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO;
+ } else if (version >= 10000) {
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
}
if (retversion)
--
1.6.2.5

View File

@@ -1,147 +0,0 @@
From 261ec2c9597b2eb6c7d91589fc66e203f60b6735 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Tue, 12 May 2009 16:41:49 +0000
Subject: [PATCH] Fix interrupting of main event thread & protect against accidental uniniitalized variables
(cherry picked from commit 0a31be6ba243066378c344882cc1a32802774edb)
Fedora-patch: libvirt-0.6.2-event-handling-1.patch
---
qemud/event.c | 42 +++++++++++++++++++++++++++++++++++-------
1 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/qemud/event.c b/qemud/event.c
index 0887008..4dc1020 100644
--- a/qemud/event.c
+++ b/qemud/event.c
@@ -83,10 +83,10 @@ struct virEventLoop {
static struct virEventLoop eventLoop;
/* Unique ID for the next FD watch to be registered */
-static int nextWatch = 0;
+static int nextWatch = 1;
/* Unique ID for the next timer to be registered */
-static int nextTimer = 0;
+static int nextTimer = 1;
static void virEventLock(void)
{
@@ -142,15 +142,22 @@ int virEventAddHandleImpl(int fd, int events,
void virEventUpdateHandleImpl(int watch, int events) {
int i;
+ EVENT_DEBUG("Update handle w=%d e=%d", watch, events);
+
+ if (watch <= 0) {
+ VIR_WARN("Ignoring invalid update watch %d", watch);
+ return;
+ }
+
virEventLock();
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
if (eventLoop.handles[i].watch == watch) {
eventLoop.handles[i].events =
virEventHandleTypeToPollEvent(events);
+ virEventInterruptLocked();
break;
}
}
- virEventInterruptLocked();
virEventUnlock();
}
@@ -163,6 +170,12 @@ void virEventUpdateHandleImpl(int watch, int events) {
int virEventRemoveHandleImpl(int watch) {
int i;
EVENT_DEBUG("Remove handle %d", watch);
+
+ if (watch <= 0) {
+ VIR_WARN("Ignoring invalid remove watch %d", watch);
+ return -1;
+ }
+
virEventLock();
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
if (eventLoop.handles[i].deleted)
@@ -171,11 +184,11 @@ int virEventRemoveHandleImpl(int watch) {
if (eventLoop.handles[i].watch == watch) {
EVENT_DEBUG("mark delete %d %d", i, eventLoop.handles[i].fd);
eventLoop.handles[i].deleted = 1;
+ virEventInterruptLocked();
virEventUnlock();
return 0;
}
}
- virEventInterruptLocked();
virEventUnlock();
return -1;
}
@@ -231,6 +244,12 @@ void virEventUpdateTimeoutImpl(int timer, int frequency) {
struct timeval tv;
int i;
EVENT_DEBUG("Updating timer %d timeout with %d ms freq", timer, frequency);
+
+ if (timer <= 0) {
+ VIR_WARN("Ignoring invalid update timer %d", timer);
+ return;
+ }
+
if (gettimeofday(&tv, NULL) < 0) {
return;
}
@@ -243,10 +262,10 @@ void virEventUpdateTimeoutImpl(int timer, int frequency) {
frequency >= 0 ? frequency +
(((unsigned long long)tv.tv_sec)*1000) +
(((unsigned long long)tv.tv_usec)/1000) : 0;
+ virEventInterruptLocked();
break;
}
}
- virEventInterruptLocked();
virEventUnlock();
}
@@ -259,6 +278,12 @@ void virEventUpdateTimeoutImpl(int timer, int frequency) {
int virEventRemoveTimeoutImpl(int timer) {
int i;
EVENT_DEBUG("Remove timer %d", timer);
+
+ if (timer <= 0) {
+ VIR_WARN("Ignoring invalid remove timer %d", timer);
+ return -1;
+ }
+
virEventLock();
for (i = 0 ; i < eventLoop.timeoutsCount ; i++) {
if (eventLoop.timeouts[i].deleted)
@@ -266,11 +291,11 @@ int virEventRemoveTimeoutImpl(int timer) {
if (eventLoop.timeouts[i].timer == timer) {
eventLoop.timeouts[i].deleted = 1;
+ virEventInterruptLocked();
virEventUnlock();
return 0;
}
}
- virEventInterruptLocked();
virEventUnlock();
return -1;
}
@@ -616,9 +641,12 @@ static int virEventInterruptLocked(void)
char c = '\0';
if (!eventLoop.running ||
- pthread_self() == eventLoop.leader)
+ pthread_self() == eventLoop.leader) {
+ VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running, (int)eventLoop.leader);
return 0;
+ }
+ VIR_DEBUG0("Interrupting");
if (safewrite(eventLoop.wakeupfd[1], &c, sizeof(c)) != sizeof(c))
return -1;
return 0;
--
1.6.2.5

View File

@@ -1,200 +0,0 @@
From ef1a3eaa58d83c3367a1addff6c8132f27aa09dd Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Tue, 12 May 2009 16:43:04 +0000
Subject: [PATCH] Fix watch/timer event deletion
(cherry picked from commit 470317f5c71cbcc6b6d8d83d0978aea3510d3698)
Fedora-patch: libvirt-0.6.2-event-handling-2.patch
---
qemud/event.c | 112 ++++++++++++++++++++++++++-------------------------------
1 files changed, 51 insertions(+), 61 deletions(-)
diff --git a/qemud/event.c b/qemud/event.c
index 4dc1020..8bc7c34 100644
--- a/qemud/event.c
+++ b/qemud/event.c
@@ -312,7 +312,7 @@ static int virEventCalculateTimeout(int *timeout) {
EVENT_DEBUG("Calculate expiry of %d timers", eventLoop.timeoutsCount);
/* Figure out if we need a timeout */
for (i = 0 ; i < eventLoop.timeoutsCount ; i++) {
- if (eventLoop.timeouts[i].deleted || eventLoop.timeouts[i].frequency < 0)
+ if (eventLoop.timeouts[i].frequency < 0)
continue;
EVENT_DEBUG("Got a timeout scheduled for %llu", eventLoop.timeouts[i].expiresAt);
@@ -349,32 +349,26 @@ static int virEventCalculateTimeout(int *timeout) {
* file handles. The caller must free the returned data struct
* returns: the pollfd array, or NULL on error
*/
-static int virEventMakePollFDs(struct pollfd **retfds) {
+static struct pollfd *virEventMakePollFDs(void) {
struct pollfd *fds;
- int i, nfds = 0;
+ int i;
- for (i = 0 ; i < eventLoop.handlesCount ; i++) {
- if (eventLoop.handles[i].deleted)
- continue;
- nfds++;
- }
- *retfds = NULL;
/* Setup the poll file handle data structs */
- if (VIR_ALLOC_N(fds, nfds) < 0)
- return -1;
+ if (VIR_ALLOC_N(fds, eventLoop.handlesCount) < 0)
+ return NULL;
- for (i = 0, nfds = 0 ; i < eventLoop.handlesCount ; i++) {
- if (eventLoop.handles[i].deleted)
- continue;
- fds[nfds].fd = eventLoop.handles[i].fd;
- fds[nfds].events = eventLoop.handles[i].events;
- fds[nfds].revents = 0;
+ for (i = 0 ; i < eventLoop.handlesCount ; i++) {
+ EVENT_DEBUG("Prepare n=%d w=%d, f=%d e=%d", i,
+ eventLoop.handles[i].watch,
+ eventLoop.handles[i].fd,
+ eventLoop.handles[i].events);
+ fds[i].fd = eventLoop.handles[i].fd;
+ fds[i].events = eventLoop.handles[i].events;
+ fds[i].revents = 0;
//EVENT_DEBUG("Wait for %d %d", eventLoop.handles[i].fd, eventLoop.handles[i].events);
- nfds++;
}
- *retfds = fds;
- return nfds;
+ return fds;
}
@@ -434,26 +428,30 @@ static int virEventDispatchTimeouts(void) {
* Returns 0 upon success, -1 if an error occurred
*/
static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
- int i, n;
+ int i;
- for (i = 0, n = 0 ; i < eventLoop.handlesCount && n < nfds ; i++) {
+ /* NB, use nfds not eventLoop.handlesCount, because new
+ * fds might be added on end of list, and they're not
+ * in the fds array we've got */
+ for (i = 0 ; i < nfds ; i++) {
if (eventLoop.handles[i].deleted) {
- EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
+ EVENT_DEBUG("Skip deleted n=%d w=%d f=%d", i,
+ eventLoop.handles[i].watch, eventLoop.handles[i].fd);
continue;
}
- if (fds[n].revents) {
+ if (fds[i].revents) {
virEventHandleCallback cb = eventLoop.handles[i].cb;
void *opaque = eventLoop.handles[i].opaque;
- int hEvents = virPollEventToEventHandleType(fds[n].revents);
- EVENT_DEBUG("Dispatch %d %d %p", fds[n].fd,
- fds[n].revents, eventLoop.handles[i].opaque);
+ int hEvents = virPollEventToEventHandleType(fds[i].revents);
+ EVENT_DEBUG("Dispatch n=%d f=%d w=%d e=%d %p", i,
+ fds[i].fd, eventLoop.handles[i].watch,
+ fds[i].revents, eventLoop.handles[i].opaque);
virEventUnlock();
(cb)(eventLoop.handles[i].watch,
- fds[n].fd, hEvents, opaque);
+ fds[i].fd, hEvents, opaque);
virEventLock();
}
- n++;
}
return 0;
@@ -544,22 +542,21 @@ static int virEventCleanupHandles(void) {
* at least one file handle has an event, or a timer expires
*/
int virEventRunOnce(void) {
- struct pollfd *fds;
+ struct pollfd *fds = NULL;
int ret, timeout, nfds;
virEventLock();
eventLoop.running = 1;
eventLoop.leader = pthread_self();
- if ((nfds = virEventMakePollFDs(&fds)) < 0) {
- virEventUnlock();
- return -1;
- }
- if (virEventCalculateTimeout(&timeout) < 0) {
- VIR_FREE(fds);
- virEventUnlock();
- return -1;
- }
+ if (virEventCleanupTimeouts() < 0 ||
+ virEventCleanupHandles() < 0)
+ goto error;
+
+ if (!(fds = virEventMakePollFDs()) ||
+ virEventCalculateTimeout(&timeout) < 0)
+ goto error;
+ nfds = eventLoop.handlesCount;
virEventUnlock();
@@ -571,38 +568,31 @@ int virEventRunOnce(void) {
if (errno == EINTR) {
goto retry;
}
- VIR_FREE(fds);
- return -1;
+ goto error_unlocked;
}
virEventLock();
- if (virEventDispatchTimeouts() < 0) {
- VIR_FREE(fds);
- virEventUnlock();
- return -1;
- }
+ if (virEventDispatchTimeouts() < 0)
+ goto error;
if (ret > 0 &&
- virEventDispatchHandles(nfds, fds) < 0) {
- VIR_FREE(fds);
- virEventUnlock();
- return -1;
- }
- VIR_FREE(fds);
-
- if (virEventCleanupTimeouts() < 0) {
- virEventUnlock();
- return -1;
- }
+ virEventDispatchHandles(nfds, fds) < 0)
+ goto error;
- if (virEventCleanupHandles() < 0) {
- virEventUnlock();
- return -1;
- }
+ if (virEventCleanupTimeouts() < 0 ||
+ virEventCleanupHandles() < 0)
+ goto error;
eventLoop.running = 0;
virEventUnlock();
+ VIR_FREE(fds);
return 0;
+
+error:
+ virEventUnlock();
+error_unlocked:
+ VIR_FREE(fds);
+ return -1;
}
static void virEventHandleWakeup(int watch ATTRIBUTE_UNUSED,
--
1.6.2.5

View File

@@ -1,137 +0,0 @@
From d8bd0cff27c0572e9305e7fdbc6b843f74d9e30f Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 29 Jun 2009 10:41:56 +0000
Subject: [PATCH] Fix crash in QEMU driver with bad capabilities data
(cherry picked from commit 39c7e7a6b79bbdfa36928a430d56fa88a204e8fd)
Fedora-patch: libvirt-0.6.2-fix-libvirtd-crash-with-bad-capabilities-data.patch
---
src/qemu_driver.c | 80 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 54 insertions(+), 26 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index cb738b2..3d3675c 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -360,12 +360,43 @@ next:
return 0;
}
+
+static int
+qemudSecurityCapsInit(virSecurityDriverPtr secdrv,
+ virCapsPtr caps)
+{
+ const char *doi, *model;
+
+ doi = virSecurityDriverGetDOI(secdrv);
+ model = virSecurityDriverGetModel(secdrv);
+
+ caps->host.secModel.model = strdup(model);
+ if (!caps->host.secModel.model) {
+ char ebuf[1024];
+ VIR_ERROR(_("Failed to copy secModel model: %s"),
+ virStrerror(errno, ebuf, sizeof ebuf));
+ return -1;
+ }
+
+ caps->host.secModel.doi = strdup(doi);
+ if (!caps->host.secModel.doi) {
+ char ebuf[1024];
+ VIR_ERROR(_("Failed to copy secModel DOI: %s"),
+ virStrerror(errno, ebuf, sizeof ebuf));
+ return -1;
+ }
+
+ VIR_DEBUG("Initialized caps for security driver \"%s\" with "
+ "DOI \"%s\"", model, doi);
+
+ return 0;
+}
+
+
static int
qemudSecurityInit(struct qemud_driver *qemud_drv)
{
int ret;
- const char *doi, *model;
- virCapsPtr caps;
virSecurityDriverPtr security_drv;
ret = virSecurityDriverStartup(&security_drv,
@@ -381,36 +412,17 @@ qemudSecurityInit(struct qemud_driver *qemud_drv)
}
qemud_drv->securityDriver = security_drv;
- doi = virSecurityDriverGetDOI(security_drv);
- model = virSecurityDriverGetModel(security_drv);
- VIR_DEBUG("Initialized security driver \"%s\" with "
- "DOI \"%s\"", model, doi);
+ VIR_INFO("Initialized security driver %s", security_drv->name);
/*
* Add security policy host caps now that the security driver is
* initialized.
*/
- caps = qemud_drv->caps;
-
- caps->host.secModel.model = strdup(model);
- if (!caps->host.secModel.model) {
- char ebuf[1024];
- VIR_ERROR(_("Failed to copy secModel model: %s"),
- virStrerror(errno, ebuf, sizeof ebuf));
- return -1;
- }
+ return qemudSecurityCapsInit(security_drv, qemud_drv->caps);
+}
- caps->host.secModel.doi = strdup(doi);
- if (!caps->host.secModel.doi) {
- char ebuf[1024];
- VIR_ERROR(_("Failed to copy secModel DOI: %s"),
- virStrerror(errno, ebuf, sizeof ebuf));
- return -1;
- }
- return 0;
-}
/**
* qemudStartup:
@@ -1852,13 +1864,29 @@ static int qemudGetNodeInfo(virConnectPtr conn,
static char *qemudGetCapabilities(virConnectPtr conn) {
struct qemud_driver *driver = conn->privateData;
+ virCapsPtr caps;
char *xml = NULL;
qemuDriverLock(driver);
+ if ((caps = qemudCapsInit()) == NULL) {
+ virReportOOMError(conn);
+ goto cleanup;
+ }
+
+ if (qemu_driver->securityDriver &&
+ qemudSecurityCapsInit(qemu_driver->securityDriver, caps) < 0) {
+ virCapabilitiesFree(caps);
+ virReportOOMError(conn);
+ goto cleanup;
+ }
+
virCapabilitiesFree(qemu_driver->caps);
- if ((qemu_driver->caps = qemudCapsInit()) == NULL ||
- (xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
+ qemu_driver->caps = caps;
+
+ if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
virReportOOMError(conn);
+
+cleanup:
qemuDriverUnlock(driver);
return xml;
--
1.6.2.5

View File

@@ -1,37 +0,0 @@
From 99c018831379f23e65860ad4f3628a6d5f1a7d5a Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 3 Jul 2009 10:29:09 +0000
Subject: [PATCH] Skip labelling if no src path present
Fixes startup of guest's with sourceless cdrom devices.
Patch from Cole Robinson originally posted here:
https://bugzilla.redhat.com/499569
but never sent upstream.
(cherry picked from commit 67d0c6eb9410d5101f4820a7286deacb6398afde)
Fedora-patch: libvirt-0.6.2-fix-nosource-label.patch
---
src/security_selinux.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/security_selinux.c b/src/security_selinux.c
index 95fa0a6..450fce2 100644
--- a/src/security_selinux.c
+++ b/src/security_selinux.c
@@ -338,6 +338,9 @@ SELinuxSetSecurityImageLabel(virConnectPtr conn,
{
const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
+ if (!disk->src)
+ return 0;
+
if (disk->shared) {
return SELinuxSetFilecon(conn, disk->src, default_image_context);
} else if (disk->readonly) {
--
1.6.2.5

View File

@@ -1,85 +0,0 @@
From 9f6a5f50aee13575331f79f5d93635f701646eb7 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 11 May 2009 15:14:24 +0000
Subject: [PATCH] Fix QEMU ARGV detection with kvm >= 85
(cherry picked from commit 426f9772b84752b4901b72fd382ff6e28e258efd)
Fedora-patch: libvirt-0.6.2-fix-qemu-argv-detection-with-kvm-85.patch
---
src/qemu_conf.c | 18 ++++++++++++++----
src/qemu_driver.c | 12 ++----------
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 929fe00..3e7e32d 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -431,18 +431,28 @@ int qemudExtractVersionInfo(const char *qemu,
return -1;
char *help = NULL;
- enum { MAX_HELP_OUTPUT_SIZE = 8192 };
+ enum { MAX_HELP_OUTPUT_SIZE = 1024*64 };
int len = virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help);
- if (len < 0)
+ if (len < 0) {
+ virReportSystemError(NULL, errno, "%s",
+ _("Unable to read QEMU help output"));
goto cleanup2;
+ }
if (sscanf(help, "QEMU PC emulator version %u.%u.%u (kvm-%u)",
&major, &minor, &micro, &kvm_version) != 4)
kvm_version = 0;
- if (!kvm_version && sscanf(help, "QEMU PC emulator version %u.%u.%u",
- &major, &minor, &micro) != 3)
+ if (!kvm_version &&
+ sscanf(help, "QEMU PC emulator version %u.%u.%u",
+ &major, &minor, &micro) != 3) {
+ char *eol = strchr(help, '\n');
+ if (eol) *eol = '\0';
+ qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse QEMU version number in '%s'"),
+ help);
goto cleanup2;
+ }
version = (major * 1000 * 1000) + (minor * 1000) + micro;
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 4752a64..5ca3d20 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1379,12 +1379,8 @@ static int qemudStartVMDaemon(virConnectPtr conn,
if (qemudExtractVersionInfo(emulator,
NULL,
- &qemuCmdFlags) < 0) {
- qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
- _("Cannot determine QEMU argv syntax %s"),
- emulator);
+ &qemuCmdFlags) < 0)
goto cleanup;
- }
if (qemuPrepareHostDevices(conn, vm->def) < 0)
goto cleanup;
@@ -3606,12 +3602,8 @@ static int qemudDomainChangeEjectableMedia(virConnectPtr conn,
if (qemudExtractVersionInfo(vm->def->emulator,
NULL,
- &qemuCmdFlags) < 0) {
- qemudReportError(conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
- _("Cannot determine QEMU argv syntax %s"),
- vm->def->emulator);
+ &qemuCmdFlags) < 0)
return -1;
- }
if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) {
if (!(devname = qemudDiskDeviceName(conn, newdisk)))
--
1.6.2.5

View File

@@ -1,46 +0,0 @@
From 0aac99f8e13dfc74b87986908165ae7f44662153 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 6 Jul 2009 16:01:55 +0100
Subject: [PATCH] Fix SELinux denial during hotplug
* src/qemu_driver.c: Relabel disk images *before* running QEMU
hotplug monitor commands
(cherry picked from commit 1795bfe4a177a5eff1b3b0a16d56df6f371c0f8e)
Fedora-patch: libvirt-0.6.2-hotplug-labelling.patch
---
src/qemu_driver.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 5fc21a1..f3661f8 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -3934,10 +3934,14 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
switch (dev->data.disk->device) {
case VIR_DOMAIN_DISK_DEVICE_CDROM:
case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
+ if (driver->securityDriver)
+ driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev->data.disk);
ret = qemudDomainChangeEjectableMedia(dom->conn, vm, dev);
break;
case VIR_DOMAIN_DISK_DEVICE_DISK:
+ if (driver->securityDriver)
+ driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev->data.disk);
if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB) {
ret = qemudDomainAttachUsbMassstorageDevice(dom->conn, vm, dev);
} else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_SCSI ||
@@ -3949,8 +3953,6 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
virDomainDiskBusTypeToString(dev->data.disk->bus));
goto cleanup;
}
- if (driver->securityDriver)
- driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev->data.disk);
break;
default:
--
1.6.2.5

View File

@@ -1,134 +0,0 @@
From ae80f9ec15b03d9d3ab6cfa2d48529b459a64fb2 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 6 Jul 2009 15:58:55 +0100
Subject: [PATCH] Fix PCI device hotplug/unplug with newer QEMU
* src/qemu_driver.c: Try new monitor syntax for hotplug first. If
that fails fallback to old KVM specific syntax
(cherry picked from commit 326ecb78145cfeb7706ef0dcd521b19d934950e7)
Fedora-patch: libvirt-0.6.2-hotplug-monitor-syntax.patch
---
src/qemu_driver.c | 56 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 42 insertions(+), 14 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index f3661f8..8473616 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -3724,6 +3724,7 @@ static int qemudDomainAttachPciDiskDevice(virConnectPtr conn,
char *cmd, *reply, *s;
char *safe_path;
const char* type = virDomainDiskBusTypeToString(dev->data.disk->bus);
+ int tryOldSyntax = 0;
for (i = 0 ; i < vm->def->ndisks ; i++) {
if (STREQ(vm->def->disks[i]->dst, dev->data.disk->dst)) {
@@ -3738,14 +3739,15 @@ static int qemudDomainAttachPciDiskDevice(virConnectPtr conn,
return -1;
}
+try_command:
safe_path = qemudEscapeMonitorArg(dev->data.disk->src);
if (!safe_path) {
virReportOOMError(conn);
return -1;
}
- ret = virAsprintf(&cmd, "pci_add 0 storage file=%s,if=%s",
- safe_path, type);
+ ret = virAsprintf(&cmd, "pci_add %s storage file=%s,if=%s",
+ (tryOldSyntax ? "0": "pci_addr=auto"), safe_path, type);
VIR_FREE(safe_path);
if (ret == -1) {
virReportOOMError(conn);
@@ -3761,17 +3763,27 @@ static int qemudDomainAttachPciDiskDevice(virConnectPtr conn,
DEBUG ("%s: pci_add reply: %s", vm->def->name, reply);
/* If the command succeeds qemu prints:
- * OK bus 0... */
-#define PCI_ATTACH_OK_MSG "OK bus 0, slot "
- if ((s=strstr(reply, PCI_ATTACH_OK_MSG))) {
- char* dummy = s;
- s += strlen(PCI_ATTACH_OK_MSG);
+ * OK bus 0, slot XXX...
+ * or
+ * OK domain 0, bus 0, slot XXX
+ */
+ if ((s = strstr(reply, "OK ")) &&
+ (s = strstr(s, "slot "))) {
+ char *dummy = s;
+ s += strlen("slot ");
if (virStrToLong_i ((const char*)s, &dummy, 10, &dev->data.disk->slotnum) == -1)
VIR_WARN("%s", _("Unable to parse slot number\n"));
+ /* XXX not neccessarily always going to end up in domain 0 / bus 0 :-( */
+ /* XXX this slotnum is not persistant across restarts :-( */
+ } else if (!tryOldSyntax && strstr(reply, "invalid char in expression")) {
+ VIR_FREE(reply);
+ VIR_FREE(cmd);
+ tryOldSyntax = 1;
+ goto try_command;
} else {
qemudReportError (conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
- _("adding %s disk failed"), type);
+ _("adding %s disk failed: %s"), type, reply);
VIR_FREE(reply);
VIR_FREE(cmd);
return -1;
@@ -3990,6 +4002,7 @@ static int qemudDomainDetachPciDiskDevice(virConnectPtr conn,
char *cmd = NULL;
char *reply = NULL;
virDomainDiskDefPtr detach = NULL;
+ int tryOldSyntax = 0;
for (i = 0 ; i < vm->def->ndisks ; i++) {
if (STREQ(vm->def->disks[i]->dst, dev->data.disk->dst)) {
@@ -4011,9 +4024,17 @@ static int qemudDomainDetachPciDiskDevice(virConnectPtr conn,
goto cleanup;
}
- if (virAsprintf(&cmd, "pci_del 0 %d", detach->slotnum) < 0) {
- virReportOOMError(conn);
- goto cleanup;
+try_command:
+ if (tryOldSyntax) {
+ if (virAsprintf(&cmd, "pci_del 0 %d", detach->slotnum) < 0) {
+ virReportOOMError(conn);
+ goto cleanup;
+ }
+ } else {
+ if (virAsprintf(&cmd, "pci_del pci_addr=0:0:%d", detach->slotnum) < 0) {
+ virReportOOMError(conn);
+ goto cleanup;
+ }
}
if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
@@ -4023,12 +4044,19 @@ static int qemudDomainDetachPciDiskDevice(virConnectPtr conn,
}
DEBUG ("%s: pci_del reply: %s",vm->def->name, reply);
+
+ if (!tryOldSyntax &&
+ strstr(reply, "extraneous characters")) {
+ tryOldSyntax = 1;
+ goto try_command;
+ }
/* If the command fails due to a wrong slot qemu prints: invalid slot,
* nothing is printed on success */
- if (strstr(reply, "invalid slot")) {
+ if (strstr(reply, "invalid slot") ||
+ strstr(reply, "Invalid pci address")) {
qemudReportError (conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
- _("failed to detach disk %s: invalid slot %d"),
- detach->dst, detach->slotnum);
+ _("failed to detach disk %s: invalid slot %d: %s"),
+ detach->dst, detach->slotnum, reply);
goto cleanup;
}
--
1.6.2.5

View File

@@ -1,57 +0,0 @@
From 2c42e4c96efd390fa7a6957692a5863d30a10828 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Fri, 29 May 2009 14:34:35 +0000
Subject: [PATCH] Avoid double-free in daemon client cleanup code
(cherry picked from commit 6c3ef350649b959215cfc5ccfdaba35bf9560066)
Fedora-patch: libvirt-0.6.2-libvirtd-double-free.patch
---
qemud/qemud.c | 22 +++++++++++++++++-----
1 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/qemud/qemud.c b/qemud/qemud.c
index 4f04355..e299a67 100644
--- a/qemud/qemud.c
+++ b/qemud/qemud.c
@@ -1397,7 +1397,10 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket
* jobs have finished, then clean it up elsehwere
*/
void qemudDispatchClientFailure(struct qemud_client *client) {
- virEventRemoveHandleImpl(client->watch);
+ if (client->watch != -1) {
+ virEventRemoveHandleImpl(client->watch);
+ client->watch = -1;
+ }
/* Deregister event delivery callback */
if(client->conn) {
@@ -1406,12 +1409,21 @@ void qemudDispatchClientFailure(struct qemud_client *client) {
}
#if HAVE_SASL
- if (client->saslconn) sasl_dispose(&client->saslconn);
+ if (client->saslconn) {
+ sasl_dispose(&client->saslconn);
+ client->saslconn = NULL;
+ }
free(client->saslUsername);
+ client->saslUsername = NULL;
#endif
- if (client->tlssession) gnutls_deinit (client->tlssession);
- close(client->fd);
- client->fd = -1;
+ if (client->tlssession) {
+ gnutls_deinit (client->tlssession);
+ client->tlssession = NULL;
+ }
+ if (client->fd != -1) {
+ close(client->fd);
+ client->fd = -1;
+ }
}
--
1.6.2.5

View File

@@ -1,60 +0,0 @@
From eb2fad7e94ba9bf48787e24542931688b9926ca1 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 6 Jul 2009 15:45:04 +0100
Subject: [PATCH] Fix problem with QEMU monitor welcome prompt confusing libvirt after a libvirtd daemon restart with active guests
* src/qemu_driver: Read and dicard pending monitor data
before issuing new monitor commands.
(cherry picked from commit 2d1f2e706c8b13571e1227df1c69b2302da35d5a)
Fedora-patch: libvirt-0.6.2-monitor-prompt-discard.patch
---
src/qemu_driver.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 3d3675c..5fc21a1 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1636,6 +1636,28 @@ cleanup:
qemuDriverUnlock(driver);
}
+
+/* Throw away any data available on the monitor
+ * This is done before executing a command, in order
+ * to allow re-synchronization if something went badly
+ * wrong in the past. it also deals with problem of
+ * QEMU *sometimes* re-printing its initial greeting
+ * when we reconnect to the monitor after restarts.
+ */
+static void
+qemuMonitorDiscardPendingData(virDomainObjPtr vm) {
+ char buf[1024];
+ int ret = 0;
+
+ /* Monitor is non-blocking, so just loop till we
+ * get -1 or 0. Don't bother with detecting
+ * errors, since we'll deal with that better later */
+ do {
+ ret = read(vm->monitor, buf, sizeof (buf)-1);
+ } while (ret > 0);
+}
+
+
static int
qemudMonitorCommandExtra(const virDomainObjPtr vm,
const char *cmd,
@@ -1647,6 +1669,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
size_t cmdlen = strlen(cmd);
size_t extralen = extra ? strlen(extra) : 0;
+ qemuMonitorDiscardPendingData(vm);
+
if (safewrite(vm->monitor, cmd, cmdlen) != cmdlen)
return -1;
if (safewrite(vm->monitor, "\r", 1) != 1)
--
1.6.2.5

View File

@@ -1,159 +0,0 @@
From 3cf2f90a4747547f9877b15c1f573f8a771098e8 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 29 Jun 2009 10:41:56 +0000
Subject: [PATCH] Fix crash in QEMU driver with bad capabilities data
(cherry picked from commit 39c7e7a6b79bbdfa36928a430d56fa88a204e8fd)
Fedora-patch: libvirt-0.6.2-numa-ignore-fail.patch
---
src/capabilities.c | 16 +++++++++++++---
src/capabilities.h | 3 +++
src/libvirt_private.syms | 1 +
src/lxc_conf.c | 11 +++++++++--
src/qemu_conf.c | 10 ++++++++--
src/uml_conf.c | 11 +++++++++--
6 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/src/capabilities.c b/src/capabilities.c
index d6e3478..8dc32a1 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -122,6 +122,18 @@ virCapabilitiesFreeGuest(virCapsGuestPtr guest)
}
+void
+virCapabilitiesFreeNUMAInfo(virCapsPtr caps)
+{
+ int i;
+
+ for (i = 0 ; i < caps->host.nnumaCell ; i++)
+ virCapabilitiesFreeHostNUMACell(caps->host.numaCell[i]);
+ VIR_FREE(caps->host.numaCell);
+ caps->host.nnumaCell = 0;
+}
+
+
/**
* virCapabilitiesFree:
* @caps: object to free
@@ -141,9 +153,7 @@ virCapabilitiesFree(virCapsPtr caps) {
for (i = 0 ; i < caps->host.nfeatures ; i++)
VIR_FREE(caps->host.features[i]);
VIR_FREE(caps->host.features);
- for (i = 0 ; i < caps->host.nnumaCell ; i++)
- virCapabilitiesFreeHostNUMACell(caps->host.numaCell[i]);
- VIR_FREE(caps->host.numaCell);
+ virCapabilitiesFreeNUMAInfo(caps);
for (i = 0 ; i < caps->host.nmigrateTrans ; i++)
VIR_FREE(caps->host.migrateTrans[i]);
diff --git a/src/capabilities.h b/src/capabilities.h
index 5b0bbab..1b49666 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -118,6 +118,9 @@ extern void
virCapabilitiesFree(virCapsPtr caps);
extern void
+virCapabilitiesFreeNUMAInfo(virCapsPtr caps);
+
+extern void
virCapabilitiesSetMacPrefix(virCapsPtr caps,
unsigned char *prefix);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 350a931..9249a1a 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -24,6 +24,7 @@ virCapabilitiesDefaultGuestEmulator;
virCapabilitiesDefaultGuestMachine;
virCapabilitiesFormatXML;
virCapabilitiesFree;
+virCapabilitiesFreeNUMAInfo;
virCapabilitiesNew;
virCapabilitiesSetMacPrefix;
virCapabilitiesGenerateMac;
diff --git a/src/lxc_conf.c b/src/lxc_conf.c
index 34c8aea..fe721e3 100644
--- a/src/lxc_conf.c
+++ b/src/lxc_conf.c
@@ -30,6 +30,7 @@
#include "lxc_conf.h"
#include "nodeinfo.h"
#include "virterror_internal.h"
+#include "logging.h"
#define VIR_FROM_THIS VIR_FROM_LXC
@@ -46,8 +47,14 @@ virCapsPtr lxcCapsInit(void)
0, 0)) == NULL)
goto no_memory;
- if (virCapsInitNUMA(caps) < 0)
- goto no_memory;
+ /* Some machines have problematic NUMA toplogy causing
+ * unexpected failures. We don't want to break the QEMU
+ * driver in this scenario, so log errors & carry on
+ */
+ if (virCapsInitNUMA(caps) < 0) {
+ virCapabilitiesFreeNUMAInfo(caps);
+ VIR_WARN0("Failed to query host NUMA topology, disabling NUMA capabilities");
+ }
/* XXX shouldn't 'borrow' KVM's prefix */
virCapabilitiesSetMacPrefix(caps, (unsigned char []){ 0x52, 0x54, 0x00 });
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 99f13c6..1194e36 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -376,8 +376,14 @@ virCapsPtr qemudCapsInit(void) {
/* Using KVM's mac prefix for QEMU too */
virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x52, 0x54, 0x00 });
- if (virCapsInitNUMA(caps) < 0)
- goto no_memory;
+ /* Some machines have problematic NUMA toplogy causing
+ * unexpected failures. We don't want to break the QEMU
+ * driver in this scenario, so log errors & carry on
+ */
+ if (virCapsInitNUMA(caps) < 0) {
+ virCapabilitiesFreeNUMAInfo(caps);
+ VIR_WARN0("Failed to query host NUMA topology, disabling NUMA capabilities");
+ }
/* First the pure HVM guests */
for (i = 0 ; i < ARRAY_CARDINALITY(arch_info_hvm) ; i++)
diff --git a/src/uml_conf.c b/src/uml_conf.c
index c0d086e..9dd4967 100644
--- a/src/uml_conf.c
+++ b/src/uml_conf.c
@@ -44,6 +44,7 @@
#include "memory.h"
#include "nodeinfo.h"
#include "verify.h"
+#include "logging.h"
#define VIR_FROM_THIS VIR_FROM_UML
@@ -62,8 +63,14 @@ virCapsPtr umlCapsInit(void) {
0, 0)) == NULL)
goto no_memory;
- if (virCapsInitNUMA(caps) < 0)
- goto no_memory;
+ /* Some machines have problematic NUMA toplogy causing
+ * unexpected failures. We don't want to break the QEMU
+ * driver in this scenario, so log errors & carry on
+ */
+ if (virCapsInitNUMA(caps) < 0) {
+ virCapabilitiesFreeNUMAInfo(caps);
+ VIR_WARN0("Failed to query host NUMA topology, disabling NUMA capabilities");
+ }
if ((guest = virCapabilitiesAddGuest(caps,
"uml",
--
1.6.2.5

View File

@@ -1,31 +0,0 @@
From d5d67ea357d92759d4a9ecb213e577835f961eed Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Thu, 16 Jul 2009 13:23:32 +0100
Subject: [PATCH] Fix free of unitialized data upon PCI open fail
(cherry picked from commit 4a7acedd3c59a6a750576cb8680bc3f08fe0b52c)
Fedora-patch: libvirt-0.6.2-pci-device-crash.patch
---
src/pci.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/src/pci.c b/src/pci.c
index ed64d68..68a380d 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -829,10 +829,8 @@ pciReadDeviceID(pciDevice *dev, const char *id_name)
dev->name, id_name);
/* ID string is '0xNNNN\n' ... i.e. 7 bytes */
- if (virFileReadAll(path, 7, &id_str) < 7) {
- VIR_FREE(id_str);
+ if (virFileReadAll(path, 7, &id_str) < 0)
return NULL;
- }
/* Check for 0x suffix */
if (id_str[0] != '0' || id_str[1] != 'x') {
--
1.6.2.5

View File

@@ -1,31 +0,0 @@
From bf7b58a2471a07111f8022c0176f45ee5dc5fe71 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Thu, 16 Apr 2009 14:21:35 +0000
Subject: [PATCH] qemu -drive takes format= not fmt=
Seems like a simple typo - it has been "format=" since the flag
was introduced, but we added it as "fmt=".
(cherry picked from commit 9fa79000ecc883c699a6cb1ce7f00c34881bc8fe)
Fedora-patch: libvirt-0.6.2-qemu-drive-format.patch
---
src/qemu_conf.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index f36c927..6f9e610 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -1135,7 +1135,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
disk->device == VIR_DOMAIN_DISK_DEVICE_DISK)
virBufferAddLit(&opt, ",boot=on");
if (disk->driverType)
- virBufferVSprintf(&opt, ",fmt=%s", disk->driverType);
+ virBufferVSprintf(&opt, ",format=%s", disk->driverType);
if (disk->cachemode) {
const char *mode =
--
1.6.2.5

View File

@@ -1,176 +0,0 @@
From 1f1a0ca63c5492c7d41a0cdbd452a2743f314ebc Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Fri, 8 May 2009 10:11:14 +0000
Subject: [PATCH] Improve name & UUID uniqueness checking in QEMU driver
(cherry picked from commit 54ebbde1e18ec831ff2fddb44ec27ed5dde7874a)
Fedora-patch: libvirt-0.6.2-qemu-name-uniqueness.patch
---
src/qemu_driver.c | 103 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 83 insertions(+), 20 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 8473616..dfd19c5 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -2174,22 +2174,37 @@ static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
if (virSecurityDriverVerify(conn, def) < 0)
goto cleanup;
- vm = virDomainFindByName(&driver->domains, def->name);
- if (vm) {
- qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
- _("domain '%s' is already defined"),
- def->name);
- goto cleanup;
- }
+ /* See if a VM with matching UUID already exists */
vm = virDomainFindByUUID(&driver->domains, def->uuid);
if (vm) {
- char uuidstr[VIR_UUID_STRING_BUFLEN];
+ /* UUID matches, but if names don't match, refuse it */
+ if (STRNEQ(vm->def->name, def->name)) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ vm->def->name, uuidstr);
+ goto cleanup;
+ }
- virUUIDFormat(def->uuid, uuidstr);
- qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
- _("domain with uuid '%s' is already defined"),
- uuidstr);
- goto cleanup;
+ /* UUID & name match, but if VM is already active, refuse it */
+ if (virDomainIsActive(vm)) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain is already active as '%s'"), vm->def->name);
+ goto cleanup;
+ }
+ virDomainObjUnlock(vm);
+ } else {
+ /* UUID does not match, but if a name matches, refuse it */
+ vm = virDomainFindByName(&driver->domains, def->name);
+ if (vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ def->name, uuidstr);
+ goto cleanup;
+ }
}
if (!(vm = virDomainAssignDef(conn,
@@ -2368,6 +2383,11 @@ static int qemudDomainDestroy(virDomainPtr dom) {
_("no domain with matching id %d"), dom->id);
goto cleanup;
}
+ if (!virDomainIsActive(vm)) {
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
+ "%s", _("domain is not running"));
+ goto cleanup;
+ }
qemudShutdownVMDaemon(dom->conn, driver, vm);
event = virDomainEventNewFromObj(vm,
@@ -3272,17 +3292,36 @@ static int qemudDomainRestore(virConnectPtr conn,
goto cleanup;
}
- /* Ensure the name and UUID don't already exist in an active VM */
+ /* See if a VM with matching UUID already exists */
vm = virDomainFindByUUID(&driver->domains, def->uuid);
- if (!vm)
- vm = virDomainFindByName(&driver->domains, def->name);
if (vm) {
+ /* UUID matches, but if names don't match, refuse it */
+ if (STRNEQ(vm->def->name, def->name)) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ vm->def->name, uuidstr);
+ goto cleanup;
+ }
+
+ /* UUID & name match, but if VM is already active, refuse it */
if (virDomainIsActive(vm)) {
qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("domain is already active as '%s'"), vm->def->name);
goto cleanup;
- } else {
- virDomainObjUnlock(vm);
+ }
+ virDomainObjUnlock(vm);
+ } else {
+ /* UUID does not match, but if a name matches, refuse it */
+ vm = virDomainFindByName(&driver->domains, def->name);
+ if (vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ def->name, uuidstr);
+ goto cleanup;
}
}
@@ -3470,18 +3509,41 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
if (virSecurityDriverVerify(conn, def) < 0)
goto cleanup;
- vm = virDomainFindByName(&driver->domains, def->name);
+ /* See if a VM with matching UUID already exists */
+ vm = virDomainFindByUUID(&driver->domains, def->uuid);
if (vm) {
+ /* UUID matches, but if names don't match, refuse it */
+ if (STRNEQ(vm->def->name, def->name)) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ vm->def->name, uuidstr);
+ goto cleanup;
+ }
+
+ /* UUID & name match */
virDomainObjUnlock(vm);
newVM = 0;
+ } else {
+ /* UUID does not match, but if a name matches, refuse it */
+ vm = virDomainFindByName(&driver->domains, def->name);
+ if (vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ def->name, uuidstr);
+ goto cleanup;
+ }
}
if (!(vm = virDomainAssignDef(conn,
&driver->domains,
def))) {
- virDomainDefFree(def);
goto cleanup;
}
+ def = NULL;
vm->persistent = 1;
if (virDomainSaveConfig(conn,
@@ -3503,6 +3565,7 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
if (dom) dom->id = vm->def->id;
cleanup:
+ virDomainDefFree(def);
if (vm)
virDomainObjUnlock(vm);
if (event)
--
1.6.2.5

View File

@@ -1,56 +0,0 @@
From 5c1ff776a3194bcc5d593aedd36cd676f1fcab64 Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Fri, 29 May 2009 13:32:06 +0000
Subject: [PATCH] PPC Qemu Machine Type update * src/qemu_conf.c docs/schemas/domain.rng tests/capabilityschemadata/caps-qemu-kvm.xml: PPC Qemu Machine Type changed from g3bw to g3beige some time ago, patch by Thomas Baker
(cherry picked from commit 525c3d40a97a1ccce7c4dc314d2dd9e780b50d41)
Fedora-patch: libvirt-0.6.2-qemu-ppc-machine-type.patch
---
docs/schemas/domain.rng | 2 +-
src/qemu_conf.c | 2 +-
tests/capabilityschemadata/caps-qemu-kvm.xml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index 2f784e1..b29079a 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -184,7 +184,7 @@
</attribute>
<attribute name="machine">
<choice>
- <value>g3bw</value>
+ <value>g3beige</value>
<value>mac99</value>
<value>prep</value>
</choice>
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 3e7e32d..fc0e772 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -192,7 +192,7 @@ static const char *const arch_info_hvm_sparc_machines[] = {
"sun4m"
};
static const char *const arch_info_hvm_ppc_machines[] = {
- "g3bw", "mac99", "prep"
+ "g3beige", "mac99", "prep"
};
static const char *const arch_info_xen_x86_machines[] = {
diff --git a/tests/capabilityschemadata/caps-qemu-kvm.xml b/tests/capabilityschemadata/caps-qemu-kvm.xml
index fd8523e..893f9ed 100644
--- a/tests/capabilityschemadata/caps-qemu-kvm.xml
+++ b/tests/capabilityschemadata/caps-qemu-kvm.xml
@@ -81,7 +81,7 @@
<arch name='ppc'>
<wordsize>32</wordsize>
<emulator>/usr/bin/qemu-system-ppc</emulator>
- <machine>g3bw</machine>
+ <machine>g3beige</machine>
<machine>mac99</machine>
<machine>prep</machine>
<domain type='qemu'>
--
1.6.2.5

View File

@@ -1,224 +0,0 @@
From 266df161bfd87220bac68918613a2ce9323c8238 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Thu, 11 Jun 2009 14:12:30 +0000
Subject: [PATCH] Re-factor qemu version parsing
This patch is purely re-factoring without any functional changes
to make way for the next patch.
The main thing achieved by the refactoring is that we now have
easier access to the parenthesised string that KVM folks seem
to delight in changing.
(cherry picked from commit 56ecebf22dd5a235503028e20bf936229037664b)
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Fedora-patch: libvirt-0.6.2-refactor-qemu-version-parsing.patch
---
src/qemu_conf.c | 174 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 123 insertions(+), 51 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 1194e36..e488d74 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -414,54 +414,12 @@ virCapsPtr qemudCapsInit(void) {
return NULL;
}
-
-int qemudExtractVersionInfo(const char *qemu,
- unsigned int *retversion,
- unsigned int *retflags) {
- const char *const qemuarg[] = { qemu, "-help", NULL };
- const char *const qemuenv[] = { "LC_ALL=C", NULL };
- pid_t child;
- int newstdout = -1;
- int ret = -1, status;
- unsigned int major, minor, micro;
- unsigned int version, kvm_version;
+static unsigned int qemudComputeCmdFlags(const char *help,
+ unsigned int version,
+ unsigned int kvm_version)
+{
unsigned int flags = 0;
- if (retflags)
- *retflags = 0;
- if (retversion)
- *retversion = 0;
-
- if (virExec(NULL, qemuarg, qemuenv, NULL,
- &child, -1, &newstdout, NULL, VIR_EXEC_NONE) < 0)
- return -1;
-
- char *help = NULL;
- enum { MAX_HELP_OUTPUT_SIZE = 1024*64 };
- int len = virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help);
- if (len < 0) {
- virReportSystemError(NULL, errno, "%s",
- _("Unable to read QEMU help output"));
- goto cleanup2;
- }
-
- if (sscanf(help, "QEMU PC emulator version %u.%u.%u (kvm-%u)",
- &major, &minor, &micro, &kvm_version) != 4)
- kvm_version = 0;
-
- if (!kvm_version &&
- sscanf(help, "QEMU PC emulator version %u.%u.%u",
- &major, &minor, &micro) != 3) {
- char *eol = strchr(help, '\n');
- if (eol) *eol = '\0';
- qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
- _("cannot parse QEMU version number in '%s'"),
- help);
- goto cleanup2;
- }
-
- version = (major * 1000 * 1000) + (minor * 1000) + micro;
-
if (strstr(help, "-no-kqemu"))
flags |= QEMUD_CMD_FLAG_KQEMU;
if (strstr(help, "-no-kvm"))
@@ -507,6 +465,125 @@ int qemudExtractVersionInfo(const char *qemu,
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
}
+ return flags;
+}
+
+/* We parse the output of 'qemu -help' to get the QEMU
+ * version number. The first bit is easy, just parse
+ * 'QEMU PC emulator version x.y.z'.
+ *
+ * With qemu-kvm, however, that is followed by a kvm-XX
+ * string in parenthesis.
+ */
+#define QEMU_VERSION_STR "QEMU PC emulator version"
+#define KVM_VER_PREFIX "(kvm-"
+
+#define SKIP_BLANKS(p) do { while ((*(p) == ' ') || (*(p) == '\t')) (p)++; } while (0)
+
+static int qemudParseHelpStr(const char *help,
+ unsigned int *flags,
+ unsigned int *version,
+ unsigned int *kvm_version)
+{
+ unsigned major, minor, micro;
+ const char *p = help;
+
+ *flags = *version = *kvm_version = 0;
+
+ if (!STRPREFIX(p, QEMU_VERSION_STR))
+ goto fail;
+
+ p += strlen(QEMU_VERSION_STR);
+
+ SKIP_BLANKS(p);
+
+ major = virParseNumber(&p);
+ if (major == -1 || *p != '.')
+ goto fail;
+
+ ++p;
+
+ minor = virParseNumber(&p);
+ if (major == -1 || *p != '.')
+ goto fail;
+
+ ++p;
+
+ micro = virParseNumber(&p);
+ if (major == -1)
+ goto fail;
+
+ SKIP_BLANKS(p);
+
+ if (STRPREFIX(p, KVM_VER_PREFIX)) {
+ int ret;
+
+ p += strlen(KVM_VER_PREFIX);
+
+ ret = virParseNumber(&p);
+ if (ret == -1)
+ goto fail;
+
+ *kvm_version = ret;
+ }
+
+ *version = (major * 1000 * 1000) + (minor * 1000) + micro;
+
+ *flags = qemudComputeCmdFlags(help, *version, *kvm_version);
+
+ qemudDebug("Version %u.%u.%u, cooked version %u, flags %u",
+ major, minor, micro, *version, *flags);
+ if (*kvm_version)
+ qemudDebug("KVM version %u detected", *kvm_version);
+
+ return 0;
+
+fail:
+ p = strchr(help, '\n');
+ if (p)
+ p = strndup(help, p - help);
+
+ qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse QEMU version number in '%s'"),
+ p ? p : help);
+
+ VIR_FREE(p);
+
+ return -1;
+}
+
+int qemudExtractVersionInfo(const char *qemu,
+ unsigned int *retversion,
+ unsigned int *retflags) {
+ const char *const qemuarg[] = { qemu, "-help", NULL };
+ const char *const qemuenv[] = { "LC_ALL=C", NULL };
+ pid_t child;
+ int newstdout = -1;
+ int ret = -1, status;
+ unsigned int version, kvm_version;
+ unsigned int flags = 0;
+
+ if (retflags)
+ *retflags = 0;
+ if (retversion)
+ *retversion = 0;
+
+ if (virExec(NULL, qemuarg, qemuenv, NULL,
+ &child, -1, &newstdout, NULL, VIR_EXEC_NONE) < 0)
+ return -1;
+
+ char *help = NULL;
+ enum { MAX_HELP_OUTPUT_SIZE = 1024*64 };
+ int len = virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help);
+ if (len < 0) {
+ virReportSystemError(NULL, errno, "%s",
+ _("Unable to read QEMU help output"));
+ goto cleanup2;
+ }
+
+ if (qemudParseHelpStr(help, &flags, &version, &kvm_version) == -1)
+ goto cleanup2;
+
if (retversion)
*retversion = version;
if (retflags)
@@ -514,11 +591,6 @@ int qemudExtractVersionInfo(const char *qemu,
ret = 0;
- qemudDebug("Version %d %d %d Cooked version: %d, with flags ? %d",
- major, minor, micro, version, flags);
- if (kvm_version)
- qemudDebug("KVM version %d detected", kvm_version);
-
cleanup2:
VIR_FREE(help);
if (close(newstdout) < 0)
--
1.6.2.5

View File

@@ -1,100 +0,0 @@
From 36cf92efa2b22f275bdc56411d9704e530cdb3fa Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 3 Jul 2009 10:26:37 +0000
Subject: [PATCH] Re-label shared and readonly images
This patch was posted ages ago here:
https://bugzilla.redhat.com/493692
But was never posted upstream AFAICT.
Patch from Dan Berrange
(cherry picked from commit 547147084d03ebf30d09d242a5a721a4df664ffe)
Fedora-patch: libvirt-0.6.2-shared-readonly-label.patch
---
src/security_selinux.c | 26 +++++++++++++++++++-------
1 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/security_selinux.c b/src/security_selinux.c
index ac317d7..95fa0a6 100644
--- a/src/security_selinux.c
+++ b/src/security_selinux.c
@@ -24,11 +24,12 @@
#include "virterror_internal.h"
#include "util.h"
#include "memory.h"
-
+#include "logging.h"
#define VIR_FROM_THIS VIR_FROM_SECURITY
static char default_domain_context[1024];
+static char default_content_context[1024];
static char default_image_context[1024];
#define SECURITY_SELINUX_VOID_DOI "0"
#define SECURITY_SELINUX_NAME "selinux"
@@ -148,8 +149,13 @@ SELinuxInitialize(virConnectPtr conn)
close(fd);
ptr = strchrnul(default_image_context, '\n');
- *ptr = '\0';
-
+ if (*ptr == '\n') {
+ *ptr = '\0';
+ strcpy(default_content_context, ptr+1);
+ ptr = strchrnul(default_content_context, '\n');
+ if (*ptr == '\n')
+ *ptr = '\0';
+ }
return 0;
}
@@ -275,6 +281,8 @@ SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
{
char ebuf[1024];
+ VIR_INFO("Setting SELinux context on '%s' to '%s'", path, tcon);
+
if(setfilecon(path, tcon) < 0) {
virSecurityReportError(conn, VIR_ERR_ERROR,
_("%s: unable to set security context "
@@ -299,6 +307,8 @@ SELinuxRestoreSecurityImageLabel(virConnectPtr conn,
char *newpath = NULL;
const char *path = disk->src;
+ /* Don't restore labels on readoly/shared disks, because
+ * other VMs may still be accessing these */
if (disk->readonly || disk->shared)
return 0;
@@ -328,8 +338,13 @@ SELinuxSetSecurityImageLabel(virConnectPtr conn,
{
const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
- if (secdef->imagelabel)
+ if (disk->shared) {
+ return SELinuxSetFilecon(conn, disk->src, default_image_context);
+ } else if (disk->readonly) {
+ return SELinuxSetFilecon(conn, disk->src, default_content_context);
+ } else if (secdef->imagelabel) {
return SELinuxSetFilecon(conn, disk->src, secdef->imagelabel);
+ }
return 0;
}
@@ -403,9 +418,6 @@ SELinuxSetSecurityLabel(virConnectPtr conn,
if (secdef->imagelabel) {
for (i = 0 ; i < vm->def->ndisks ; i++) {
- if (vm->def->disks[i]->readonly ||
- vm->def->disks[i]->shared) continue;
-
if (SELinuxSetSecurityImageLabel(conn, vm, vm->def->disks[i]) < 0)
return -1;
}
--
1.6.2.5

View File

@@ -1,51 +0,0 @@
From 2fcd18b6a39f495d84eb3ef56a49994621c8f7d3 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 17 Aug 2009 08:52:30 +0100
Subject: [PATCH] Disable sound cards when running sVirt
Temporary hack till PulseAudio autostart problems are sorted out when
SELinux enforcing (bz 486112)
Fedora-patch: libvirt-0.6.2-svirt-sound.patch
---
src/qemu_conf.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index d76b2b6..22c5363 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -885,6 +885,20 @@ int qemudBuildCommandLine(virConnectPtr conn,
char domid[50];
char *pidfile;
const char *cpu = NULL;
+ int skipSound = 0;
+
+ if (driver->securityDriver &&
+ driver->securityDriver->name &&
+ STREQ(driver->securityDriver->name, "selinux") &&
+ getuid() == 0) {
+ static int soundWarned = 0;
+ skipSound = 1;
+ if (vm->def->nsounds &&
+ !soundWarned) {
+ soundWarned = 1;
+ VIR_WARN0("Sound cards for VMs are disabled while SELinux security model is active");
+ }
+ }
uname_normalize(&ut);
@@ -1531,7 +1545,8 @@ int qemudBuildCommandLine(virConnectPtr conn,
}
/* Add sound hardware */
- if (vm->def->nsounds) {
+ if (vm->def->nsounds &&
+ !skipSound) {
int size = 100;
char *modstr;
if (VIR_ALLOC_N(modstr, size+1) < 0)
--
1.6.2.5

View File

@@ -1,49 +0,0 @@
From a7d81a2f9e80942c9951c1d16ad69c66b9a47bbb Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Wed, 13 May 2009 16:19:59 +0000
Subject: [PATCH] * src/buf.c: avoid an XML attribute escaping bug #499791 daniel
(cherry picked from commit 7afe94e7e236ec465d838e7d60e961975c526ab2)
Fedora-patch: libvirt-0.6.2-xml-attribute-escaping.patch
---
src/buf.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/src/buf.c b/src/buf.c
index cdcdac9..259175d 100644
--- a/src/buf.c
+++ b/src/buf.c
@@ -266,7 +266,7 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st
return;
len = strlen(str);
- if (VIR_ALLOC_N(escaped, 5 * len + 1) < 0) {
+ if (VIR_ALLOC_N(escaped, 6 * len + 1) < 0) {
virBufferNoMemory(buf);
return;
}
@@ -290,6 +290,20 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st
*out++ = 'm';
*out++ = 'p';
*out++ = ';';
+ } else if (*cur == '"') {
+ *out++ = '&';
+ *out++ = 'q';
+ *out++ = 'u';
+ *out++ = 'o';
+ *out++ = 't';
+ *out++ = ';';
+ } else if (*cur == '\'') {
+ *out++ = '&';
+ *out++ = 'a';
+ *out++ = 'p';
+ *out++ = 'o';
+ *out++ = 's';
+ *out++ = ';';
} else if ((*cur >= 0x20) || (*cur == '\n') || (*cur == '\t') ||
(*cur == '\r')) {
/*
--
1.6.2.5

View File

@@ -1,47 +0,0 @@
From b3f02d5528c121bcf7b9ac5c4284517e71a5e2f2 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Wed, 6 May 2009 15:56:20 +0000
Subject: [PATCH] Fix qemu driver's interpretation of <hostdev managed='yes'/>
This change:
Tue Mar 3 08:55:13 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
Don't try to detach & reset PCI devices while running test
suite for XML-> ARGV conversion.
* src/qemu_driver.c: Add qemuPrepareHostDevices() helper to
detach and reset PCI devices.
* src/qemu_conf.c: Don't detach & reset PCI devices while
building the command line argv
accidentally did this:
- if (hostdev->managed) {
+ if (!hostdev->managed) {
Which results in managed='yes' not causing the device to be
detached when the guest is starting.
(cherry picked from commit 1d6c713b18741f1a0e3d0ccd094275a11aef138c)
Fedora-patch: libvirt-0.6.3-hostdev-managed.patch
---
src/qemu_driver.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 79ee072..162d072 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1215,7 +1215,7 @@ static int qemuPrepareHostDevices(virConnectPtr conn,
if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
continue;
- if (!hostdev->managed) {
+ if (hostdev->managed) {
pciDevice *dev = pciGetDevice(conn,
hostdev->source.subsys.u.pci.domain,
hostdev->source.subsys.u.pci.bus,
--
1.6.2.5

View File

@@ -1,85 +0,0 @@
From a521796bac21f0c8af38a8551a420d87b61c7a9a Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Wed, 6 May 2009 14:20:34 +0000
Subject: [PATCH] Refresh QEMU driver capabilities for each getCapabilities call.
Also fix up a couple issues where caps are accessed without locking
the driver structure.
(cherry picked from commit 4f107590243631869677ddea2bb667db4a1282a6)
Fedora-patch: libvirt-0.6.3-refresh-qemu-caps.patch
---
src/qemu_driver.c | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 162d072..4752a64 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1872,10 +1872,12 @@ static int qemudGetNodeInfo(virConnectPtr conn,
static char *qemudGetCapabilities(virConnectPtr conn) {
struct qemud_driver *driver = conn->privateData;
- char *xml;
+ char *xml = NULL;
qemuDriverLock(driver);
- if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
+ virCapabilitiesFree(qemu_driver->caps);
+ if ((qemu_driver->caps = qemudCapsInit()) == NULL ||
+ (xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
virReportOOMError(conn);
qemuDriverUnlock(driver);
@@ -3142,20 +3144,26 @@ cleanup:
return ret;
}
-static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel)
+static int qemudNodeGetSecurityModel(virConnectPtr conn,
+ virSecurityModelPtr secmodel)
{
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
char *p;
+ int ret = 0;
- if (!driver->securityDriver)
- return -2;
+ qemuDriverLock(driver);
+ if (!driver->securityDriver) {
+ ret = -2;
+ goto cleanup;
+ }
p = driver->caps->host.secModel.model;
if (strlen(p) >= VIR_SECURITY_MODEL_BUFLEN-1) {
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
_("security model string exceeds max %d bytes"),
VIR_SECURITY_MODEL_BUFLEN-1);
- return -1;
+ ret = -1;
+ goto cleanup;
}
strcpy(secmodel->model, p);
@@ -3164,10 +3172,14 @@ static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr sec
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
_("security DOI string exceeds max %d bytes"),
VIR_SECURITY_DOI_BUFLEN-1);
- return -1;
+ ret = -1;
+ goto cleanup;
}
strcpy(secmodel->doi, p);
- return 0;
+
+cleanup:
+ qemuDriverUnlock(driver);
+ return ret;
}
/* TODO: check seclabel restore */
--
1.6.2.5

View File

@@ -1,60 +0,0 @@
From b77d11b221862343d304e11ed878e2f176101f24 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Tue, 28 Apr 2009 10:55:45 +0000
Subject: [PATCH] Cosmetic change to 'virsh nodedev-list --tree' output
Maybe it's just me, but I try to select an item from the tree using
double-click and get annoyed when "+-" gets included in the selection.
* src/virsh.c: add a space between "+-" and the node device name
in 'virsh nodedev-list --tree'
(cherry picked from commit cb4a6614fae48d05f09b7b15328ea6ef4071ccb3)
(cherry picked from commit 097c818bf00b3777778ffc32fea3a6ed1e741e2b)
Fedora-patch: libvirt-add-space-to-nodedev-list-tree.patch
---
src/virsh.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/virsh.c b/src/virsh.c
index 26764a7..c92bb8f 100644
--- a/src/virsh.c
+++ b/src/virsh.c
@@ -4460,10 +4460,12 @@ cmdNodeListDevicesPrint(vshControl *ctl,
if (depth && depth < MAX_DEPTH) {
indentBuf[indentIdx] = '+';
indentBuf[indentIdx+1] = '-';
+ indentBuf[indentIdx+2] = ' ';
+ indentBuf[indentIdx+3] = '\0';
}
/* Print this device */
- vshPrint(ctl, indentBuf);
+ vshPrint(ctl, "%s", indentBuf);
vshPrint(ctl, "%s\n", devices[devid]);
@@ -4487,8 +4489,8 @@ cmdNodeListDevicesPrint(vshControl *ctl,
/* If there is a child device, then print another blank line */
if (nextlastdev != -1) {
- vshPrint(ctl, indentBuf);
- vshPrint(ctl, " |\n");
+ vshPrint(ctl, "%s", indentBuf);
+ vshPrint(ctl, " |\n");
}
/* Finally print all children */
@@ -4511,7 +4513,7 @@ cmdNodeListDevicesPrint(vshControl *ctl,
/* If there was no child device, and we're the last in
* a list of devices, then print another blank line */
if (nextlastdev == -1 && devid == lastdev) {
- vshPrint(ctl, indentBuf);
+ vshPrint(ctl, "%s", indentBuf);
vshPrint(ctl, "\n");
}
}
--
1.6.2.5

View File

@@ -1,812 +0,0 @@
From 6878a049e27f2eaea7bd3d5c266a2d2b39e444f1 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Mon, 17 Aug 2009 15:05:23 +0100
Subject: [PATCH] Maintain a list of active PCI hostdevs and use it in pciResetDevice()
https://bugzilla.redhat.com/499678
First we add a pciDeviceList type and add a qemuGetPciHostDeviceList()
function to build a list from a domain definition. Use this in
prepare/re-attach to simplify things and eliminate the multiple
pciGetDevice() calls.
Then, as we start/shutdown guests we can add or delete devices as
appropriate from a list of active devices.
Finally, in pciReset(), we can use this to determine whether its safe to
reset a device as a side effect of resetting another device.
(cherry picked from commit 78675b228b76a83f83d64856bfb63b9e14c103a0)
(cherry picked from commit e8ad33931296c67de0538e78d12e21706a826d37)
Fedora-patch: libvirt-allow-pci-hostdev-reset-to-reset-other-devices.patch
---
src/libvirt_private.syms | 7 +-
src/pci.c | 211 +++++++++++++++++++++++++++++++++--------
src/pci.h | 23 +++++-
src/qemu_conf.h | 3 +
src/qemu_driver.c | 237 +++++++++++++++++++++++++++-------------------
src/xen_unified.c | 2 +-
6 files changed, 339 insertions(+), 144 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 9249a1a..75ddda8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -240,7 +240,12 @@ pciFreeDevice;
pciDettachDevice;
pciReAttachDevice;
pciResetDevice;
-
+pciDeviceSetManaged;
+pciDeviceGetManaged;
+pciDeviceListNew;
+pciDeviceListFree;
+pciDeviceListAdd;
+pciDeviceListDel;
# qparams.h
qparam_get_query;
diff --git a/src/pci.c b/src/pci.c
index 1dddb08..1e68261 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -58,6 +58,7 @@ struct _pciDevice {
unsigned pci_pm_cap_pos;
unsigned has_flr : 1;
unsigned has_pm_reset : 1;
+ unsigned managed : 1;
};
/* For virReportOOMError() and virReportSystemError() */
@@ -220,7 +221,7 @@ pciWrite32(pciDevice *dev, unsigned pos, uint32_t val)
pciWrite(dev, pos, &buf[0], sizeof(buf));
}
-typedef int (*pciIterPredicate)(pciDevice *, pciDevice *);
+typedef int (*pciIterPredicate)(pciDevice *, pciDevice *, void *);
/* Iterate over available PCI devices calling @predicate
* to compare each one to @dev.
@@ -231,7 +232,8 @@ static int
pciIterDevices(virConnectPtr conn,
pciIterPredicate predicate,
pciDevice *dev,
- pciDevice **matched)
+ pciDevice **matched,
+ void *data)
{
DIR *dir;
struct dirent *entry;
@@ -249,7 +251,7 @@ pciIterDevices(virConnectPtr conn,
while ((entry = readdir(dir))) {
unsigned domain, bus, slot, function;
- pciDevice *try;
+ pciDevice *check;
/* Ignore '.' and '..' */
if (entry->d_name[0] == '.')
@@ -261,18 +263,18 @@ pciIterDevices(virConnectPtr conn,
continue;
}
- try = pciGetDevice(conn, domain, bus, slot, function);
- if (!try) {
+ check = pciGetDevice(conn, domain, bus, slot, function);
+ if (!check) {
ret = -1;
break;
}
- if (predicate(try, dev)) {
- VIR_DEBUG("%s %s: iter matched on %s", dev->id, dev->name, try->name);
- *matched = try;
+ if (predicate(dev, check, data)) {
+ VIR_DEBUG("%s %s: iter matched on %s", dev->id, dev->name, check->name);
+ *matched = check;
break;
}
- pciFreeDevice(conn, try);
+ pciFreeDevice(conn, check);
}
closedir(dir);
return ret;
@@ -374,63 +376,70 @@ pciDetectPowerManagementReset(pciDevice *dev)
return 0;
}
-/* Any devices other than the one supplied on the same domain/bus ? */
+/* Any active devices other than the one supplied on the same domain/bus ? */
static int
-pciSharesBus(pciDevice *a, pciDevice *b)
+pciSharesBusWithActive(pciDevice *dev, pciDevice *check, void *data)
{
- return
- a->domain == b->domain &&
- a->bus == b->bus &&
- (a->slot != b->slot ||
- a->function != b->function);
-}
+ pciDeviceList *activeDevs = data;
-static int
-pciBusContainsOtherDevices(virConnectPtr conn, pciDevice *dev)
-{
- pciDevice *matched = NULL;
- if (pciIterDevices(conn, pciSharesBus, dev, &matched) < 0)
- return 1;
- if (!matched)
+ if (dev->domain != check->domain ||
+ dev->bus != check->bus ||
+ (check->slot == check->slot &&
+ check->function == check->function))
+ return 0;
+
+ if (activeDevs && !pciDeviceListFind(activeDevs, check))
return 0;
- pciFreeDevice(conn, matched);
+
return 1;
}
-/* Is @a the parent of @b ? */
+static pciDevice *
+pciBusContainsActiveDevices(virConnectPtr conn,
+ pciDevice *dev,
+ pciDeviceList *activeDevs)
+{
+ pciDevice *active = NULL;
+ if (pciIterDevices(conn, pciSharesBusWithActive,
+ dev, &active, activeDevs) < 0)
+ return NULL;
+ return active;
+}
+
+/* Is @check the parent of @dev ? */
static int
-pciIsParent(pciDevice *a, pciDevice *b)
+pciIsParent(pciDevice *dev, pciDevice *check, void *data ATTRIBUTE_UNUSED)
{
uint16_t device_class;
uint8_t header_type, secondary, subordinate;
- if (a->domain != b->domain)
+ if (dev->domain != check->domain)
return 0;
/* Is it a bridge? */
- device_class = pciRead16(a, PCI_CLASS_DEVICE);
+ device_class = pciRead16(check, PCI_CLASS_DEVICE);
if (device_class != PCI_CLASS_BRIDGE_PCI)
return 0;
/* Is it a plane? */
- header_type = pciRead8(a, PCI_HEADER_TYPE);
+ header_type = pciRead8(check, PCI_HEADER_TYPE);
if ((header_type & PCI_HEADER_TYPE_MASK) != PCI_HEADER_TYPE_BRIDGE)
return 0;
- secondary = pciRead8(a, PCI_SECONDARY_BUS);
- subordinate = pciRead8(a, PCI_SUBORDINATE_BUS);
+ secondary = pciRead8(check, PCI_SECONDARY_BUS);
+ subordinate = pciRead8(check, PCI_SUBORDINATE_BUS);
- VIR_DEBUG("%s %s: found parent device %s\n", b->id, b->name, a->name);
+ VIR_DEBUG("%s %s: found parent device %s\n", dev->id, dev->name, check->name);
/* No, it's superman! */
- return (b->bus >= secondary && b->bus <= subordinate);
+ return (dev->bus >= secondary && dev->bus <= subordinate);
}
static pciDevice *
pciGetParentDevice(virConnectPtr conn, pciDevice *dev)
{
pciDevice *parent = NULL;
- pciIterDevices(conn, pciIsParent, dev, &parent);
+ pciIterDevices(conn, pciIsParent, dev, &parent, NULL);
return parent;
}
@@ -438,9 +447,11 @@ pciGetParentDevice(virConnectPtr conn, pciDevice *dev)
* devices behind a bus.
*/
static int
-pciTrySecondaryBusReset(virConnectPtr conn, pciDevice *dev)
+pciTrySecondaryBusReset(virConnectPtr conn,
+ pciDevice *dev,
+ pciDeviceList *activeDevs)
{
- pciDevice *parent;
+ pciDevice *parent, *conflict;
uint8_t config_space[PCI_CONF_LEN];
uint16_t ctl;
int ret = -1;
@@ -450,10 +461,10 @@ pciTrySecondaryBusReset(virConnectPtr conn, pciDevice *dev)
* In future, we could allow it so long as those devices
* are not in use by the host or other guests.
*/
- if (pciBusContainsOtherDevices(conn, dev)) {
+ if ((conflict = pciBusContainsActiveDevices(conn, dev, activeDevs))) {
pciReportError(conn, VIR_ERR_NO_SUPPORT,
- _("Other devices on bus with %s, not doing bus reset"),
- dev->name);
+ _("Active %s devices on bus with %s, not doing bus reset"),
+ conflict->name, dev->name);
return -1;
}
@@ -567,10 +578,18 @@ pciInitDevice(virConnectPtr conn, pciDevice *dev)
}
int
-pciResetDevice(virConnectPtr conn, pciDevice *dev)
+pciResetDevice(virConnectPtr conn,
+ pciDevice *dev,
+ pciDeviceList *activeDevs)
{
int ret = -1;
+ if (activeDevs && pciDeviceListFind(activeDevs, dev)) {
+ pciReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Not resetting active device %s"), dev->name);
+ return -1;
+ }
+
if (!dev->initted && pciInitDevice(conn, dev) < 0)
return -1;
@@ -589,7 +608,7 @@ pciResetDevice(virConnectPtr conn, pciDevice *dev)
/* Bus reset is not an option with the root bus */
if (ret < 0 && dev->bus != 0)
- ret = pciTrySecondaryBusReset(conn, dev);
+ ret = pciTrySecondaryBusReset(conn, dev, activeDevs);
if (ret < 0) {
virErrorPtr err = virGetLastError();
@@ -885,8 +904,116 @@ pciGetDevice(virConnectPtr conn,
void
pciFreeDevice(virConnectPtr conn ATTRIBUTE_UNUSED, pciDevice *dev)
{
+ if (!dev)
+ return;
VIR_DEBUG("%s %s: freeing", dev->id, dev->name);
if (dev->fd >= 0)
close(dev->fd);
VIR_FREE(dev);
}
+
+void pciDeviceSetManaged(pciDevice *dev, unsigned managed)
+{
+ dev->managed = !!managed;
+}
+
+unsigned pciDeviceGetManaged(pciDevice *dev)
+{
+ return dev->managed;
+}
+
+pciDeviceList *
+pciDeviceListNew(virConnectPtr conn)
+{
+ pciDeviceList *list;
+
+ if (VIR_ALLOC(list) < 0) {
+ virReportOOMError(conn);
+ return NULL;
+ }
+
+ return list;
+}
+
+void
+pciDeviceListFree(virConnectPtr conn,
+ pciDeviceList *list)
+{
+ int i;
+
+ if (!list)
+ return;
+
+ for (i = 0; i < list->count; i++) {
+ pciFreeDevice(conn, list->devs[i]);
+ list->devs[i] = NULL;
+ }
+
+ list->count = 0;
+ VIR_FREE(list->devs);
+ VIR_FREE(list);
+}
+
+int
+pciDeviceListAdd(virConnectPtr conn,
+ pciDeviceList *list,
+ pciDevice *dev)
+{
+ if (pciDeviceListFind(list, dev)) {
+ pciReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Device %s is already in use"), dev->name);
+ return -1;
+ }
+
+ if (VIR_REALLOC_N(list->devs, list->count+1) < 0) {
+ virReportOOMError(conn);
+ return -1;
+ }
+
+ list->devs[list->count++] = dev;
+
+ return 0;
+}
+
+void
+pciDeviceListDel(virConnectPtr conn ATTRIBUTE_UNUSED,
+ pciDeviceList *list,
+ pciDevice *dev)
+{
+ int i;
+
+ for (i = 0; i < list->count; i++) {
+ if (list->devs[i]->domain != dev->domain ||
+ list->devs[i]->bus != dev->bus ||
+ list->devs[i]->slot != dev->slot ||
+ list->devs[i]->function != dev->function)
+ continue;
+
+ pciFreeDevice(conn, list->devs[i]);
+
+ if (i != --list->count)
+ memmove(&list->devs[i],
+ &list->devs[i+1],
+ sizeof(*list->devs) * (list->count-i));
+
+ if (VIR_REALLOC_N(list->devs, list->count) < 0) {
+ ; /* not fatal */
+ }
+
+ break;
+ }
+}
+
+pciDevice *
+pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
+{
+ int i;
+
+ for (i = 0; i < list->count; i++)
+ if (list->devs[i]->domain == dev->domain &&
+ list->devs[i]->bus == dev->bus &&
+ list->devs[i]->slot == dev->slot &&
+ list->devs[i]->function == dev->function)
+ return list->devs[i];
+ return NULL;
+}
diff --git a/src/pci.h b/src/pci.h
index 47882ef..685b0af 100644
--- a/src/pci.h
+++ b/src/pci.h
@@ -27,6 +27,11 @@
typedef struct _pciDevice pciDevice;
+typedef struct {
+ unsigned count;
+ pciDevice **devs;
+} pciDeviceList;
+
pciDevice *pciGetDevice (virConnectPtr conn,
unsigned domain,
unsigned bus,
@@ -39,6 +44,22 @@ int pciDettachDevice (virConnectPtr conn,
int pciReAttachDevice (virConnectPtr conn,
pciDevice *dev);
int pciResetDevice (virConnectPtr conn,
- pciDevice *dev);
+ pciDevice *dev,
+ pciDeviceList *activeDevs);
+void pciDeviceSetManaged(pciDevice *dev,
+ unsigned managed);
+unsigned pciDeviceGetManaged(pciDevice *dev);
+
+pciDeviceList *pciDeviceListNew (virConnectPtr conn);
+void pciDeviceListFree (virConnectPtr conn,
+ pciDeviceList *list);
+int pciDeviceListAdd (virConnectPtr conn,
+ pciDeviceList *list,
+ pciDevice *dev);
+void pciDeviceListDel (virConnectPtr conn,
+ pciDeviceList *list,
+ pciDevice *dev);
+pciDevice * pciDeviceListFind (pciDeviceList *list,
+ pciDevice *dev);
#endif /* __VIR_PCI_H__ */
diff --git a/src/qemu_conf.h b/src/qemu_conf.h
index 70fe9c8..cde326d 100644
--- a/src/qemu_conf.h
+++ b/src/qemu_conf.h
@@ -34,6 +34,7 @@
#include "domain_event.h"
#include "threads.h"
#include "security.h"
+#include "pci.h"
#define qemudDebug(fmt, ...) do {} while(0)
@@ -90,6 +91,8 @@ struct qemud_driver {
char *securityDriverName;
virSecurityDriverPtr securityDriver;
+
+ pciDeviceList *activePciHostdevs;
};
/* Status needed to reconenct to running VMs */
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 9f87d2a..7dbf4a2 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -126,6 +126,9 @@ static int qemudDomainSetMemoryBalloon(virConnectPtr conn,
virDomainObjPtr vm,
unsigned long newmem);
+static int qemuUpdateActivePciHostdevs(struct qemud_driver *driver,
+ virDomainDefPtr def);
+
static struct qemud_driver *qemu_driver = NULL;
@@ -334,6 +337,10 @@ qemudReconnectVMs(struct qemud_driver *driver)
if ((vm->logfile = qemudLogFD(NULL, driver->logDir, vm->def->name)) < 0)
goto next_error;
+ if (qemuUpdateActivePciHostdevs(driver, vm->def) < 0) {
+ goto next_error;
+ }
+
if (vm->def->id >= driver->nextvmid)
driver->nextvmid = vm->def->id + 1;
@@ -515,6 +522,9 @@ qemudStartup(void) {
if ((qemu_driver->caps = qemudCapsInit()) == NULL)
goto out_of_memory;
+ if ((qemu_driver->activePciHostdevs = pciDeviceListNew(NULL)) == NULL)
+ goto error;
+
if (qemudLoadDriverConfig(qemu_driver, driverConf) < 0) {
goto error;
}
@@ -627,6 +637,7 @@ qemudShutdown(void) {
return -1;
qemuDriverLock(qemu_driver);
+ pciDeviceListFree(NULL, qemu_driver->activePciHostdevs);
virCapabilitiesFree(qemu_driver->caps);
virDomainObjListFree(&qemu_driver->domains);
@@ -1209,48 +1220,16 @@ static int qemudNextFreeVNCPort(struct qemud_driver *driver ATTRIBUTE_UNUSED) {
return -1;
}
-static int qemuPrepareHostDevices(virConnectPtr conn,
- virDomainDefPtr def) {
+static pciDeviceList *
+qemuGetPciHostDeviceList(virConnectPtr conn,
+ virDomainDefPtr def)
+{
+ pciDeviceList *list;
int i;
- /* We have to use 2 loops here. *All* devices must
- * be detached before we reset any of them, because
- * in some cases you have to reset the whole PCI,
- * which impacts all devices on it
- */
-
- for (i = 0 ; i < def->nhostdevs ; i++) {
- virDomainHostdevDefPtr hostdev = def->hostdevs[i];
-
- if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
- continue;
- if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
- continue;
-
- if (hostdev->managed) {
- pciDevice *dev = pciGetDevice(conn,
- hostdev->source.subsys.u.pci.domain,
- hostdev->source.subsys.u.pci.bus,
- hostdev->source.subsys.u.pci.slot,
- hostdev->source.subsys.u.pci.function);
- if (!dev)
- goto error;
-
- if (pciDettachDevice(conn, dev) < 0) {
- pciFreeDevice(conn, dev);
- goto error;
- }
-
- pciFreeDevice(conn, dev);
- } /* else {
- XXX validate that non-managed device isn't in use, eg
- by checking that device is either un-bound, or bound
- to pci-stub.ko
- } */
- }
+ if (!(list = pciDeviceListNew(conn)))
+ return NULL;
- /* Now that all the PCI hostdevs have be dettached, we can safely
- * reset them */
for (i = 0 ; i < def->nhostdevs ; i++) {
virDomainHostdevDefPtr hostdev = def->hostdevs[i];
pciDevice *dev;
@@ -1265,95 +1244,151 @@ static int qemuPrepareHostDevices(virConnectPtr conn,
hostdev->source.subsys.u.pci.bus,
hostdev->source.subsys.u.pci.slot,
hostdev->source.subsys.u.pci.function);
- if (!dev)
- goto error;
+ if (!dev) {
+ pciDeviceListFree(conn, list);
+ return NULL;
+ }
- if (pciResetDevice(conn, dev) < 0) {
+ if (pciDeviceListAdd(conn, list, dev) < 0) {
pciFreeDevice(conn, dev);
- goto error;
+ pciDeviceListFree(conn, list);
+ return NULL;
}
- pciFreeDevice(conn, dev);
+ pciDeviceSetManaged(dev, hostdev->managed);
}
- return 0;
+ return list;
+}
-error:
- return -1;
+static int
+qemuUpdateActivePciHostdevs(struct qemud_driver *driver,
+ virDomainDefPtr def)
+{
+ pciDeviceList *pcidevs;
+ int i, ret;
+
+ if (!def->nhostdevs)
+ return 0;
+
+ if (!(pcidevs = qemuGetPciHostDeviceList(NULL, def)))
+ return -1;
+
+ ret = 0;
+
+ for (i = 0; i < pcidevs->count; i++) {
+ if (pciDeviceListAdd(NULL,
+ driver->activePciHostdevs,
+ pcidevs->devs[i]) < 0) {
+ ret = -1;
+ break;
+ }
+ pcidevs->devs[i] = NULL;
+ }
+
+ pciDeviceListFree(NULL, pcidevs);
+ return ret;
}
-static void
-qemuDomainReAttachHostDevices(virConnectPtr conn, virDomainDefPtr def)
+static int
+qemuPrepareHostDevices(virConnectPtr conn,
+ struct qemud_driver *driver,
+ virDomainDefPtr def)
{
+ pciDeviceList *pcidevs;
int i;
- /* Again 2 loops; reset all the devices before re-attach */
+ if (!def->nhostdevs)
+ return 0;
- for (i = 0 ; i < def->nhostdevs ; i++) {
- virDomainHostdevDefPtr hostdev = def->hostdevs[i];
- pciDevice *dev;
+ if (!(pcidevs = qemuGetPciHostDeviceList(conn, def)))
+ return -1;
- if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
- continue;
- if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
- continue;
+ /* We have to use 3 loops here. *All* devices must
+ * be detached before we reset any of them, because
+ * in some cases you have to reset the whole PCI,
+ * which impacts all devices on it. Also, all devices
+ * must be reset before being marked as active.
+ */
- dev = pciGetDevice(conn,
- hostdev->source.subsys.u.pci.domain,
- hostdev->source.subsys.u.pci.bus,
- hostdev->source.subsys.u.pci.slot,
- hostdev->source.subsys.u.pci.function);
- if (!dev) {
- virErrorPtr err = virGetLastError();
- VIR_ERROR(_("Failed to allocate pciDevice: %s\n"),
- err ? err->message : "");
- virResetError(err);
- continue;
- }
+ /* XXX validate that non-managed device isn't in use, eg
+ * by checking that device is either un-bound, or bound
+ * to pci-stub.ko
+ */
- if (pciResetDevice(conn, dev) < 0) {
- virErrorPtr err = virGetLastError();
- VIR_ERROR(_("Failed to reset PCI device: %s\n"),
- err ? err->message : "");
- virResetError(err);
- }
+ for (i = 0; i < pcidevs->count; i++)
+ if (pciDeviceGetManaged(pcidevs->devs[i]) &&
+ pciDettachDevice(conn, pcidevs->devs[i]) < 0)
+ goto error;
+
+ /* Now that all the PCI hostdevs have be dettached, we can safely
+ * reset them */
+ for (i = 0; i < pcidevs->count; i++)
+ if (pciResetDevice(conn, pcidevs->devs[i],
+ driver->activePciHostdevs) < 0)
+ goto error;
- pciFreeDevice(conn, dev);
+ /* Now mark all the devices as active */
+ for (i = 0; i < pcidevs->count; i++) {
+ if (pciDeviceListAdd(conn,
+ driver->activePciHostdevs,
+ pcidevs->devs[i]) < 0)
+ goto error;
+ pcidevs->devs[i] = NULL;
}
- for (i = 0 ; i < def->nhostdevs ; i++) {
- virDomainHostdevDefPtr hostdev = def->hostdevs[i];
- pciDevice *dev;
+ pciDeviceListFree(conn, pcidevs);
+ return 0;
- if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
- continue;
- if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
- continue;
- if (!hostdev->managed)
- continue;
+error:
+ pciDeviceListFree(conn, pcidevs);
+ return -1;
+}
- dev = pciGetDevice(conn,
- hostdev->source.subsys.u.pci.domain,
- hostdev->source.subsys.u.pci.bus,
- hostdev->source.subsys.u.pci.slot,
- hostdev->source.subsys.u.pci.function);
- if (!dev) {
+static void
+qemuDomainReAttachHostDevices(virConnectPtr conn,
+ struct qemud_driver *driver,
+ virDomainDefPtr def)
+{
+ pciDeviceList *pcidevs;
+ int i;
+
+ if (!def->nhostdevs)
+ return;
+
+ if (!(pcidevs = qemuGetPciHostDeviceList(conn, def))) {
+ virErrorPtr err = virGetLastError();
+ VIR_ERROR(_("Failed to allocate pciDeviceList: %s\n"),
+ err ? err->message : "");
+ virResetError(err);
+ return;
+ }
+
+ /* Again 3 loops; mark all devices as inactive before reset
+ * them and reset all the devices before re-attach */
+
+ for (i = 0; i < pcidevs->count; i++)
+ pciDeviceListDel(conn, driver->activePciHostdevs, pcidevs->devs[i]);
+
+ for (i = 0; i < pcidevs->count; i++)
+ if (pciResetDevice(conn, pcidevs->devs[i],
+ driver->activePciHostdevs) < 0) {
virErrorPtr err = virGetLastError();
- VIR_ERROR(_("Failed to allocate pciDevice: %s\n"),
+ VIR_ERROR(_("Failed to reset PCI device: %s\n"),
err ? err->message : "");
virResetError(err);
- continue;
}
- if (pciReAttachDevice(conn, dev) < 0) {
+ for (i = 0; i < pcidevs->count; i++)
+ if (pciDeviceGetManaged(pcidevs->devs[i]) &&
+ pciReAttachDevice(conn, pcidevs->devs[i]) < 0) {
virErrorPtr err = virGetLastError();
VIR_ERROR(_("Failed to re-attach PCI device: %s\n"),
err ? err->message : "");
virResetError(err);
}
- pciFreeDevice(conn, dev);
- }
+ pciDeviceListFree(conn, pcidevs);
}
static int qemudDomainSetSecurityLabel(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm)
@@ -1468,7 +1503,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
&qemuCmdFlags) < 0)
goto cleanup;
- if (qemuPrepareHostDevices(conn, vm->def) < 0)
+ if (qemuPrepareHostDevices(conn, driver, vm->def) < 0)
goto cleanup;
vm->def->id = driver->nextvmid++;
@@ -1634,7 +1669,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
VIR_FREE(vm->def->seclabel.imagelabel);
}
- qemuDomainReAttachHostDevices(conn, vm->def);
+ qemuDomainReAttachHostDevices(conn, driver, vm->def);
if (qemudRemoveDomainStatus(conn, driver, vm) < 0) {
VIR_WARN(_("Failed to remove domain status for %s"),
@@ -5247,6 +5282,7 @@ out:
static int
qemudNodeDeviceReset (virNodeDevicePtr dev)
{
+ struct qemud_driver *driver = dev->conn->privateData;
pciDevice *pci;
unsigned domain, bus, slot, function;
int ret = -1;
@@ -5258,11 +5294,14 @@ qemudNodeDeviceReset (virNodeDevicePtr dev)
if (!pci)
return -1;
- if (pciResetDevice(dev->conn, pci) < 0)
+ qemuDriverLock(driver);
+
+ if (pciResetDevice(dev->conn, pci, driver->activePciHostdevs) < 0)
goto out;
ret = 0;
out:
+ qemuDriverUnlock(driver);
pciFreeDevice(dev->conn, pci);
return ret;
}
diff --git a/src/xen_unified.c b/src/xen_unified.c
index e708980..ba8c769 100644
--- a/src/xen_unified.c
+++ b/src/xen_unified.c
@@ -1529,7 +1529,7 @@ xenUnifiedNodeDeviceReset (virNodeDevicePtr dev)
if (!pci)
return -1;
- if (pciResetDevice(dev->conn, pci) < 0)
+ if (pciResetDevice(dev->conn, pci, NULL) < 0)
goto out;
ret = 0;
--
1.6.2.5

View File

@@ -1,121 +0,0 @@
From d79f35fbd4eaf610972621b042993d00f3247d5c Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 14 Aug 2009 08:31:11 +0100
Subject: [PATCH] Allow PM reset on multi-function PCI devices
https://bugzilla.redhat.com/515689
It turns out that a PCI Power Management reset only affects individual
functions, and not the whole device.
The PCI Power Management spec talks about resetting the 'device' rather
than the 'function', but Intel's Dexuan Cui informs me that it is
actually a per-function reset.
Also, Yu Zhao has added pci_pm_reset() to the kernel, and it doesn't
reject multi-function devices, so it must be true! :-)
(A side issue is that we could defer the PM reset to the kernel if we
could detect that the kernel has PM reset support, but barring version
number checks we don't have a way to detect that support)
* src/pci.c: remove the pciDeviceContainsOtherFunctions() check from
pciTryPowerManagementReset() and prefer PM reset over bus reset
where both are available
Cc: Cui, Dexuan <dexuan.cui@intel.com>
Cc: Yu Zhao <yu.zhao@intel.com>
(cherry picked from commit 64a6682b93a2a8aa38067a43979c9eaf993d2b41)
Fedora-patch: libvirt-allow-pm-reset-on-multi-function-pci-devices.patch
---
src/pci.c | 48 +++++++++---------------------------------------
1 files changed, 9 insertions(+), 39 deletions(-)
diff --git a/src/pci.c b/src/pci.c
index 68a380d..f78ab9f 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -397,29 +397,6 @@ pciBusContainsOtherDevices(virConnectPtr conn, pciDevice *dev)
return 1;
}
-/* Any other functions on this device ? */
-static int
-pciSharesDevice(pciDevice *a, pciDevice *b)
-{
- return
- a->domain == b->domain &&
- a->bus == b->bus &&
- a->slot == b->slot &&
- a->function != b->function;
-}
-
-static int
-pciDeviceContainsOtherFunctions(virConnectPtr conn, pciDevice *dev)
-{
- pciDevice *matched = NULL;
- if (pciIterDevices(conn, pciSharesDevice, dev, &matched) < 0)
- return 1;
- if (!matched)
- return 0;
- pciFreeDevice(conn, matched);
- return 1;
-}
-
/* Is @a the parent of @b ? */
static int
pciIsParent(pciDevice *a, pciDevice *b)
@@ -524,7 +501,7 @@ out:
* above we require the device supports a full internal reset.
*/
static int
-pciTryPowerManagementReset(virConnectPtr conn, pciDevice *dev)
+pciTryPowerManagementReset(virConnectPtr conn ATTRIBUTE_UNUSED, pciDevice *dev)
{
uint8_t config_space[PCI_CONF_LEN];
uint32_t ctl;
@@ -532,16 +509,6 @@ pciTryPowerManagementReset(virConnectPtr conn, pciDevice *dev)
if (!dev->pci_pm_cap_pos)
return -1;
- /* For now, we just refuse to do a power management reset
- * if there are other functions on this device.
- * In future, we could allow it so long as those functions
- * are not in use by the host or other guests.
- */
- if (pciDeviceContainsOtherFunctions(conn, dev)) {
- VIR_WARN("%s contains other functions, not resetting", dev->name);
- return -1;
- }
-
/* Save and restore the device's config space. */
if (pciRead(dev, 0, &config_space[0], PCI_CONF_LEN) < 0) {
VIR_WARN("Failed to save PCI config space for %s", dev->name);
@@ -599,14 +566,17 @@ pciResetDevice(virConnectPtr conn, pciDevice *dev)
if (dev->has_flr)
return 0;
+ /* If the device supports PCI power management reset,
+ * that's the next best thing because it only resets
+ * the function, not the whole device.
+ */
+ if (dev->has_pm_reset)
+ ret = pciTryPowerManagementReset(conn, dev);
+
/* Bus reset is not an option with the root bus */
- if (dev->bus != 0)
+ if (ret < 0 && dev->bus != 0)
ret = pciTrySecondaryBusReset(conn, dev);
- /* Next best option is a PCI power management reset */
- if (ret < 0 && dev->has_pm_reset)
- ret = pciTryPowerManagementReset(conn, dev);
-
if (ret < 0)
pciReportError(conn, VIR_ERR_NO_SUPPORT,
_("No PCI reset capability available for %s"),
--
1.6.2.5

View File

@@ -1,31 +0,0 @@
From 1319852c443c432d44a2e73508f3be742027f780 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Wed, 19 Aug 2009 11:28:02 +0100
Subject: [PATCH] Don't overwrite error in qemudWaitForMonitor()
May help diagnose https://bugzilla.redhat.com/515054
Fedora-patch: libvirt-do-not-overwrite-error-in-wait-for-monitor.patch
---
src/qemu_driver.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index dfd19c5..74e106a 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -985,8 +985,9 @@ static int qemudWaitForMonitor(virConnectPtr conn,
return 0;
/* Unexpected end of file - inform user of QEMU log data */
- qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
- _("unable to start guest: %s"), buf);
+ if (!virGetLastError())
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("unable to start guest: %s"), buf);
return -1;
}
--
1.6.2.5

View File

@@ -1,53 +0,0 @@
From 2754da03d65f216271c81ece791b96a19272c812 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Sat, 15 Aug 2009 19:38:15 +0100
Subject: [PATCH] Fix list updating after disk hot-unplug
The current code makes a poor effort at updating the device arrays after
hot-unplug. Fix that and combine the two code paths into one.
* src/qemu_driver.c: fix list updating in qemudDomainDetachPciDiskDevice()
(cherry picked from commit 4e12af5623e4a962a6bb911af06fa29aa85befba)
Fedora-patch: libvirt-fix-device-list-update-after-detach.patch
---
src/qemu_driver.c | 21 ++++++++++-----------
1 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index dfd19c5..ce04beb 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -4123,18 +4123,17 @@ try_command:
goto cleanup;
}
- if (vm->def->ndisks > 1) {
- vm->def->disks[i] = vm->def->disks[--vm->def->ndisks];
- if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks) < 0) {
- virReportOOMError(conn);
- goto cleanup;
- }
- qsort(vm->def->disks, vm->def->ndisks, sizeof(*vm->def->disks),
- virDomainDiskQSort);
- } else {
- VIR_FREE(vm->def->disks[0]);
- vm->def->ndisks = 0;
+ if (i != --vm->def->ndisks)
+ memmove(&vm->def->disks[i],
+ &vm->def->disks[i+1],
+ sizeof(*vm->def->disks) * (vm->def->ndisks-i));
+ if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks) < 0) {
+ virReportOOMError(conn);
+ goto cleanup;
}
+ qsort(vm->def->disks, vm->def->ndisks, sizeof(*vm->def->disks),
+ virDomainDiskQSort);
+
ret = 0;
cleanup:
--
1.6.2.5

View File

@@ -1,45 +0,0 @@
From 21ef933dfdd64c754d184d41d87ecd94eaddf697 Mon Sep 17 00:00:00 2001
From: Chris Lalancette <clalance@redhat.com>
Date: Wed, 5 Aug 2009 13:42:07 +0200
Subject: [PATCH] Run 'cont' on successful migration finish.
https://bugzilla.redhat.com/516187
As of qemu 0.10.6, qemu now honors the -S flag on incoming migration.
That means that when the migration completes, we have to issue a
'cont' command to get the VM running again. We do it unconditionally
since it won't hurt on older qemu.
(cherry picked from commit d1ec4d7a5a4f50c9492137eaab4f021caa075f95)
Fedora-patch: libvirt-fix-migration-completion-with-newer-qemu.patch
---
src/qemu_driver.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 7dbf4a2..ff56f61 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -5162,7 +5162,18 @@ qemudDomainMigrateFinish2 (virConnectPtr dconn,
*/
if (retcode == 0) {
dom = virGetDomain (dconn, vm->def->name, vm->def->uuid);
+
+ /* run 'cont' on the destination, which allows migration on qemu
+ * >= 0.10.6 to work properly. This isn't strictly necessary on
+ * older qemu's, but it also doesn't hurt anything there
+ */
+ if (qemudMonitorCommand(vm, "cont", &info) < 0) {
+ qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ "%s", _("resume operation failed"));
+ goto cleanup;
+ }
VIR_FREE(info);
+
vm->state = VIR_DOMAIN_RUNNING;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_RESUMED,
--
1.6.2.5

View File

@@ -1,61 +0,0 @@
From ea544e7b038776c7db555ab0428b63ebb1604163 Mon Sep 17 00:00:00 2001
From: Darryl L. Pierce <dpierce@redhat.com>
Date: Fri, 21 Aug 2009 16:57:29 +0200
Subject: [PATCH] 517157 fix selinux problem with images on NFS
* src/security_selinux.c: ignores EOPNOTSUPP when attempting to access an
NFS share
(cherry picked from commit 777fc2e9d60844a7387355d9cef06bd25190d146)
Fedora-patch: libvirt-fix-selinux-problem-with-images-on-nfs.patch
---
src/security_selinux.c | 25 +++++++++++++++++--------
1 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/security_selinux.c b/src/security_selinux.c
index 8ebe1fe..97f16b3 100644
--- a/src/security_selinux.c
+++ b/src/security_selinux.c
@@ -285,6 +285,8 @@ SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
VIR_INFO("Setting SELinux context on '%s' to '%s'", path, tcon);
if (setfilecon(path, tcon) < 0) {
+ int setfilecon_errno = errno;
+
if (getfilecon(path, &econ) >= 0) {
if (STREQ(tcon, econ)) {
freecon(econ);
@@ -293,14 +295,21 @@ SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
}
freecon(econ);
}
- virSecurityReportError(conn, VIR_ERR_ERROR,
- _("%s: unable to set security context "
- "'\%s\' on %s: %s."), __func__,
- tcon,
- path,
- virStrerror(errno, ebuf, sizeof ebuf));
- if (security_getenforce() == 1)
- return -1;
+
+ /* if the error complaint is related to an image hosted on
+ * an nfs mount, then ignore it.
+ * rhbz 517157
+ */
+ if (setfilecon_errno != EOPNOTSUPP) {
+ virSecurityReportError(conn, VIR_ERR_ERROR,
+ _("%s: unable to set security context "
+ "'\%s\' on %s: %s."), __func__,
+ tcon,
+ path,
+ virStrerror(errno, ebuf, sizeof ebuf));
+ if (security_getenforce() == 1)
+ return -1;
+ }
}
return 0;
}
--
1.6.2.5

View File

@@ -1,38 +0,0 @@
From 0878a15ad937449b5dfc4cf49888cc7753473e33 Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Fri, 26 Jun 2009 18:14:16 +0000
Subject: [PATCH] Fix xen driver segfault with newer Xen
https://bugzilla.redhat.com/518091
(cherry picked from commit 14435163a086c0bcdff04308077fa46a5fa08bb0)
Fedora-patch: libvirt-fix-xen-driver-segfault-with-newer-xen.patch
---
src/xend_internal.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/src/xend_internal.c b/src/xend_internal.c
index 2e2fd21..c3a9836 100644
--- a/src/xend_internal.c
+++ b/src/xend_internal.c
@@ -2077,7 +2077,15 @@ xenDaemonParseSxprGraphicsNew(virConnectPtr conn,
if (sexpr_lookup(node, "device/vfb")) {
/* New style graphics config for PV guests in >= 3.0.4,
* or for HVM guests in >= 3.0.5 */
- tmp = sexpr_node(node, "device/vfb/type");
+ if (sexpr_node(node, "device/vfb/type")) {
+ tmp = sexpr_node(node, "device/vfb/type");
+ } else if (sexpr_node(node, "device/vfb/vnc")) {
+ tmp = "vnc";
+ } else if (sexpr_node(node, "device/vfb/sdl")) {
+ tmp = "sdl";
+ } else {
+ tmp = "unknown";
+ }
if (VIR_ALLOC(graphics) < 0)
goto no_memory;
--
1.6.2.5

View File

@@ -1,141 +0,0 @@
From 9f80bab3829b97ac2802c15b9f3e4a6bbbb24627 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 14 Aug 2009 08:31:11 +0100
Subject: [PATCH] Improve PCI host device reset error message
https://bugzilla.redhat.com/499678
Currently, if we are unable to reset a PCI device we return a fairly
generic 'No PCI reset capability available' error message.
Fix that by returning an error from the individual reset messages and
using that error to construct the higher level error mesage.
* src/pci.c: set errors in pciTryPowerManagementReset() and
pciTrySecondaryBusReset() on failure; use those error messages
in pciResetDevice(), or explain that no reset support is available
(cherry picked from commit ebea34185612c3b96d7d3bbd8b7c2ce6c9f4fe6f)
Fedora-patch: libvirt-improve-pci-hostdev-reset-error-message.patch
---
src/pci.c | 44 +++++++++++++++++++++++++++++++-------------
src/qemu_driver.c | 4 ++--
2 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/src/pci.c b/src/pci.c
index f78ab9f..1dddb08 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -451,15 +451,18 @@ pciTrySecondaryBusReset(virConnectPtr conn, pciDevice *dev)
* are not in use by the host or other guests.
*/
if (pciBusContainsOtherDevices(conn, dev)) {
- VIR_WARN("Other devices on bus with %s, not doing bus reset",
- dev->name);
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Other devices on bus with %s, not doing bus reset"),
+ dev->name);
return -1;
}
/* Find the parent bus */
parent = pciGetParentDevice(conn, dev);
if (!parent) {
- VIR_WARN("Failed to find parent device for %s", dev->name);
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Failed to find parent device for %s"),
+ dev->name);
return -1;
}
@@ -470,7 +473,9 @@ pciTrySecondaryBusReset(virConnectPtr conn, pciDevice *dev)
* are multiple devices/functions
*/
if (pciRead(dev, 0, config_space, PCI_CONF_LEN) < 0) {
- VIR_WARN("Failed to save PCI config space for %s", dev->name);
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Failed to save PCI config space for %s"),
+ dev->name);
goto out;
}
@@ -487,9 +492,12 @@ pciTrySecondaryBusReset(virConnectPtr conn, pciDevice *dev)
usleep(200 * 1000); /* sleep 200ms */
- if (pciWrite(dev, 0, config_space, PCI_CONF_LEN) < 0)
- VIR_WARN("Failed to restore PCI config space for %s", dev->name);
-
+ if (pciWrite(dev, 0, config_space, PCI_CONF_LEN) < 0) {
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Failed to restore PCI config space for %s"),
+ dev->name);
+ goto out;
+ }
ret = 0;
out:
pciFreeDevice(conn, parent);
@@ -511,7 +519,9 @@ pciTryPowerManagementReset(virConnectPtr conn ATTRIBUTE_UNUSED, pciDevice *dev)
/* Save and restore the device's config space. */
if (pciRead(dev, 0, &config_space[0], PCI_CONF_LEN) < 0) {
- VIR_WARN("Failed to save PCI config space for %s", dev->name);
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Failed to save PCI config space for %s"),
+ dev->name);
return -1;
}
@@ -528,8 +538,12 @@ pciTryPowerManagementReset(virConnectPtr conn ATTRIBUTE_UNUSED, pciDevice *dev)
usleep(10 * 1000); /* sleep 10ms */
- if (pciWrite(dev, 0, &config_space[0], PCI_CONF_LEN) < 0)
- VIR_WARN("Failed to restore PCI config space for %s", dev->name);
+ if (pciWrite(dev, 0, &config_space[0], PCI_CONF_LEN) < 0) {
+ pciReportError(conn, VIR_ERR_NO_SUPPORT,
+ _("Failed to restore PCI config space for %s"),
+ dev->name);
+ return -1;
+ }
return 0;
}
@@ -577,10 +591,14 @@ pciResetDevice(virConnectPtr conn, pciDevice *dev)
if (ret < 0 && dev->bus != 0)
ret = pciTrySecondaryBusReset(conn, dev);
- if (ret < 0)
+ if (ret < 0) {
+ virErrorPtr err = virGetLastError();
pciReportError(conn, VIR_ERR_NO_SUPPORT,
- _("No PCI reset capability available for %s"),
- dev->name);
+ _("Unable to reset PCI device %s: %s"),
+ dev->name,
+ err ? err->message : _("no FLR, PM reset or bus reset available"));
+ }
+
return ret;
}
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index ddd3693..9f87d2a 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1345,9 +1345,9 @@ qemuDomainReAttachHostDevices(virConnectPtr conn, virDomainDefPtr def)
continue;
}
- if (pciDettachDevice(conn, dev) < 0) {
+ if (pciReAttachDevice(conn, dev) < 0) {
virErrorPtr err = virGetLastError();
- VIR_ERROR(_("Failed to reset PCI device: %s\n"),
+ VIR_ERROR(_("Failed to re-attach PCI device: %s\n"),
err ? err->message : "");
virResetError(err);
}
--
1.6.2.5

View File

@@ -1,124 +0,0 @@
From 1e44604c0d4c2d4c1347c2a1027f1ea02a6499f9 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Fri, 14 Aug 2009 08:31:11 +0100
Subject: [PATCH] Reset and re-attach PCI host devices on guest shutdown
https://bugzilla.redhat.com/499561
When the guest shuts down, we should attempt to restore all PCI host
devices to a sane state.
In the case of managed hostdevs, we should reset and re-attach the
devices. In the case of unmanaged hostdevs, we should just reset them.
Note, KVM will already reset assigned devices when the guest shuts
down using whatever means it can, so we are only doing it to cover the
cases the kernel can't handle.
* src/qemu_driver.c: add qemuDomainReAttachHostDevices() and call
it from qemudShutdownVMDaemon()
(cherry picked from commit 4035152a8767e72fd4e26a91cb4d5afa75b72e61)
Fedora-patch: libvirt-reattach-pci-hostdevs-after-guest-shutdown.patch
---
src/qemu_driver.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index ce04beb..ddd3693 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -1282,6 +1282,80 @@ error:
return -1;
}
+static void
+qemuDomainReAttachHostDevices(virConnectPtr conn, virDomainDefPtr def)
+{
+ int i;
+
+ /* Again 2 loops; reset all the devices before re-attach */
+
+ for (i = 0 ; i < def->nhostdevs ; i++) {
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+ pciDevice *dev;
+
+ if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+ continue;
+ if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
+ continue;
+
+ dev = pciGetDevice(conn,
+ hostdev->source.subsys.u.pci.domain,
+ hostdev->source.subsys.u.pci.bus,
+ hostdev->source.subsys.u.pci.slot,
+ hostdev->source.subsys.u.pci.function);
+ if (!dev) {
+ virErrorPtr err = virGetLastError();
+ VIR_ERROR(_("Failed to allocate pciDevice: %s\n"),
+ err ? err->message : "");
+ virResetError(err);
+ continue;
+ }
+
+ if (pciResetDevice(conn, dev) < 0) {
+ virErrorPtr err = virGetLastError();
+ VIR_ERROR(_("Failed to reset PCI device: %s\n"),
+ err ? err->message : "");
+ virResetError(err);
+ }
+
+ pciFreeDevice(conn, dev);
+ }
+
+ for (i = 0 ; i < def->nhostdevs ; i++) {
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+ pciDevice *dev;
+
+ if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+ continue;
+ if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
+ continue;
+ if (!hostdev->managed)
+ continue;
+
+ dev = pciGetDevice(conn,
+ hostdev->source.subsys.u.pci.domain,
+ hostdev->source.subsys.u.pci.bus,
+ hostdev->source.subsys.u.pci.slot,
+ hostdev->source.subsys.u.pci.function);
+ if (!dev) {
+ virErrorPtr err = virGetLastError();
+ VIR_ERROR(_("Failed to allocate pciDevice: %s\n"),
+ err ? err->message : "");
+ virResetError(err);
+ continue;
+ }
+
+ if (pciDettachDevice(conn, dev) < 0) {
+ virErrorPtr err = virGetLastError();
+ VIR_ERROR(_("Failed to reset PCI device: %s\n"),
+ err ? err->message : "");
+ virResetError(err);
+ }
+
+ pciFreeDevice(conn, dev);
+ }
+}
+
static int qemudDomainSetSecurityLabel(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm)
{
if (vm->def->seclabel.label != NULL)
@@ -1560,6 +1634,8 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
VIR_FREE(vm->def->seclabel.imagelabel);
}
+ qemuDomainReAttachHostDevices(conn, vm->def);
+
if (qemudRemoveDomainStatus(conn, driver, vm) < 0) {
VIR_WARN(_("Failed to remove domain status for %s"),
vm->def->name);
--
1.6.2.5

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
3035b484861516a1cd425acef1e760e3 libvirt-0.6.2.tar.gz
SHA512 (libvirt-4.0.0.tar.xz) = c99ea305f427859eb070b5f0c43de48645a5c53a2aa8efc60f54f278ec3fa0b504307861309e1852f8d7bff4436afe00c859aac27691366a0c36c91341cea7a1