Compare commits

...

8 Commits

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

See merge request libvirt/libvirt!258
2024-03-28 21:27:22 +00:00
Ján Tomko
32d836bc6f NEWS: Update
Update NEWS with new news.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2024-03-28 12:49:29 +01:00
Peter Krempa
61bd4d9b01 NEWS: Mention fix for PCI VPD error reporting
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2024-03-28 10:11:55 +01:00
Peter Krempa
0e566614ff pci: Remove error reporting from PCI VPD parsing
The PCI VPD (Vital Product Data) may be missing or the kernel can report
presence but not actually have the data. Also the data is specified by
the device vendor and thus may be invalid in some cases.

To avoid log spamming, since the only usage in the node device driver is
ignoring errors, remove all error reporting.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/607
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2024-03-28 10:11:55 +01:00
Peter Krempa
34f7ca668f virpcivpd: Revert error reporting from PCI VPD parser
The VPD parsing is fragile and depends on hardware vendor's adherance to
standards. Since libvirt only ever uses this data to report it in the
nodedev XML which ignores any errors there's no much point in having
error reporting which I've added recently.

Turn the errors into VIR_DEBUG statements in preparation for upcoming
patch which completely removes the expectation to report errors.

This effectively reverts commits dfc85658bd and f85a382a0e.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2024-03-28 10:11:55 +01:00
Yuri Chornoivan
5afaf127c0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (10438 of 10438 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/uk/

Co-authored-by: Yuri Chornoivan <yurchor@ukr.net>
Signed-off-by: Yuri Chornoivan <yurchor@ukr.net>
2024-03-27 18:36:11 +01:00
김인수
80de00d92a Translated using Weblate (Korean)
Currently translated at 99.5% (10394 of 10438 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ko/

Co-authored-by: 김인수 <simmon@nplob.com>
Signed-off-by: 김인수 <simmon@nplob.com>
2024-03-27 18:36:10 +01:00
Alexandre Derumier
31f446cf37 cpu_map : sync_qemu_models : fix versionned models
Currently, a new versionned model is only generated when an alias exist
in the version.

This is wrong, because not all versions have an alias, so some models
are not generated, and last version is override the main model.
(with newer flags not present in the original model)

This patch create an "<modelname>-v<version>.xml" for each versionned model,
and keep the extra "<alias>.xml"
2023-05-20 08:43:15 +02:00
10 changed files with 174 additions and 161 deletions

View File

@ -36,6 +36,13 @@ v10.2.0 (unreleased)
use the upcoming QEMU 9.0.0 release together with the development version use the upcoming QEMU 9.0.0 release together with the development version
of edk2. 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** * **Improvements**
* **Bug fixes** * **Bug fixes**
@ -52,6 +59,31 @@ v10.2.0 (unreleased)
releases to 10.2.0 works as well, but the other direction remains broken releases to 10.2.0 works as well, but the other direction remains broken
unless the fix is backported. 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) v10.1.0 (2024-03-01)
==================== ====================

View File

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

View File

@ -18,7 +18,7 @@ msgstr ""
"Project-Id-Version: libvirt 6.0.0\n" "Project-Id-Version: libvirt 6.0.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n" "Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2024-03-22 09:54+0000\n" "POT-Creation-Date: 2024-03-22 09:54+0000\n"
"PO-Revision-Date: 2024-02-29 14:36+0000\n" "PO-Revision-Date: 2024-03-27 17:36+0000\n"
"Last-Translator: 김인수 <simmon@nplob.com>\n" "Last-Translator: 김인수 <simmon@nplob.com>\n"
"Language-Team: Korean <https://translate.fedoraproject.org/projects/libvirt/" "Language-Team: Korean <https://translate.fedoraproject.org/projects/libvirt/"
"libvirt/ko/>\n" "libvirt/ko/>\n"
@ -482,7 +482,7 @@ msgstr " 저장소:"
#, c-format #, c-format
msgid " [[--%1$s] <string>]..." msgid " [[--%1$s] <string>]..."
msgstr "" msgstr " [[--%1$s] <문자열>]..."
#, c-format #, c-format
msgid "" msgid ""
@ -498,7 +498,7 @@ msgstr ""
#, c-format #, c-format
msgid " {[--%1$s] <string>}..." msgid " {[--%1$s] <string>}..."
msgstr "" msgstr " {[--%1$s] <문자열>}..."
#, c-format #, c-format
msgid "" msgid ""
@ -2850,7 +2850,7 @@ msgstr "resctrl 디렉토리 '%1$s'를 생성 할 수 없음"
#, c-format #, c-format
msgid "Cannot create save directory '%1$s'" msgid "Cannot create save directory '%1$s'"
msgstr "" msgstr "저장 디렉토리 '%1$s'를 생성 할 수 없습니다"
#, c-format #, c-format
msgid "Cannot create socket '%1$s'" msgid "Cannot create socket '%1$s'"
@ -3888,7 +3888,7 @@ msgid "Connections from inside daemon must be direct"
msgstr "내부 데몬에서 직접 연결해야 합니다" msgstr "내부 데몬에서 직접 연결해야 합니다"
msgid "Console only works in PTY mode" msgid "Console only works in PTY mode"
msgstr "" msgstr "PTY 방식에서 콘솔만 동작합니다"
msgid "Constant pages:" msgid "Constant pages:"
msgstr "고정 페이지:" msgstr "고정 페이지:"
@ -6638,19 +6638,19 @@ msgstr "%1$s 삭제 실패"
#, c-format #, c-format
msgid "Failed to cleanup stale managed save dir '%1$s'" msgid "Failed to cleanup stale managed save dir '%1$s'"
msgstr "" msgstr "오래된 관리 저장 디렉토리 '%1$s' 정리에 실패했습니다"
#, c-format #, c-format
msgid "Failed to clear security context for agent for %1$s" msgid "Failed to clear security context for agent for %1$s"
msgstr "%1$s를 위한 에이젠트의 보안 문맥을 삭제하는데 실패하였습니다" msgstr "%1$s용 관리를 위한 보안 문맥을 정리하는 데 실패하였습니다"
#, c-format #, c-format
msgid "Failed to clear security context for monitor for %1$s" msgid "Failed to clear security context for monitor for %1$s"
msgstr "%1$s의 모니터에 대한 보안 문맥을 삭제하는데 실패" msgstr "%1$s용 모니터를 위한 보안 문맥 정리에 실패했습니다"
#, c-format #, c-format
msgid "Failed to clone vol from %1$s" msgid "Failed to clone vol from %1$s"
msgstr "%1$s에서 볼륨 복제하기 실패" msgstr "%1$s에서 볼륨 복제에 실패했습니다"
#, c-format #, c-format
msgid "Failed to close bind target %1$s" msgid "Failed to close bind target %1$s"
@ -6720,13 +6720,13 @@ msgstr "연결장치 개요 %1$d를 이름으로 변환하는데 실패"
#, c-format #, c-format
msgid "Failed to convert loadparm '%1$s' to upper case" 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" msgid "Failed to convert the command string to argv-lists"
msgstr "명령 문자열을 argv-lists로 변환하지 못했습니다" msgstr "명령 문자열을 argv-lists로 변환하는 데 실패했습니다"
msgid "Failed to copy XML node" msgid "Failed to copy XML node"
msgstr "XML 노드를 복사하지 못했습니다" msgstr "XML 노드 복사에 실패했습니다"
#, c-format #, c-format
msgid "Failed to core dump domain '%1$s' to %2$s" msgid "Failed to core dump domain '%1$s' to %2$s"
@ -6755,10 +6755,10 @@ msgstr "SASL 클라이언트 문맥을 생성하는 데 실패: %1$d (%2$s)"
#, c-format #, c-format
msgid "Failed to create SAVE dir %1$s" msgid "Failed to create SAVE dir %1$s"
msgstr "" msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
msgid "Failed to create XML" msgid "Failed to create XML"
msgstr "XML 생성하기 실패" msgstr "XML 생성에 실패했습니다"
msgid "Failed to create XML config object" msgid "Failed to create XML config object"
msgstr "XML 구성 개체를 생성하지 못했습니다" msgstr "XML 구성 개체를 생성하지 못했습니다"
@ -6795,42 +6795,42 @@ msgid "Failed to create directory for device %1$s"
msgstr "장치 %1$s의 디렉토리를 생성하는데 실패했습니다" msgstr "장치 %1$s의 디렉토리를 생성하는데 실패했습니다"
msgid "Failed to create disk pool geometry" msgid "Failed to create disk pool geometry"
msgstr "디스크 풀 지오메트리 생성 실패" msgstr "디스크 풀 지오메트리 생성 실패했습니다"
#, c-format #, c-format
msgid "Failed to create domain from %1$s" msgid "Failed to create domain from %1$s"
msgstr "%1$s에서 도메인 생성하기 실패" msgstr "%1$s에서 도메인 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create domain save file '%1$s'" msgid "Failed to create domain save file '%1$s'"
msgstr "도메인 저장 파일 '%1$s'를 만드는 데 실패" msgstr "도메인 저장 파일 '%1$s' 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create dump dir %1$s" msgid "Failed to create dump dir %1$s"
msgstr "덤프 디렉토리 %1$s을(를) 생성하지 못했습니다" msgstr "덤프 디렉토리 %1$s 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create file '%1$s'" msgid "Failed to create file '%1$s'"
msgstr "파일 '%1$s' 생성하기 실패" msgstr "파일 '%1$s' 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create file '%1$s': couldn't determine fs type" msgid "Failed to create file '%1$s': couldn't determine fs type"
msgstr "파일 '%1$s' 만들기 실패: fs 유형 확인 실패" msgstr "파일 '%1$s' 생성에 실패: fs 유형 확인 할 수 없습니다"
#, c-format #, c-format
msgid "Failed to create filesystem probe for device %1$s" 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" msgid "Failed to create interface node under bridge node in xml document"
msgstr "xml 문서에서 브리지 노드 아래에 인터페이스 노드를 생성하는데 실패" msgstr "xml 문서에서 브리지 노드 하에서 연결장치 노드를 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create iscsi context for %1$s" msgid "Failed to create iscsi context for %1$s"
msgstr "%1$s를 위한 iscsi 문맥을 생성하는데 실패" msgstr "%1$s를 위한 iscsi 문맥 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create lib dir %1$s" msgid "Failed to create lib dir %1$s"
msgstr "라이브러리 디렉토리 %1$s을(를) 작성하지 못했습니다" msgstr "라이브러리 디렉토리 %1$s 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create memory backing dir %1$s" msgid "Failed to create memory backing dir %1$s"
@ -6861,47 +6861,47 @@ msgstr "passt 상태 디렉토리 %1$s 생성에 실패함"
#, c-format #, c-format
msgid "Failed to create pool %1$s" msgid "Failed to create pool %1$s"
msgstr "풀 %1$s를 생성하는 데 실패" msgstr "풀 %1$s를 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create pool from %1$s" msgid "Failed to create pool from %1$s"
msgstr "%1$s에서 풀 생성하기 실패" msgstr "%1$s에서 풀 생성에 실패했습니다"
msgid "Failed to create reboot thread, killing domain" msgid "Failed to create reboot thread, killing domain"
msgstr "재부팅 스레드 생성 실패, 도메인 종료" msgstr "재부팅 스레드 생성 실패, 도메인 종료"
#, c-format #, c-format
msgid "Failed to create save dir %1$s" msgid "Failed to create save dir %1$s"
msgstr "저장 디렉토리 %1$s를 작성하지 못했습니다" msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create slirp state dir %1$s" msgid "Failed to create slirp state dir %1$s"
msgstr "slirp 상태 디렉토리 %1$s을 생성하는데 실패했습니다" msgstr "slirp 상태 디렉토리 %1$s 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create snapshot dir %1$s" msgid "Failed to create snapshot dir %1$s"
msgstr "순간찍기 디렉토리 %1$s 생성에 실패" msgstr "순간찍기 디렉토리 %1$s 생성에 실패했습니다"
msgid "Failed to create socket" msgid "Failed to create socket"
msgstr "소켓 생성하기 실패" msgstr "소켓 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create state dir %1$s" msgid "Failed to create state dir %1$s"
msgstr "상태 디렉토리 %1$s를 작성하지 못했습니다" msgstr "상태 디렉토리 %1$s 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create state dir '%1$s'" msgid "Failed to create state dir '%1$s'"
msgstr "상태 디렉토리 '%1$s'를 작성하지 못했습니다" msgstr "상태 디렉토리 '%1$s' 생성에 실패했습니다"
#, c-format #, c-format
msgid "Failed to create symlink '%1$s' to '%2$s'" 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" msgid "Failed to create thread"
msgstr "스레드 생성 실패" msgstr "쓰레드 생성에 실패했습니다"
msgid "Failed to create thread for receiving migration data" msgid "Failed to create thread for receiving migration data"
msgstr "이전 자료를 수신하기 위하여 쓰레드 생성하는데 실패했습니다" msgstr "이전 자료를 수신하기 위하여 쓰레드 생성 실패했습니다"
msgid "Failed to create thread to handle daemon restart" msgid "Failed to create thread to handle daemon restart"
msgstr "데몬 재시작을 처리할 스레드를 생성하지 못했습니다" msgstr "데몬 재시작을 처리할 스레드를 생성하지 못했습니다"
@ -6948,43 +6948,43 @@ msgstr "%1$s에서 볼륨 생성하기 실패"
#, c-format #, c-format
msgid "Failed to create/open domain save xml file '%1$s'" msgid "Failed to create/open domain save xml file '%1$s'"
msgstr "" msgstr "도메인 저장 xml 파일 '%1$s' 생성/열기에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define domain from %1$s" msgid "Failed to define domain from %1$s"
msgstr "%1$s에서 도메인 정의하기 실패" msgstr "%1$s에서 도메인 정의하기 실패했습니다"
#, c-format #, c-format
msgid "Failed to define interface from %1$s" msgid "Failed to define interface from %1$s"
msgstr "%1$s에서 인터페이스 정의하기 실패" msgstr "%1$s에서 인터페이스 정의하기 실패했습니다"
#, c-format #, c-format
msgid "Failed to define network filter from %1$s" msgid "Failed to define network filter from %1$s"
msgstr "%1$s에서 네트워크 필터 정의에 실패" msgstr "%1$s에서 네트워크 필터 정의에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define network from %1$s" msgid "Failed to define network from %1$s"
msgstr "%1$s에서 네트워크 정의하기 실패" msgstr "%1$s에서 네트워크 정의하기 실패했습니다"
#, c-format #, c-format
msgid "Failed to define new bridge interface %1$s" msgid "Failed to define new bridge interface %1$s"
msgstr "새로운 브리지 인터페이스 %1$s 정의 실패" msgstr "새로운 브리지 연결장치 %1$s 정의하기에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define new interface %1$s" msgid "Failed to define new interface %1$s"
msgstr "새로운 인터페이스 %1$s를 정의하는데 실패" msgstr "새로운 연결장치 %1$s 정의하기에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define node device from '%1$s'" msgid "Failed to define node device from '%1$s'"
msgstr "'%1$s'에서 노드 장치를 정의하지 못했습니다" msgstr "'%1$s'에서 노드 장치를 정의하기에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define pool %1$s" msgid "Failed to define pool %1$s"
msgstr "풀 %1$s를 정의하는 데 실패" msgstr "풀 %1$s를 정의하기에 실패했습니다"
#, c-format #, c-format
msgid "Failed to define pool from %1$s" msgid "Failed to define pool from %1$s"
msgstr "%1$s에서 풀 정의하기 실패" msgstr "%1$s에서 풀 정의하기 실패했습니다"
#, c-format #, c-format
msgid "Failed to delete DiskDescriptor.xml of volume '%1$s'" 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" "Project-Id-Version: libvirt 6.0.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n" "Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2024-03-22 09:54+0000\n" "POT-Creation-Date: 2024-03-22 09:54+0000\n"
"PO-Revision-Date: 2024-02-28 13:55+0000\n" "PO-Revision-Date: 2024-03-27 17:36+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/" "Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
"libvirt/libvirt/uk/>\n" "libvirt/libvirt/uk/>\n"
@ -489,7 +489,7 @@ msgstr " Сховище:"
#, c-format #, c-format
msgid " [[--%1$s] <string>]..." msgid " [[--%1$s] <string>]..."
msgstr "" msgstr " [[--%1$s] <рядок>]..."
#, c-format #, c-format
msgid "" msgid ""
@ -505,7 +505,7 @@ msgstr ""
#, c-format #, c-format
msgid " {[--%1$s] <string>}..." msgid " {[--%1$s] <string>}..."
msgstr "" msgstr " {[--%1$s] <рядок>}..."
#, c-format #, c-format
msgid "" msgid ""
@ -2978,7 +2978,7 @@ msgstr "Не вдалося створити каталог resctrl «%1$s»"
#, c-format #, c-format
msgid "Cannot create save directory '%1$s'" msgid "Cannot create save directory '%1$s'"
msgstr "" msgstr "Не вдалося зберегти каталог «%1$s»"
#, c-format #, c-format
msgid "Cannot create socket '%1$s'" msgid "Cannot create socket '%1$s'"
@ -4091,7 +4091,7 @@ msgid "Connections from inside daemon must be direct"
msgstr "З'єднання із внутрішньої фонової служби мають бути безпосередніми" msgstr "З'єднання із внутрішньої фонової служби мають бути безпосередніми"
msgid "Console only works in PTY mode" msgid "Console only works in PTY mode"
msgstr "" msgstr "Консоль працює лише у режимі PTY"
msgid "Constant pages:" msgid "Constant pages:"
msgstr "Незмінні сторінки:" msgstr "Незмінні сторінки:"
@ -6023,6 +6023,9 @@ msgid ""
"virtualization is enabled in the host BIOS, and host configuration is setup " "virtualization is enabled in the host BIOS, and host configuration is setup "
"to load the mshv modules." "to load the mshv modules."
msgstr "" msgstr ""
"Домен потребує пристрою MSHV, але він є недоступним. Перевірте, чи увімкнено "
"віртуалізацію у BIOS основної системи, і основну систему налаштовано на "
"завантаження модулів mshv."
msgid "Domain requires at least 1 vCPU" msgid "Domain requires at least 1 vCPU"
msgstr "Для домену потрібне принаймні один віртуальний процесор" msgstr "Для домену потрібне принаймні один віртуальний процесор"
@ -6927,7 +6930,7 @@ msgstr "Не вдалося спорожнити %1$s"
#, c-format #, c-format
msgid "Failed to cleanup stale managed save dir '%1$s'" msgid "Failed to cleanup stale managed save dir '%1$s'"
msgstr "" msgstr "Не вдалося очистити статичний керований каталог збереження «%1$s»"
#, c-format #, c-format
msgid "Failed to clear security context for agent for %1$s" msgid "Failed to clear security context for agent for %1$s"
@ -7046,7 +7049,7 @@ msgstr "Не вдалося створити контекст клієнта SAS
#, c-format #, c-format
msgid "Failed to create SAVE dir %1$s" msgid "Failed to create SAVE dir %1$s"
msgstr "" msgstr "Не вдалося створити каталог SAVE %1$s"
msgid "Failed to create XML" msgid "Failed to create XML"
msgstr "Не вдається створити XML" msgstr "Не вдається створити XML"
@ -7245,7 +7248,7 @@ msgstr "Не вдалося створити том з %1$s"
#, c-format #, c-format
msgid "Failed to create/open domain save xml file '%1$s'" msgid "Failed to create/open domain save xml file '%1$s'"
msgstr "" msgstr "Не вдалося створити або відкрити файл XML збереження домену «%1$s»"
#, c-format #, c-format
msgid "Failed to define domain from %1$s" msgid "Failed to define domain from %1$s"
@ -8015,7 +8018,7 @@ msgstr "Не вдалося відкрити файл образу домену
#, c-format #, c-format
msgid "Failed to open domain save file '%1$s'" msgid "Failed to open domain save file '%1$s'"
msgstr "" msgstr "Не вдалося відкрити файл збереження домену «%1$s»"
#, c-format #, c-format
msgid "Failed to open file '%1$s'" msgid "Failed to open file '%1$s'"
@ -8365,7 +8368,7 @@ msgstr "Не вдалося вилучити образ керованого з
#, c-format #, c-format
msgid "Failed to remove managed save path '%1$s'" msgid "Failed to remove managed save path '%1$s'"
msgstr "" msgstr "Не вдалося вилучити керований шлях збереження «%1$s»"
#, c-format #, c-format
msgid "Failed to remove storage volume '%1$s'(%2$s)" msgid "Failed to remove storage volume '%1$s'(%2$s)"
@ -8517,7 +8520,7 @@ msgid "Failed to save VM settings"
msgstr "Не вдалося зберегти параметри ВМ" msgstr "Не вдалося зберегти параметри ВМ"
msgid "Failed to save domain" msgid "Failed to save domain"
msgstr "" msgstr "Не вдалося зберегти домен"
#, c-format #, c-format
msgid "Failed to save domain '%1$d' with libxenlight" msgid "Failed to save domain '%1$d' with libxenlight"
@ -8730,7 +8733,7 @@ msgid "Failed to shutdown domain '%1$s'"
msgstr "Помилка вимикання домену «%1$s»" msgstr "Помилка вимикання домену «%1$s»"
msgid "Failed to shutoff after domain save" msgid "Failed to shutoff after domain save"
msgstr "" msgstr "Не вдалося завершити роботу після збереження домену"
#, c-format #, c-format
msgid "Failed to soft reset VM '%1$s'. Destroying VM" msgid "Failed to soft reset VM '%1$s'. Destroying VM"
@ -8959,7 +8962,7 @@ msgid "Failed to write '%1$s'"
msgstr "Не вдалося записати «%1$s»" msgstr "Не вдалося записати «%1$s»"
msgid "Failed to write file header" msgid "Failed to write file header"
msgstr "" msgstr "Не вдалося записати заголовок файла"
msgid "Failed to write pixel data" msgid "Failed to write pixel data"
msgstr "Не вдалося записати піксельні дані" msgstr "Не вдалося записати піксельні дані"
@ -8980,7 +8983,7 @@ msgid "Failed to write vmx file '%1$s'"
msgstr "Не вдалося виконати запис файла VMX «%1$s»" msgstr "Не вдалося виконати запис файла VMX «%1$s»"
msgid "Failed to write xml definition" msgid "Failed to write xml definition"
msgstr "" msgstr "Не вдалося записати визначення XML"
msgid "Failed to write xml description" msgid "Failed to write xml description"
msgstr "Не вдалося записати опис у форматі XML" msgstr "Не вдалося записати опис у форматі XML"
@ -9311,16 +9314,17 @@ msgid "Get or set perf event"
msgstr "Отримати або встановити подію perf" msgstr "Отримати або встановити подію perf"
msgid "Get or set the current blkio parameters for a guest domain." msgid "Get or set the current blkio parameters for a guest domain."
msgstr "" msgstr "Отримати або встановити поточні параметри blkio для гостьового домену."
msgid "Get or set the current memory parameters for a guest domain." msgid "Get or set the current memory parameters for a guest domain."
msgstr "" msgstr ""
"Отримати або встановити поточні параметри пам'яті для гостьового домену."
msgid "Get or set the current numa parameters for a guest domain." msgid "Get or set the current numa parameters for a guest domain."
msgstr "" msgstr "Отримати або встановити поточні параметри NUMA для гостьового домену."
msgid "Get or set the current perf events for a guest domain." msgid "Get or set the current perf events for a guest domain."
msgstr "" msgstr "Отримати або встановити поточні події perf для гостьового домену."
msgid "Get or set the current snapshot" msgid "Get or set the current snapshot"
msgstr "Отримання або встановлення поточного знімка" msgstr "Отримання або встановлення поточного знімка"
@ -12318,6 +12322,8 @@ msgid ""
"NUMA mode, one of strict, preferred and interleave or a number from the " "NUMA mode, one of strict, preferred and interleave or a number from the "
"virDomainNumatuneMemMode enum" "virDomainNumatuneMemMode enum"
msgstr "" msgstr ""
"Режим NUMA, одне зі значень, strict, preferred та interleave, або число з "
"переліку virDomainNumatuneMemMode"
#, c-format #, c-format
msgid "NUMA node %1$d is not available" msgid "NUMA node %1$d is not available"
@ -14254,7 +14260,7 @@ msgid "Relative backing during copy not supported yet"
msgstr "Підтримки відносного резервування під час копіювання ще не передбачено" msgstr "Підтримки відносного резервування під час копіювання ще не передбачено"
msgid "Reload domain's graphics display certificates" msgid "Reload domain's graphics display certificates"
msgstr "" msgstr "Перезавантажити сертифікати графічного дисплея домену"
#, c-format #, c-format
msgid "Remote command terminated with non-zero code: %1$d" msgid "Remote command terminated with non-zero code: %1$d"
@ -14446,10 +14452,10 @@ msgid "Retrieve identity details about <client> from <server>"
msgstr "Отримати дані профілю клієнта <client> з сервера <server>" msgstr "Отримати дані профілю клієнта <client> з сервера <server>"
msgid "Retrieve server's client-related configuration limits" msgid "Retrieve server's client-related configuration limits"
msgstr "" msgstr "Отримати з сервера пов'язані із клієнтом обмеження налаштувань"
msgid "Retrieve threadpool attributes from a server." msgid "Retrieve threadpool attributes from a server."
msgstr "" msgstr "Отримати атрибути буфера потоків з сервера."
msgid "Return pool info in bytes" msgid "Return pool info in bytes"
msgstr "Повернути дані щодо буфера у байтах" msgstr "Повернути дані щодо буфера у байтах"
@ -14938,7 +14944,7 @@ msgstr ""
"гостьової системи" "гостьової системи"
msgid "Serial only works in UNIX/PTY modes" msgid "Serial only works in UNIX/PTY modes"
msgstr "" msgstr "Послідовний режим працює лише у режимах UNIX/PTY"
#, c-format #, c-format
msgid "Serial port index %1$d out of [0..3] range" msgid "Serial port index %1$d out of [0..3] range"
@ -19861,6 +19867,7 @@ msgstr "Несподівано отримано порт мережі без з'
msgid "Unix Socket backend is not supported by this version of ch." msgid "Unix Socket backend is not supported by this version of ch."
msgstr "" msgstr ""
"Підтримки модуля обробки даних сокетів Unix у цій версії ch не передбачено."
msgid "Unix file descriptors not supported on this platform" msgid "Unix file descriptors not supported on this platform"
msgstr "На цій платформі не передбачено підтримки дескрипторів файлів UNIX" msgstr "На цій платформі не передбачено підтримки дескрипторів файлів UNIX"
@ -23520,10 +23527,10 @@ msgid "cannot revert snapshot of running domain"
msgstr "не можна відновлювати попередній стан запущеного домену" msgstr "не можна відновлювати попередній стан запущеного домену"
msgid "cannot save domain with host devices" msgid "cannot save domain with host devices"
msgstr "" msgstr "не вдалося зберегти домен із гостьовими пристроями"
msgid "cannot save domain with network interfaces" msgid "cannot save domain with network interfaces"
msgstr "" msgstr "не вдалося зберегти домен із мережевими інтерфейсами"
#, c-format #, c-format
msgid "cannot save file '%1$s'" msgid "cannot save file '%1$s'"
@ -24109,10 +24116,10 @@ msgid "command '%1$s' requires <%2$s> option"
msgstr "для команди «%1$s» потрібно вказати параметр <%2$s>" msgstr "для команди «%1$s» потрібно вказати параметр <%2$s>"
msgid "command groups is NULL run vshInit before reloading" msgid "command groups is NULL run vshInit before reloading"
msgstr "" msgstr "групи команд дорівнюють NULL; запустіть vshInit до перезавантаження"
msgid "command groups must be non-NULL" msgid "command groups must be non-NULL"
msgstr "" msgstr "групи команд не повинні дорівнювати NULL"
#, c-format #, c-format
msgid "command is already running as pid %1$lld" msgid "command is already running as pid %1$lld"
@ -27671,7 +27678,7 @@ msgid "failed to read AppArmor template"
msgstr "не вдалося прочитати дані шаблону AppArmor" msgstr "не вдалося прочитати дані шаблону AppArmor"
msgid "failed to read CHSaveXMLHeader header" msgid "failed to read CHSaveXMLHeader header"
msgstr "" msgstr "не вдалося прочитати заголовок CHSaveXMLHeader"
msgid "failed to read XML" msgid "failed to read XML"
msgstr "не вдалося прочитати XML" msgstr "не вдалося прочитати XML"
@ -27805,19 +27812,21 @@ msgid "failed to resolve symlink %1$s: %2$s"
msgstr "не вдалося знайти джерело символічного посилання %1$s: %2$s" msgstr "не вдалося знайти джерело символічного посилання %1$s: %2$s"
msgid "failed to restore domain" msgid "failed to restore domain"
msgstr "" msgstr "не вдалося відновити домен"
msgid "failed to restore domain from managed save" msgid "failed to restore domain from managed save"
msgstr "" msgstr "не вдалося відновити домен із керованого сховища збережених даних"
msgid "failed to resume domain" msgid "failed to resume domain"
msgstr "помилка відновлення роботи домену" msgstr "помилка відновлення роботи домену"
msgid "failed to resume domain after restore" msgid "failed to resume domain after restore"
msgstr "" msgstr "не вдалося відновити роботу домену після відновлення"
msgid "failed to resume domain after restore from managed save" msgid "failed to resume domain after restore from managed save"
msgstr "" msgstr ""
"не вдалося відновити роботу домену після відновлення з керованого сховища "
"збережених даних"
msgid "failed to retrieve XML" msgid "failed to retrieve XML"
msgstr "не вдалося отримати XML" msgstr "не вдалося отримати XML"
@ -27941,7 +27950,7 @@ msgid "failed to suspend domain"
msgstr "не вдалося призупинити роботу домену" msgstr "не вдалося призупинити роботу домену"
msgid "failed to suspend domain before saving" msgid "failed to suspend domain before saving"
msgstr "" msgstr "не вдалося призупинити роботу домену до збереження"
msgid "failed to take screenshot" msgid "failed to take screenshot"
msgstr "не вдалося створити знімок вікна" msgstr "не вдалося створити знімок вікна"
@ -28659,7 +28668,7 @@ msgstr ""
"потрібен графічний пристрій для значення атрибуту 'display=on' у <hostdev>" "потрібен графічний пристрій для значення атрибуту 'display=on' у <hostdev>"
msgid "graphics display type" msgid "graphics display type"
msgstr "" msgstr "тип графічного дисплея"
msgid "" msgid ""
"graphics type 'egl-headless' is only supported with one of: 'vnc', 'spice' " "graphics type 'egl-headless' is only supported with one of: 'vnc', 'spice' "
@ -29058,6 +29067,8 @@ msgid ""
"hypervisor provided conflicting CPU data: feature '%1$s' is both enabled and " "hypervisor provided conflicting CPU data: feature '%1$s' is both enabled and "
"disabled at the same time" "disabled at the same time"
msgstr "" msgstr ""
"наданий гіпервізор конфліктує із даними процесора: можливість «%1$s» одразу "
"увімкнено і вимкнено"
msgid "i - turn off validation and try to redefine again" msgid "i - turn off validation and try to redefine again"
msgstr "i - вимкнути перевірку і спробувати визначити все знову" msgstr "i - вимкнути перевірку і спробувати визначити все знову"
@ -31175,7 +31186,7 @@ msgstr ""
"агента)" "агента)"
msgid "maplen must be non-negative" msgid "maplen must be non-negative"
msgstr "" msgstr "maplen має бути невід'ємним"
msgid "mark inactive domains with managed save state" msgid "mark inactive domains with managed save state"
msgstr "позначити неактивні домени позначкою стану керованого збереження" msgstr "позначити неактивні домени позначкою стану керованого збереження"
@ -31213,7 +31224,7 @@ msgid "maxcells > REMOTE_NODE_MAX_CELLS"
msgstr "maxcells > REMOTE_NODE_MAX_CELLS" msgstr "maxcells > REMOTE_NODE_MAX_CELLS"
msgid "maxcells must be non-negative" msgid "maxcells must be non-negative"
msgstr "" msgstr "maxcells має бути невід'ємним"
msgid "maxerrors too large" msgid "maxerrors too large"
msgstr "значення maxerrors є занадто великим" msgstr "значення maxerrors є занадто великим"
@ -31222,7 +31233,7 @@ msgid "maxids > REMOTE_DOMAIN_LIST_MAX"
msgstr "maxids > REMOTE_DOMAIN_LIST_MAX" msgstr "maxids > REMOTE_DOMAIN_LIST_MAX"
msgid "maxids must be non-negative" msgid "maxids must be non-negative"
msgstr "" msgstr "maxids має бути невід'ємним"
msgid "maximum" msgid "maximum"
msgstr "maximum" msgstr "maximum"
@ -31273,7 +31284,7 @@ msgid "maxinfo > REMOTE_VCPUINFO_MAX"
msgstr "maxinfo > REMOTE_VCPUINFO_MAX" msgstr "maxinfo > REMOTE_VCPUINFO_MAX"
msgid "maxinfo must be non-negative" msgid "maxinfo must be non-negative"
msgstr "" msgstr "maxinfo має бути невід'ємним"
msgid "maxnames > REMOTE_DOMAIN_LIST_MAX" msgid "maxnames > REMOTE_DOMAIN_LIST_MAX"
msgstr "maxnames > REMOTE_DOMAIN_LIST_MAX" msgstr "maxnames > REMOTE_DOMAIN_LIST_MAX"
@ -31303,13 +31314,13 @@ msgid "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
msgstr "maxnames > REMOTE_STORAGE_VOL_LIST_MAX" msgstr "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
msgid "maxnames must be non-negative" msgid "maxnames must be non-negative"
msgstr "" msgstr "maxnames має бути невід'ємним"
msgid "maxuuids > REMOTE_SECRET_LIST_MAX" msgid "maxuuids > REMOTE_SECRET_LIST_MAX"
msgstr "maxuuids > REMOTE_SECRET_LIST_MAX" msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "maxuuids must be non-negative" msgid "maxuuids must be non-negative"
msgstr "" msgstr "maxuuids має бути невід'ємним"
msgid "mdev attribute missing name or value" msgid "mdev attribute missing name or value"
msgstr "у атрибуті mdev пропущено назву або значення" msgstr "у атрибуті mdev пропущено назву або значення"
@ -32690,10 +32701,10 @@ msgid "msi option is only supported with a server"
msgstr "підтримку параметра msi передбачено лише з сервером" msgstr "підтримку параметра msi передбачено лише з сервером"
msgid "mtp is not supported with this QEMU binary" msgid "mtp is not supported with this QEMU binary"
msgstr "" msgstr "підтримки mtp у цьому виконуваному файлі QEMU не передбачено"
msgid "mtp only supports passthrough accessmode" msgid "mtp only supports passthrough accessmode"
msgstr "" msgstr "у mtp передбачено підтримку лише режиму доступу і пропусканням"
#, c-format #, c-format
msgid "" msgid ""
@ -32829,7 +32840,7 @@ msgid "ncpumaps > REMOTE_VCPUINFO_MAX"
msgstr "ncpumaps > REMOTE_VCPUINFO_MAX" msgstr "ncpumaps > REMOTE_VCPUINFO_MAX"
msgid "ncpumaps must be non-negative" msgid "ncpumaps must be non-negative"
msgstr "" msgstr "ncpumaps має бути невід'ємним"
#, c-format #, c-format
msgid "ncpus count exceeds maximum: %1$u > %2$u" msgid "ncpus count exceeds maximum: %1$u > %2$u"
@ -33857,7 +33868,7 @@ msgid "nparams in %1$s must be equal to %2$d"
msgstr "значення nparams у %1$s має дорівнювати %2$d" msgstr "значення nparams у %1$s має дорівнювати %2$d"
msgid "nparams must be non-negative" msgid "nparams must be non-negative"
msgstr "" msgstr "nparams має бути невід'ємним"
msgid "nparams too large" msgid "nparams too large"
msgstr "надто великий розмір nparams" msgstr "надто великий розмір nparams"
@ -34100,7 +34111,7 @@ msgid "only can resume paused domain"
msgstr "можна відновити роботу лише призупиненого домену" msgstr "можна відновити роботу лише призупиненого домену"
msgid "only can save running/paused domain" msgid "only can save running/paused domain"
msgstr "" msgstr "збереження можливе лише для запущеного або призупиненого домену"
msgid "only can shutdown running/paused domain" msgid "only can shutdown running/paused domain"
msgstr "вимикати можна лише запущений або призупинений домен" msgstr "вимикати можна лише запущений або призупинений домен"
@ -34356,7 +34367,7 @@ msgstr ""
"вивести рядок XML щодо системної інформації гіпервізора, якщо він доступний" "вивести рядок XML щодо системної інформації гіпервізора, якщо він доступний"
msgid "output help for each command" msgid "output help for each command"
msgstr "" msgstr "вивести довідку для кожної команди"
msgid "output the list of options which are missing completers" msgid "output the list of options which are missing completers"
msgstr "вивести список параметрів, де не вистачає завершувачів" msgstr "вивести список параметрів, де не вистачає завершувачів"
@ -36000,7 +36011,7 @@ msgid "save image is incomplete"
msgstr "збережений образ є неповним" msgstr "збережений образ є неповним"
msgid "save image magic is incorrect" msgid "save image magic is incorrect"
msgstr "" msgstr "контрольна сума збереженого образу є помилковою"
msgid "saved" msgid "saved"
msgstr "збережено" msgstr "збережено"
@ -38002,7 +38013,7 @@ msgstr "невідповідність типів у події (маємо 0x%1
#, c-format #, c-format
msgid "type must be less than %1$d" msgid "type must be less than %1$d"
msgstr "" msgstr "type має бути меншим за %1$d"
msgid "type of source (block|file|network)" msgid "type of source (block|file|network)"
msgstr "тип джерела (block|file|network)" msgstr "тип джерела (block|file|network)"
@ -40421,7 +40432,7 @@ msgstr "У virVMXContext не встановлено функцію parseFileNam
#, c-format #, c-format
msgid "virt type '%1$s' is not supported" msgid "virt type '%1$s' is not supported"
msgstr "" msgstr "підтримки типу віртуалізації «%1$s» не передбачено"
#, c-format #, c-format
msgid "" msgid ""

View File

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

View File

@ -429,9 +429,10 @@ def expand_model(model):
"""Expand a qemu cpu model description that has its feature split up into """Expand a qemu cpu model description that has its feature split up into
different fields and may have differing versions into several libvirt- different fields and may have differing versions into several libvirt-
friendly cpu models.""" friendly cpu models."""
name = model.pop(".name")
result = { result = {
"name": model.pop(".name"), "name": name,
"vendor": translate_vendor(model.pop(".vendor")), "vendor": translate_vendor(model.pop(".vendor")),
"features": set(), "features": set(),
"extra": dict()} "extra": dict()}
@ -454,7 +455,8 @@ def expand_model(model):
for version in versions: for version in versions:
result = copy.deepcopy(result) result = copy.deepcopy(result)
result["name"] = version.pop(".alias", result["name"]) version_num = version.pop(".version", '1')
result["name"] = name + "-v" + version_num
props = version.pop(".props", dict()) props = version.pop(".props", dict())
for k, v in props: for k, v in props:
@ -475,6 +477,11 @@ def expand_model(model):
yield result yield result
alias = version.pop(".alias", None)
if alias:
result = copy.deepcopy(result)
result["name"] = alias
yield result
def output_model(f, model): def output_model(f, model):
if model["extra"]: if model["extra"]:

View File

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

View File

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

View File

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