Compare commits

..

1 Commits

Author SHA1 Message Date
Alexandre Derumier
f3fde178c0 Merge branch 'fix-cpumap-version' into 'master'
cpu_map : sync_qemu_models : fix versionned models

See merge request libvirt/libvirt!258
2024-03-25 16:14:00 +00:00
9 changed files with 160 additions and 166 deletions

View File

@ -36,13 +36,6 @@ v10.2.0 (unreleased)
use the upcoming QEMU 9.0.0 release together with the development version
of edk2.
* qemu: Introduce virDomainGraphicsReload API
Reloading the graphics display is now supported for QEMU guests using
VNC. This is useful to make QEMU reload the TLS certificates without
restarting the guest. Available via the ``virDomainGraphicsReload`` API
and the ``domdisplay-reload`` virsh command.
* **Improvements**
* **Bug fixes**
@ -59,31 +52,6 @@ v10.2.0 (unreleased)
releases to 10.2.0 works as well, but the other direction remains broken
unless the fix is backported.
* node_device: Don't report spurious errors from PCI VPD parsing
In last release the PCI Vital Product Data parser was enhanced to report
errors but that effort failed as some kernels have the file but don't allow
reading it causing logs to be spammed with::
libvirtd[21055]: operation failed: failed to read the PCI VPD data
Since the data is used only in the node device XML and errors are ignored if
the parsing failed, this release removes all the error reporting.
* qemu: set correct SELinux label for unprivileged virtiofsd
It is now possible to use virtiofsd-based ``<filesystem>`` shares even
if the guest is confined using SELinux.
* qemu: fix a crash on unprivileged virtiofsd hotplug
Hotplugging virtiofsd-based filesystems works now.
* virt-admin: Fix segfault when libvirtd dies
``virt-admin`` no longer crashes when ``libvirtd`` unexpectedly closes
the connection.
v10.1.0 (2024-03-01)
====================

View File

@ -313,6 +313,7 @@ src/util/virnuma.c
src/util/virnvme.c
src/util/virobject.c
src/util/virpci.c
src/util/virpcivpd.c
src/util/virperf.c
src/util/virpidfile.c
src/util/virpolkit.c

View File

@ -18,7 +18,7 @@ msgstr ""
"Project-Id-Version: libvirt 6.0.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2024-03-22 09:54+0000\n"
"PO-Revision-Date: 2024-03-27 17:36+0000\n"
"PO-Revision-Date: 2024-02-29 14:36+0000\n"
"Last-Translator: 김인수 <simmon@nplob.com>\n"
"Language-Team: Korean <https://translate.fedoraproject.org/projects/libvirt/"
"libvirt/ko/>\n"
@ -482,7 +482,7 @@ msgstr " 저장소:"
#, c-format
msgid " [[--%1$s] <string>]..."
msgstr " [[--%1$s] <문자열>]..."
msgstr ""
#, c-format
msgid ""
@ -498,7 +498,7 @@ msgstr ""
#, c-format
msgid " {[--%1$s] <string>}..."
msgstr " {[--%1$s] <문자열>}..."
msgstr ""
#, c-format
msgid ""
@ -2850,7 +2850,7 @@ msgstr "resctrl 디렉토리 '%1$s'를 생성 할 수 없음"
#, c-format
msgid "Cannot create save directory '%1$s'"
msgstr "저장 디렉토리 '%1$s'를 생성 할 수 없습니다"
msgstr ""
#, c-format
msgid "Cannot create socket '%1$s'"
@ -3888,7 +3888,7 @@ msgid "Connections from inside daemon must be direct"
msgstr "내부 데몬에서 직접 연결해야 합니다"
msgid "Console only works in PTY mode"
msgstr "PTY 방식에서 콘솔만 동작합니다"
msgstr ""
msgid "Constant pages:"
msgstr "고정 페이지:"
@ -6638,19 +6638,19 @@ msgstr "%1$s 삭제 실패"
#, c-format
msgid "Failed to cleanup stale managed save dir '%1$s'"
msgstr "오래된 관리 저장 디렉토리 '%1$s' 정리에 실패했습니다"
msgstr ""
#, c-format
msgid "Failed to clear security context for agent for %1$s"
msgstr "%1$s용 관리를 위한 보안 문맥을 정리하는 데 실패하였습니다"
msgstr "%1$s를 위한 에이젠트의 보안 문맥을 삭제하는데 실패하였습니다"
#, c-format
msgid "Failed to clear security context for monitor for %1$s"
msgstr "%1$s용 모니터를 위한 보안 문맥 정리에 실패했습니다"
msgstr "%1$s의 모니터에 대한 보안 문맥을 삭제하는데 실패"
#, c-format
msgid "Failed to clone vol from %1$s"
msgstr "%1$s에서 볼륨 복제에 실패했습니다"
msgstr "%1$s에서 볼륨 복제하기 실패"
#, c-format
msgid "Failed to close bind target %1$s"
@ -6720,13 +6720,13 @@ msgstr "연결장치 개요 %1$d를 이름으로 변환하는데 실패"
#, c-format
msgid "Failed to convert loadparm '%1$s' to upper case"
msgstr "loadparm '%1$s'를 대문자로 변환하는 데 실패했습니다"
msgstr "loadparm '%1$s'을(를) 대문자로 변환하지 못했습니다"
msgid "Failed to convert the command string to argv-lists"
msgstr "명령 문자열을 argv-lists로 변환하는 데 실패했습니다"
msgstr "명령 문자열을 argv-lists로 변환하지 못했습니다"
msgid "Failed to copy XML node"
msgstr "XML 노드 복사에 실패했습니다"
msgstr "XML 노드를 복사하지 못했습니다"
#, c-format
msgid "Failed to core dump domain '%1$s' to %2$s"
@ -6755,10 +6755,10 @@ msgstr "SASL 클라이언트 문맥을 생성하는 데 실패: %1$d (%2$s)"
#, c-format
msgid "Failed to create SAVE dir %1$s"
msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
msgstr ""
msgid "Failed to create XML"
msgstr "XML 생성에 실패했습니다"
msgstr "XML 생성하기 실패"
msgid "Failed to create XML config object"
msgstr "XML 구성 개체를 생성하지 못했습니다"
@ -6795,42 +6795,42 @@ msgid "Failed to create directory for device %1$s"
msgstr "장치 %1$s의 디렉토리를 생성하는데 실패했습니다"
msgid "Failed to create disk pool geometry"
msgstr "디스크 풀 지오메트리 생성 실패했습니다"
msgstr "디스크 풀 지오메트리 생성 실패"
#, c-format
msgid "Failed to create domain from %1$s"
msgstr "%1$s에서 도메인 생성에 실패했습니다"
msgstr "%1$s에서 도메인 생성하기 실패"
#, c-format
msgid "Failed to create domain save file '%1$s'"
msgstr "도메인 저장 파일 '%1$s' 생성에 실패했습니다"
msgstr "도메인 저장 파일 '%1$s'를 만드는 데 실패"
#, c-format
msgid "Failed to create dump dir %1$s"
msgstr "덤프 디렉토리 %1$s 생성에 실패했습니다"
msgstr "덤프 디렉토리 %1$s을(를) 생성하지 못했습니다"
#, c-format
msgid "Failed to create file '%1$s'"
msgstr "파일 '%1$s' 생성에 실패했습니다"
msgstr "파일 '%1$s' 생성하기 실패"
#, c-format
msgid "Failed to create file '%1$s': couldn't determine fs type"
msgstr "파일 '%1$s' 생성에 실패: fs 유형 확인 할 수 없습니다"
msgstr "파일 '%1$s' 만들기 실패: fs 유형 확인 실패"
#, c-format
msgid "Failed to create filesystem probe for device %1$s"
msgstr "장치 %1$s의 파일시스템 조사 생성에 실패했습니다"
msgstr "장치 %1$s의 파일시스템 조사를 생성하는데 실패했습니다"
msgid "Failed to create interface node under bridge node in xml document"
msgstr "xml 문서에서 브리지 노드 하에서 연결장치 노드를 생성에 실패했습니다"
msgstr "xml 문서에서 브리지 노드 아래에 인터페이스 노드를 생성하는데 실패"
#, c-format
msgid "Failed to create iscsi context for %1$s"
msgstr "%1$s를 위한 iscsi 문맥 생성에 실패했습니다"
msgstr "%1$s를 위한 iscsi 문맥을 생성하는데 실패"
#, c-format
msgid "Failed to create lib dir %1$s"
msgstr "라이브러리 디렉토리 %1$s 생성에 실패했습니다"
msgstr "라이브러리 디렉토리 %1$s을(를) 작성하지 못했습니다"
#, c-format
msgid "Failed to create memory backing dir %1$s"
@ -6861,47 +6861,47 @@ msgstr "passt 상태 디렉토리 %1$s 생성에 실패함"
#, c-format
msgid "Failed to create pool %1$s"
msgstr "풀 %1$s를 생성에 실패했습니다"
msgstr "풀 %1$s를 생성하는 데 실패"
#, c-format
msgid "Failed to create pool from %1$s"
msgstr "%1$s에서 풀 생성에 실패했습니다"
msgstr "%1$s에서 풀 생성하기 실패"
msgid "Failed to create reboot thread, killing domain"
msgstr "재부팅 스레드 생성 실패, 도메인 종료"
#, c-format
msgid "Failed to create save dir %1$s"
msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
msgstr "저장 디렉토리 %1$s를 작성하지 못했습니다"
#, c-format
msgid "Failed to create slirp state dir %1$s"
msgstr "slirp 상태 디렉토리 %1$s 생성에 실패했습니다"
msgstr "slirp 상태 디렉토리 %1$s을 생성하는데 실패했습니다"
#, c-format
msgid "Failed to create snapshot dir %1$s"
msgstr "순간찍기 디렉토리 %1$s 생성에 실패했습니다"
msgstr "순간찍기 디렉토리 %1$s 생성에 실패"
msgid "Failed to create socket"
msgstr "소켓 생성에 실패했습니다"
msgstr "소켓 생성하기 실패"
#, c-format
msgid "Failed to create state dir %1$s"
msgstr "상태 디렉토리 %1$s 생성에 실패했습니다"
msgstr "상태 디렉토리 %1$s를 작성하지 못했습니다"
#, c-format
msgid "Failed to create state dir '%1$s'"
msgstr "상태 디렉토리 '%1$s' 생성에 실패했습니다"
msgstr "상태 디렉토리 '%1$s'를 작성하지 못했습니다"
#, c-format
msgid "Failed to create symlink '%1$s' to '%2$s'"
msgstr "심볼릭 링크 '%1$s'를 '%2$s'로 생성하는 데 실패했습니다"
msgstr "심볼릭 링크 '%1$s'를 '%2$s'에 대해 만들 수 없음"
msgid "Failed to create thread"
msgstr "쓰레드 생성에 실패했습니다"
msgstr "스레드 생성 실패"
msgid "Failed to create thread for receiving migration data"
msgstr "이전 자료를 수신하기 위하여 쓰레드 생성 실패했습니다"
msgstr "이전 자료를 수신하기 위하여 쓰레드 생성하는데 실패했습니다"
msgid "Failed to create thread to handle daemon restart"
msgstr "데몬 재시작을 처리할 스레드를 생성하지 못했습니다"
@ -6948,43 +6948,43 @@ msgstr "%1$s에서 볼륨 생성하기 실패"
#, c-format
msgid "Failed to create/open domain save xml file '%1$s'"
msgstr "도메인 저장 xml 파일 '%1$s' 생성/열기에 실패했습니다"
msgstr ""
#, c-format
msgid "Failed to define domain from %1$s"
msgstr "%1$s에서 도메인 정의하기 실패했습니다"
msgstr "%1$s에서 도메인 정의하기 실패"
#, c-format
msgid "Failed to define interface from %1$s"
msgstr "%1$s에서 인터페이스 정의하기 실패했습니다"
msgstr "%1$s에서 인터페이스 정의하기 실패"
#, c-format
msgid "Failed to define network filter from %1$s"
msgstr "%1$s에서 네트워크 필터 정의에 실패했습니다"
msgstr "%1$s에서 네트워크 필터 정의에 실패"
#, c-format
msgid "Failed to define network from %1$s"
msgstr "%1$s에서 네트워크 정의하기 실패했습니다"
msgstr "%1$s에서 네트워크 정의하기 실패"
#, c-format
msgid "Failed to define new bridge interface %1$s"
msgstr "새로운 브리지 연결장치 %1$s 정의하기에 실패했습니다"
msgstr "새로운 브리지 인터페이스 %1$s 정의 실패"
#, c-format
msgid "Failed to define new interface %1$s"
msgstr "새로운 연결장치 %1$s 정의하기에 실패했습니다"
msgstr "새로운 인터페이스 %1$s를 정의하는데 실패"
#, c-format
msgid "Failed to define node device from '%1$s'"
msgstr "'%1$s'에서 노드 장치를 정의하기에 실패했습니다"
msgstr "'%1$s'에서 노드 장치를 정의하지 못했습니다"
#, c-format
msgid "Failed to define pool %1$s"
msgstr "풀 %1$s를 정의하기에 실패했습니다"
msgstr "풀 %1$s를 정의하는 데 실패"
#, c-format
msgid "Failed to define pool from %1$s"
msgstr "%1$s에서 풀 정의하기 실패했습니다"
msgstr "%1$s에서 풀 정의하기 실패"
#, c-format
msgid "Failed to delete DiskDescriptor.xml of volume '%1$s'"

103
po/uk.po
View File

@ -16,7 +16,7 @@ msgstr ""
"Project-Id-Version: libvirt 6.0.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2024-03-22 09:54+0000\n"
"PO-Revision-Date: 2024-03-27 17:36+0000\n"
"PO-Revision-Date: 2024-02-28 13:55+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
"libvirt/libvirt/uk/>\n"
@ -489,7 +489,7 @@ msgstr " Сховище:"
#, c-format
msgid " [[--%1$s] <string>]..."
msgstr " [[--%1$s] <рядок>]..."
msgstr ""
#, c-format
msgid ""
@ -505,7 +505,7 @@ msgstr ""
#, c-format
msgid " {[--%1$s] <string>}..."
msgstr " {[--%1$s] <рядок>}..."
msgstr ""
#, c-format
msgid ""
@ -2978,7 +2978,7 @@ msgstr "Не вдалося створити каталог resctrl «%1$s»"
#, c-format
msgid "Cannot create save directory '%1$s'"
msgstr "Не вдалося зберегти каталог «%1$s»"
msgstr ""
#, c-format
msgid "Cannot create socket '%1$s'"
@ -4091,7 +4091,7 @@ msgid "Connections from inside daemon must be direct"
msgstr "З'єднання із внутрішньої фонової служби мають бути безпосередніми"
msgid "Console only works in PTY mode"
msgstr "Консоль працює лише у режимі PTY"
msgstr ""
msgid "Constant pages:"
msgstr "Незмінні сторінки:"
@ -6023,9 +6023,6 @@ msgid ""
"virtualization is enabled in the host BIOS, and host configuration is setup "
"to load the mshv modules."
msgstr ""
"Домен потребує пристрою MSHV, але він є недоступним. Перевірте, чи увімкнено "
"віртуалізацію у BIOS основної системи, і основну систему налаштовано на "
"завантаження модулів mshv."
msgid "Domain requires at least 1 vCPU"
msgstr "Для домену потрібне принаймні один віртуальний процесор"
@ -6930,7 +6927,7 @@ msgstr "Не вдалося спорожнити %1$s"
#, c-format
msgid "Failed to cleanup stale managed save dir '%1$s'"
msgstr "Не вдалося очистити статичний керований каталог збереження «%1$s»"
msgstr ""
#, c-format
msgid "Failed to clear security context for agent for %1$s"
@ -7049,7 +7046,7 @@ msgstr "Не вдалося створити контекст клієнта SAS
#, c-format
msgid "Failed to create SAVE dir %1$s"
msgstr "Не вдалося створити каталог SAVE %1$s"
msgstr ""
msgid "Failed to create XML"
msgstr "Не вдається створити XML"
@ -7248,7 +7245,7 @@ msgstr "Не вдалося створити том з %1$s"
#, c-format
msgid "Failed to create/open domain save xml file '%1$s'"
msgstr "Не вдалося створити або відкрити файл XML збереження домену «%1$s»"
msgstr ""
#, c-format
msgid "Failed to define domain from %1$s"
@ -8018,7 +8015,7 @@ msgstr "Не вдалося відкрити файл образу домену
#, c-format
msgid "Failed to open domain save file '%1$s'"
msgstr "Не вдалося відкрити файл збереження домену «%1$s»"
msgstr ""
#, c-format
msgid "Failed to open file '%1$s'"
@ -8368,7 +8365,7 @@ msgstr "Не вдалося вилучити образ керованого з
#, c-format
msgid "Failed to remove managed save path '%1$s'"
msgstr "Не вдалося вилучити керований шлях збереження «%1$s»"
msgstr ""
#, c-format
msgid "Failed to remove storage volume '%1$s'(%2$s)"
@ -8520,7 +8517,7 @@ msgid "Failed to save VM settings"
msgstr "Не вдалося зберегти параметри ВМ"
msgid "Failed to save domain"
msgstr "Не вдалося зберегти домен"
msgstr ""
#, c-format
msgid "Failed to save domain '%1$d' with libxenlight"
@ -8733,7 +8730,7 @@ msgid "Failed to shutdown domain '%1$s'"
msgstr "Помилка вимикання домену «%1$s»"
msgid "Failed to shutoff after domain save"
msgstr "Не вдалося завершити роботу після збереження домену"
msgstr ""
#, c-format
msgid "Failed to soft reset VM '%1$s'. Destroying VM"
@ -8962,7 +8959,7 @@ msgid "Failed to write '%1$s'"
msgstr "Не вдалося записати «%1$s»"
msgid "Failed to write file header"
msgstr "Не вдалося записати заголовок файла"
msgstr ""
msgid "Failed to write pixel data"
msgstr "Не вдалося записати піксельні дані"
@ -8983,7 +8980,7 @@ msgid "Failed to write vmx file '%1$s'"
msgstr "Не вдалося виконати запис файла VMX «%1$s»"
msgid "Failed to write xml definition"
msgstr "Не вдалося записати визначення XML"
msgstr ""
msgid "Failed to write xml description"
msgstr "Не вдалося записати опис у форматі XML"
@ -9314,17 +9311,16 @@ msgid "Get or set perf event"
msgstr "Отримати або встановити подію perf"
msgid "Get or set the current blkio parameters for a guest domain."
msgstr "Отримати або встановити поточні параметри blkio для гостьового домену."
msgstr ""
msgid "Get or set the current memory parameters for a guest domain."
msgstr ""
"Отримати або встановити поточні параметри пам'яті для гостьового домену."
msgid "Get or set the current numa parameters for a guest domain."
msgstr "Отримати або встановити поточні параметри NUMA для гостьового домену."
msgstr ""
msgid "Get or set the current perf events for a guest domain."
msgstr "Отримати або встановити поточні події perf для гостьового домену."
msgstr ""
msgid "Get or set the current snapshot"
msgstr "Отримання або встановлення поточного знімка"
@ -12322,8 +12318,6 @@ msgid ""
"NUMA mode, one of strict, preferred and interleave or a number from the "
"virDomainNumatuneMemMode enum"
msgstr ""
"Режим NUMA, одне зі значень, strict, preferred та interleave, або число з "
"переліку virDomainNumatuneMemMode"
#, c-format
msgid "NUMA node %1$d is not available"
@ -14260,7 +14254,7 @@ msgid "Relative backing during copy not supported yet"
msgstr "Підтримки відносного резервування під час копіювання ще не передбачено"
msgid "Reload domain's graphics display certificates"
msgstr "Перезавантажити сертифікати графічного дисплея домену"
msgstr ""
#, c-format
msgid "Remote command terminated with non-zero code: %1$d"
@ -14452,10 +14446,10 @@ msgid "Retrieve identity details about <client> from <server>"
msgstr "Отримати дані профілю клієнта <client> з сервера <server>"
msgid "Retrieve server's client-related configuration limits"
msgstr "Отримати з сервера пов'язані із клієнтом обмеження налаштувань"
msgstr ""
msgid "Retrieve threadpool attributes from a server."
msgstr "Отримати атрибути буфера потоків з сервера."
msgstr ""
msgid "Return pool info in bytes"
msgstr "Повернути дані щодо буфера у байтах"
@ -14944,7 +14938,7 @@ msgstr ""
"гостьової системи"
msgid "Serial only works in UNIX/PTY modes"
msgstr "Послідовний режим працює лише у режимах UNIX/PTY"
msgstr ""
#, c-format
msgid "Serial port index %1$d out of [0..3] range"
@ -19867,7 +19861,6 @@ msgstr "Несподівано отримано порт мережі без з'
msgid "Unix Socket backend is not supported by this version of ch."
msgstr ""
"Підтримки модуля обробки даних сокетів Unix у цій версії ch не передбачено."
msgid "Unix file descriptors not supported on this platform"
msgstr "На цій платформі не передбачено підтримки дескрипторів файлів UNIX"
@ -23527,10 +23520,10 @@ msgid "cannot revert snapshot of running domain"
msgstr "не можна відновлювати попередній стан запущеного домену"
msgid "cannot save domain with host devices"
msgstr "не вдалося зберегти домен із гостьовими пристроями"
msgstr ""
msgid "cannot save domain with network interfaces"
msgstr "не вдалося зберегти домен із мережевими інтерфейсами"
msgstr ""
#, c-format
msgid "cannot save file '%1$s'"
@ -24116,10 +24109,10 @@ msgid "command '%1$s' requires <%2$s> option"
msgstr "для команди «%1$s» потрібно вказати параметр <%2$s>"
msgid "command groups is NULL run vshInit before reloading"
msgstr "групи команд дорівнюють NULL; запустіть vshInit до перезавантаження"
msgstr ""
msgid "command groups must be non-NULL"
msgstr "групи команд не повинні дорівнювати NULL"
msgstr ""
#, c-format
msgid "command is already running as pid %1$lld"
@ -27678,7 +27671,7 @@ msgid "failed to read AppArmor template"
msgstr "не вдалося прочитати дані шаблону AppArmor"
msgid "failed to read CHSaveXMLHeader header"
msgstr "не вдалося прочитати заголовок CHSaveXMLHeader"
msgstr ""
msgid "failed to read XML"
msgstr "не вдалося прочитати XML"
@ -27812,21 +27805,19 @@ msgid "failed to resolve symlink %1$s: %2$s"
msgstr "не вдалося знайти джерело символічного посилання %1$s: %2$s"
msgid "failed to restore domain"
msgstr "не вдалося відновити домен"
msgstr ""
msgid "failed to restore domain from managed save"
msgstr "не вдалося відновити домен із керованого сховища збережених даних"
msgstr ""
msgid "failed to resume domain"
msgstr "помилка відновлення роботи домену"
msgid "failed to resume domain after restore"
msgstr "не вдалося відновити роботу домену після відновлення"
msgstr ""
msgid "failed to resume domain after restore from managed save"
msgstr ""
"не вдалося відновити роботу домену після відновлення з керованого сховища "
"збережених даних"
msgid "failed to retrieve XML"
msgstr "не вдалося отримати XML"
@ -27950,7 +27941,7 @@ msgid "failed to suspend domain"
msgstr "не вдалося призупинити роботу домену"
msgid "failed to suspend domain before saving"
msgstr "не вдалося призупинити роботу домену до збереження"
msgstr ""
msgid "failed to take screenshot"
msgstr "не вдалося створити знімок вікна"
@ -28668,7 +28659,7 @@ msgstr ""
"потрібен графічний пристрій для значення атрибуту 'display=on' у <hostdev>"
msgid "graphics display type"
msgstr "тип графічного дисплея"
msgstr ""
msgid ""
"graphics type 'egl-headless' is only supported with one of: 'vnc', 'spice' "
@ -29067,8 +29058,6 @@ msgid ""
"hypervisor provided conflicting CPU data: feature '%1$s' is both enabled and "
"disabled at the same time"
msgstr ""
"наданий гіпервізор конфліктує із даними процесора: можливість «%1$s» одразу "
"увімкнено і вимкнено"
msgid "i - turn off validation and try to redefine again"
msgstr "i - вимкнути перевірку і спробувати визначити все знову"
@ -31186,7 +31175,7 @@ msgstr ""
"агента)"
msgid "maplen must be non-negative"
msgstr "maplen має бути невід'ємним"
msgstr ""
msgid "mark inactive domains with managed save state"
msgstr "позначити неактивні домени позначкою стану керованого збереження"
@ -31224,7 +31213,7 @@ msgid "maxcells > REMOTE_NODE_MAX_CELLS"
msgstr "maxcells > REMOTE_NODE_MAX_CELLS"
msgid "maxcells must be non-negative"
msgstr "maxcells має бути невід'ємним"
msgstr ""
msgid "maxerrors too large"
msgstr "значення maxerrors є занадто великим"
@ -31233,7 +31222,7 @@ msgid "maxids > REMOTE_DOMAIN_LIST_MAX"
msgstr "maxids > REMOTE_DOMAIN_LIST_MAX"
msgid "maxids must be non-negative"
msgstr "maxids має бути невід'ємним"
msgstr ""
msgid "maximum"
msgstr "maximum"
@ -31284,7 +31273,7 @@ msgid "maxinfo > REMOTE_VCPUINFO_MAX"
msgstr "maxinfo > REMOTE_VCPUINFO_MAX"
msgid "maxinfo must be non-negative"
msgstr "maxinfo має бути невід'ємним"
msgstr ""
msgid "maxnames > REMOTE_DOMAIN_LIST_MAX"
msgstr "maxnames > REMOTE_DOMAIN_LIST_MAX"
@ -31314,13 +31303,13 @@ msgid "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
msgstr "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
msgid "maxnames must be non-negative"
msgstr "maxnames має бути невід'ємним"
msgstr ""
msgid "maxuuids > REMOTE_SECRET_LIST_MAX"
msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "maxuuids must be non-negative"
msgstr "maxuuids має бути невід'ємним"
msgstr ""
msgid "mdev attribute missing name or value"
msgstr "у атрибуті mdev пропущено назву або значення"
@ -32701,10 +32690,10 @@ msgid "msi option is only supported with a server"
msgstr "підтримку параметра msi передбачено лише з сервером"
msgid "mtp is not supported with this QEMU binary"
msgstr "підтримки mtp у цьому виконуваному файлі QEMU не передбачено"
msgstr ""
msgid "mtp only supports passthrough accessmode"
msgstr "у mtp передбачено підтримку лише режиму доступу і пропусканням"
msgstr ""
#, c-format
msgid ""
@ -32840,7 +32829,7 @@ msgid "ncpumaps > REMOTE_VCPUINFO_MAX"
msgstr "ncpumaps > REMOTE_VCPUINFO_MAX"
msgid "ncpumaps must be non-negative"
msgstr "ncpumaps має бути невід'ємним"
msgstr ""
#, c-format
msgid "ncpus count exceeds maximum: %1$u > %2$u"
@ -33868,7 +33857,7 @@ msgid "nparams in %1$s must be equal to %2$d"
msgstr "значення nparams у %1$s має дорівнювати %2$d"
msgid "nparams must be non-negative"
msgstr "nparams має бути невід'ємним"
msgstr ""
msgid "nparams too large"
msgstr "надто великий розмір nparams"
@ -34111,7 +34100,7 @@ msgid "only can resume paused domain"
msgstr "можна відновити роботу лише призупиненого домену"
msgid "only can save running/paused domain"
msgstr "збереження можливе лише для запущеного або призупиненого домену"
msgstr ""
msgid "only can shutdown running/paused domain"
msgstr "вимикати можна лише запущений або призупинений домен"
@ -34367,7 +34356,7 @@ msgstr ""
"вивести рядок XML щодо системної інформації гіпервізора, якщо він доступний"
msgid "output help for each command"
msgstr "вивести довідку для кожної команди"
msgstr ""
msgid "output the list of options which are missing completers"
msgstr "вивести список параметрів, де не вистачає завершувачів"
@ -36011,7 +36000,7 @@ msgid "save image is incomplete"
msgstr "збережений образ є неповним"
msgid "save image magic is incorrect"
msgstr "контрольна сума збереженого образу є помилковою"
msgstr ""
msgid "saved"
msgstr "збережено"
@ -38013,7 +38002,7 @@ msgstr "невідповідність типів у події (маємо 0x%1
#, c-format
msgid "type must be less than %1$d"
msgstr "type має бути меншим за %1$d"
msgstr ""
msgid "type of source (block|file|network)"
msgstr "тип джерела (block|file|network)"
@ -40432,7 +40421,7 @@ msgstr "У virVMXContext не встановлено функцію parseFileNam
#, c-format
msgid "virt type '%1$s' is not supported"
msgstr "підтримки типу віртуалізації «%1$s» не передбачено"
msgstr ""
#, c-format
msgid ""

View File

@ -3066,12 +3066,15 @@ virNodeDeviceGetPCIVPDDynamicCap(virNodeDevCapPCIDev *devCapPCIDev)
if (!(pciDev = virPCIDeviceNew(&devAddr)))
return -1;
/* VPD is optional in PCI(e) specs. If it is there, attempt to add it. */
if ((res = virPCIDeviceGetVPD(pciDev))) {
devCapPCIDev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VPD;
devCapPCIDev->vpd = g_steal_pointer(&res);
if (virPCIDeviceHasVPD(pciDev)) {
/* VPD is optional in PCI(e) specs. If it is there, attempt to add it. */
if ((res = virPCIDeviceGetVPD(pciDev))) {
devCapPCIDev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VPD;
devCapPCIDev->vpd = g_steal_pointer(&res);
} else {
virResetLastError();
}
}
return 0;
}

View File

@ -3107,6 +3107,7 @@ virPCIDeviceGetUnbindFromStub;
virPCIDeviceGetUsedBy;
virPCIDeviceGetVPD;
virPCIDeviceHasPCIExpressLink;
virPCIDeviceHasVPD;
virPCIDeviceIsAssignable;
virPCIDeviceIsPCIExpress;
virPCIDeviceListAdd;

View File

@ -3078,14 +3078,24 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
}
bool
virPCIDeviceHasVPD(virPCIDevice *dev)
{
g_autofree char *vpdPath = virPCIFile(dev->name, "vpd");
bool ret = virFileIsRegular(vpdPath);
VIR_DEBUG("path='%s', exists='%d'", vpdPath, ret);
return ret;
}
/**
* virPCIDeviceGetVPD:
* @dev: a PCI device to get a PCI VPD for.
*
* Obtain a PCI device's Vital Product Data (VPD). VPD is optional in
* both PCI Local Bus and PCIe specifications so there is no guarantee it
* will be there for a particular device. The VPD data is returned in @vpd if
* it's available or otherwise NULL is set.
* will be there for a particular device.
*
* Returns: a pointer to virPCIVPDResource which needs to be freed by the caller
* or NULL if getting it failed for some reason (e.g. invalid format, I/O error).
@ -3096,12 +3106,16 @@ virPCIDeviceGetVPD(virPCIDevice *dev)
g_autofree char *vpdPath = virPCIFile(dev->name, "vpd");
VIR_AUTOCLOSE fd = -1;
fd = open(vpdPath, O_RDONLY);
VIR_DEBUG("dev='%s' path='%s' fd='%d'", virPCIDeviceGetName(dev), vpdPath, fd);
if (fd < 0)
if (!virPCIDeviceHasVPD(dev)) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Device %1$s does not have a VPD"),
virPCIDeviceGetName(dev));
return NULL;
}
if ((fd = open(vpdPath, O_RDONLY)) < 0) {
virReportSystemError(errno, _("Failed to open a VPD file '%1$s'"), vpdPath);
return NULL;
}
return virPCIVPDParse(fd);
}
@ -3180,10 +3194,17 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path G_GNUC_UNUSED,
return -1;
}
bool
virPCIDeviceHasVPD(virPCIDevice *dev G_GNUC_UNUSED)
{
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
return NULL;
}
virPCIVPDResource *
virPCIDeviceGetVPD(virPCIDevice *dev G_GNUC_UNUSED)
{
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
return NULL;
}
#endif /* __linux__ */

View File

@ -270,6 +270,7 @@ int virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
char **pfname,
int *vf_index);
bool virPCIDeviceHasVPD(virPCIDevice *dev);
virPCIVPDResource * virPCIDeviceGetVPD(virPCIDevice *dev);
int virPCIDeviceUnbind(virPCIDevice *dev);

View File

@ -361,9 +361,9 @@ virPCIVPDResourceUpdateKeyword(virPCIVPDResource *res,
* @offset: The offset at which bytes need to be read.
* @csum: A pointer to a byte containing the current checksum value. Mutated by this function.
*
* Returns 0 if exactly @count bytes were read from @vpdFileFd. The csum value
* is also modified as bytes are read. If an error occurs while reading data
* from the VPD file descriptor -1 is returned to the caller.
* Returns 0 if exactly @count bytes were read from @vpdFileFd. The csum value is
* also modified as bytes are read. If an error occurs while reading data from the VPD file
* descriptor, it is reported and -1 is returned to the caller.
*/
static int
virPCIVPDReadVPDBytes(int vpdFileFd,
@ -375,7 +375,8 @@ virPCIVPDReadVPDBytes(int vpdFileFd,
ssize_t numRead = pread(vpdFileFd, buf, count, offset);
if (numRead != count) {
VIR_DEBUG("read='%zd' expected='%zu'", numRead, count);
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data"));
return -1;
}
@ -446,7 +447,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RDWR:
if (readOnly) {
VIR_DEBUG("unexpected RW keyword in read-only section");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: unexpected RW keyword in read-only section"));
return -1;
}
@ -455,7 +457,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RESVD:
if (!readOnly) {
VIR_DEBUG("unexpected RV keyword in read-write section");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: unexpected RV keyword in read-write section"));
return -1;
}
/* Only need one byte to be read and accounted towards
@ -474,7 +477,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
if (resPos + resDataLen < fieldPos + fieldDataLen) {
/* In this case the field cannot simply be skipped since the position of the
* next field is determined based on the length of a previous field. */
VIR_DEBUG("data field length invalid");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: data field length invalid"));
return -1;
}
@ -513,7 +517,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RESVD:
if (*csum) {
/* All bytes up to and including the checksum byte should add up to 0. */
VIR_DEBUG("invalid checksum");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: invalid checksum"));
return -1;
}
hasChecksum = true;
@ -541,12 +546,14 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
* they were not the last fields in the section. */
if ((fieldPos < resPos + resDataLen)) {
/* unparsed data still present */
VIR_DEBUG("parsing ended prematurely");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: parsing ended prematurely"));
return -1;
}
if (readOnly && !hasChecksum) {
VIR_DEBUG("missing mandatory checksum");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: missing mandatory checksum"));
return -1;
}
@ -561,7 +568,7 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
* @resDataLen: A length of the data portion of a resource.
* @csum: A pointer to a 1-byte checksum.
*
* Returns: 0 on success -1 on failure. No libvirt errors are reported.
* Returns: 0 on success -1 and an error on failure
*/
static int
virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
@ -577,7 +584,8 @@ virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
resValue = g_strdup(g_strstrip(buf));
if (!virPCIVPDResourceIsValidTextValue(resValue)) {
VIR_DEBUG("PCI VPD string contains invalid characters");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to parse PCI VPD string value with invalid characters"));
return -1;
}
res->name = g_steal_pointer(&resValue);
@ -591,7 +599,7 @@ virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
* Parse a PCI device's Vital Product Data (VPD) contained in a file descriptor.
*
* Returns: a pointer to a GList of VPDResource types which needs to be freed by the caller or
* NULL if getting it failed for some reason. No libvirt errors are reported.
* NULL if getting it failed for some reason.
*/
virPCIVPDResource *
virPCIVPDParse(int vpdFileFd)
@ -621,8 +629,7 @@ virPCIVPDParse(int vpdFileFd)
if (tag & PCI_VPD_LARGE_RESOURCE_FLAG) {
if (resPos > PCI_VPD_ADDR_MASK + 1 - 3) {
/* Bail if the large resource starts at the position where the end tag should be. */
VIR_DEBUG("expected end tag, got more data");
return NULL;
goto malformed;
}
/* Read the two length bytes of the large resource record. */
@ -645,7 +652,8 @@ virPCIVPDParse(int vpdFileFd)
if (tag == PCI_VPD_RESOURCE_END_TAG) {
/* Stop VPD traversal since the end tag was encountered. */
if (!hasReadOnly) {
VIR_DEBUG("missing read-only section");
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: missing read-only section"));
return NULL;
}
@ -654,8 +662,7 @@ virPCIVPDParse(int vpdFileFd)
if (resDataLen > PCI_VPD_ADDR_MASK + 1 - resPos) {
/* Bail if the resource is too long to fit into the VPD address space. */
VIR_DEBUG("VPD resource too long");
return NULL;
goto malformed;
}
switch (tag) {
@ -691,7 +698,9 @@ virPCIVPDParse(int vpdFileFd)
resPos += resDataLen;
}
VIR_DEBUG("unexpected end of VPD data, expected end tag");
malformed:
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("failed to read the PCI VPD data: malformed data"));
return NULL;
}
@ -700,7 +709,8 @@ virPCIVPDParse(int vpdFileFd)
virPCIVPDResource *
virPCIVPDParse(int vpdFileFd G_GNUC_UNUSED)
{
VIR_DEBUG("not implemented");
virReportError(VIR_ERR_NO_SUPPORT, "%s",
_("PCI VPD reporting not available on this platform"));
return NULL;
}