* Tue Jan 27 2026 Jon Maloy <jmaloy@redhat.com> - 10.1.0-12
- kvm-block-Improve-comments-in-BlockLimits.patch [RHEL-132989] - kvm-block-Expose-block-limits-for-images-in-QMP.patch [RHEL-132989] - kvm-qemu-img-info-Optionally-show-block-limits.patch [RHEL-132989] - kvm-qemu-img-info-Add-cache-mode-option.patch [RHEL-132989] - kvm-hw-intc-ioapic-Fix-ACCEL_KERNEL_GSI_IRQFD_POSSIBLE-t.patch [RHEL-140187] - kvm-q35-increase-default-tseg-size.patch [RHEL-139057] - Resolves: RHEL-132989 (Expose block limits of block nodes in QMP and qemu-img [rhel-9]) - Resolves: RHEL-140187 (Intel IOMMU VM freezes: "call_irq_handler: 3.37 No irq handler for vector"[rhel-9.8]) - Resolves: RHEL-139057 ([qemu, rhel-9] increase default TSEG size)
This commit is contained in:
parent
c60e175901
commit
7d7aec1bd3
255
kvm-block-Expose-block-limits-for-images-in-QMP.patch
Normal file
255
kvm-block-Expose-block-limits-for-images-in-QMP.patch
Normal file
@ -0,0 +1,255 @@
|
||||
From 8524b4a772f47d2be59ce2f07c7c6d5a8af056d0 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Wolf <kwolf@redhat.com>
|
||||
Date: Fri, 24 Oct 2025 14:30:38 +0200
|
||||
Subject: [PATCH 2/6] block: Expose block limits for images in QMP
|
||||
|
||||
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
||||
RH-MergeRequest: 440: block: Expose block limits in monitor and qemu-img info
|
||||
RH-Jira: RHEL-132989
|
||||
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Commit: [2/4] 2c68f297c55a64249fd10ab2e06ae9446096a0a9 (kmwolf/centos-qemu-kvm)
|
||||
|
||||
This information can be useful both for debugging and for management
|
||||
tools trying to configure guest devices with the optimal limits
|
||||
(possibly across multiple hosts). There is no reason not to make it
|
||||
available, so just add it to BlockNodeInfo.
|
||||
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
Message-ID: <20251024123041.51254-3-kwolf@redhat.com>
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
(cherry picked from commit d2634e18286a5772f04cc724e64f8b16a2124587)
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
---
|
||||
block/qapi.c | 34 ++++++++++++++--
|
||||
qapi/block-core.json | 66 ++++++++++++++++++++++++++++++++
|
||||
tests/qemu-iotests/184 | 5 ++-
|
||||
tests/qemu-iotests/184.out | 8 ----
|
||||
tests/qemu-iotests/common.filter | 3 +-
|
||||
5 files changed, 102 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/block/qapi.c b/block/qapi.c
|
||||
index 12fbf8d1b7..54521d0a68 100644
|
||||
--- a/block/qapi.c
|
||||
+++ b/block/qapi.c
|
||||
@@ -235,7 +235,8 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs,
|
||||
* in @info, setting @errp on error.
|
||||
*/
|
||||
static void GRAPH_RDLOCK
|
||||
-bdrv_do_query_node_info(BlockDriverState *bs, BlockNodeInfo *info, Error **errp)
|
||||
+bdrv_do_query_node_info(BlockDriverState *bs, BlockNodeInfo *info, bool limits,
|
||||
+ Error **errp)
|
||||
{
|
||||
int64_t size;
|
||||
const char *backing_filename;
|
||||
@@ -269,6 +270,33 @@ bdrv_do_query_node_info(BlockDriverState *bs, BlockNodeInfo *info, Error **errp)
|
||||
info->dirty_flag = bdi.is_dirty;
|
||||
info->has_dirty_flag = true;
|
||||
}
|
||||
+
|
||||
+ if (limits) {
|
||||
+ info->limits = g_new(BlockLimitsInfo, 1);
|
||||
+ *info->limits = (BlockLimitsInfo) {
|
||||
+ .request_alignment = bs->bl.request_alignment,
|
||||
+ .has_max_discard = bs->bl.max_pdiscard != 0,
|
||||
+ .max_discard = bs->bl.max_pdiscard,
|
||||
+ .has_discard_alignment = bs->bl.pdiscard_alignment != 0,
|
||||
+ .discard_alignment = bs->bl.pdiscard_alignment,
|
||||
+ .has_max_write_zeroes = bs->bl.max_pwrite_zeroes != 0,
|
||||
+ .max_write_zeroes = bs->bl.max_pwrite_zeroes,
|
||||
+ .has_write_zeroes_alignment = bs->bl.pwrite_zeroes_alignment != 0,
|
||||
+ .write_zeroes_alignment = bs->bl.pwrite_zeroes_alignment,
|
||||
+ .has_opt_transfer = bs->bl.opt_transfer != 0,
|
||||
+ .opt_transfer = bs->bl.opt_transfer,
|
||||
+ .has_max_transfer = bs->bl.max_transfer != 0,
|
||||
+ .max_transfer = bs->bl.max_transfer,
|
||||
+ .has_max_hw_transfer = bs->bl.max_hw_transfer != 0,
|
||||
+ .max_hw_transfer = bs->bl.max_hw_transfer,
|
||||
+ .max_iov = bs->bl.max_iov,
|
||||
+ .has_max_hw_iov = bs->bl.max_hw_iov != 0,
|
||||
+ .max_hw_iov = bs->bl.max_hw_iov,
|
||||
+ .min_mem_alignment = bs->bl.min_mem_alignment,
|
||||
+ .opt_mem_alignment = bs->bl.opt_mem_alignment,
|
||||
+ };
|
||||
+ }
|
||||
+
|
||||
info->format_specific = bdrv_get_specific_info(bs, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
@@ -343,7 +371,7 @@ void bdrv_query_image_info(BlockDriverState *bs,
|
||||
ImageInfo *info;
|
||||
|
||||
info = g_new0(ImageInfo, 1);
|
||||
- bdrv_do_query_node_info(bs, qapi_ImageInfo_base(info), errp);
|
||||
+ bdrv_do_query_node_info(bs, qapi_ImageInfo_base(info), true, errp);
|
||||
if (*errp) {
|
||||
goto fail;
|
||||
}
|
||||
@@ -397,7 +425,7 @@ void bdrv_query_block_graph_info(BlockDriverState *bs,
|
||||
BdrvChild *c;
|
||||
|
||||
info = g_new0(BlockGraphInfo, 1);
|
||||
- bdrv_do_query_node_info(bs, qapi_BlockGraphInfo_base(info), errp);
|
||||
+ bdrv_do_query_node_info(bs, qapi_BlockGraphInfo_base(info), false, errp);
|
||||
if (*errp) {
|
||||
goto fail;
|
||||
}
|
||||
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
||||
index dc6eb4ae23..2c037183f0 100644
|
||||
--- a/qapi/block-core.json
|
||||
+++ b/qapi/block-core.json
|
||||
@@ -275,6 +275,69 @@
|
||||
'file': 'ImageInfoSpecificFileWrapper'
|
||||
} }
|
||||
|
||||
+##
|
||||
+# @BlockLimitsInfo:
|
||||
+#
|
||||
+# @request-alignment: Alignment requirement, in bytes, for
|
||||
+# offset/length of I/O requests.
|
||||
+#
|
||||
+# @max-discard: Maximum number of bytes that can be discarded at once.
|
||||
+# If not present, there is no specific maximum.
|
||||
+#
|
||||
+# @discard-alignment: Optimal alignment for discard requests in bytes.
|
||||
+# Note that this doesn't have to be a power of two. If not
|
||||
+# present, discards don't have a alignment requirement different
|
||||
+# from @request-alignment.
|
||||
+#
|
||||
+# @max-write-zeroes: Maximum number of bytes that can be zeroed out at
|
||||
+# once. If not present, there is no specific maximum.
|
||||
+#
|
||||
+# @write-zeroes-alignment: Optimal alignment for write zeroes requests
|
||||
+# in bytes. Note that this doesn't have to be a power of two. If
|
||||
+# not present, write_zeroes doesn't have a alignment requirement
|
||||
+# different from @request-alignment.
|
||||
+#
|
||||
+# @opt-transfer: Optimal transfer length in bytes. If not present,
|
||||
+# there is no preferred size.
|
||||
+#
|
||||
+# @max-transfer: Maximal transfer length in bytes. If not present,
|
||||
+# there is no specific maximum.
|
||||
+#
|
||||
+# @max-hw-transfer: Maximal hardware transfer length in bytes.
|
||||
+# Applies whenever transfers to the device bypass the kernel I/O
|
||||
+# scheduler, for example with SG_IO. If not present, there is no
|
||||
+# specific maximum.
|
||||
+#
|
||||
+# @max-iov: Maximum number of scatter/gather elements
|
||||
+#
|
||||
+# @max-hw-iov: Maximum number of scatter/gather elements allowed by
|
||||
+# the hardware. Applies whenever transfers to the device bypass
|
||||
+# the kernel I/O scheduler, for example with SG_IO. If not
|
||||
+# present, the hardware limits is unknown and @max-iov is always
|
||||
+# used.
|
||||
+#
|
||||
+# @min-mem-alignment: Minimal required memory alignment in bytes for
|
||||
+# zero-copy I/O to succeed. For unaligned requests, a bounce
|
||||
+# buffer will be used.
|
||||
+#
|
||||
+# @opt-mem-alignment: Optimal memory alignment in bytes. This is the
|
||||
+# alignment used for any buffer allocations QEMU performs
|
||||
+# internally.
|
||||
+##
|
||||
+{ 'struct': 'BlockLimitsInfo',
|
||||
+ 'data': { 'request-alignment': 'uint32',
|
||||
+ '*max-discard': 'uint64',
|
||||
+ '*discard-alignment': 'uint32',
|
||||
+ '*max-write-zeroes': 'uint64',
|
||||
+ '*write-zeroes-alignment': 'uint32',
|
||||
+ '*opt-transfer': 'uint32',
|
||||
+ '*max-transfer': 'uint32',
|
||||
+ '*max-hw-transfer': 'uint32',
|
||||
+ 'max-iov': 'int',
|
||||
+ '*max-hw-iov': 'int',
|
||||
+ 'min-mem-alignment': 'size',
|
||||
+ 'opt-mem-alignment': 'size' } }
|
||||
+
|
||||
##
|
||||
# @BlockNodeInfo:
|
||||
#
|
||||
@@ -304,6 +367,8 @@
|
||||
#
|
||||
# @snapshots: list of VM snapshots
|
||||
#
|
||||
+# @limits: block limits that are used for I/O on the node (Since 10.2)
|
||||
+#
|
||||
# @format-specific: structure supplying additional format-specific
|
||||
# information (since 1.7)
|
||||
#
|
||||
@@ -315,6 +380,7 @@
|
||||
'*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
|
||||
'*backing-filename': 'str', '*full-backing-filename': 'str',
|
||||
'*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
|
||||
+ '*limits': 'BlockLimitsInfo',
|
||||
'*format-specific': 'ImageInfoSpecific' } }
|
||||
|
||||
##
|
||||
diff --git a/tests/qemu-iotests/184 b/tests/qemu-iotests/184
|
||||
index e4cbcd8634..6d0afe9d38 100755
|
||||
--- a/tests/qemu-iotests/184
|
||||
+++ b/tests/qemu-iotests/184
|
||||
@@ -45,8 +45,9 @@ do_run_qemu()
|
||||
|
||||
run_qemu()
|
||||
{
|
||||
- do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\
|
||||
- | _filter_qemu_io | _filter_generated_node_ids
|
||||
+ do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp \
|
||||
+ | _filter_qemu_io | _filter_generated_node_ids \
|
||||
+ | _filter_img_info
|
||||
}
|
||||
|
||||
test_throttle=$($QEMU_IMG --help|grep throttle)
|
||||
diff --git a/tests/qemu-iotests/184.out b/tests/qemu-iotests/184.out
|
||||
index ef99bb2e9a..52692b6b3b 100644
|
||||
--- a/tests/qemu-iotests/184.out
|
||||
+++ b/tests/qemu-iotests/184.out
|
||||
@@ -41,12 +41,6 @@ Testing:
|
||||
},
|
||||
"iops_wr": 0,
|
||||
"ro": false,
|
||||
- "children": [
|
||||
- {
|
||||
- "node-name": "disk0",
|
||||
- "child": "file"
|
||||
- }
|
||||
- ],
|
||||
"node-name": "throttle0",
|
||||
"backing_file_depth": 1,
|
||||
"drv": "throttle",
|
||||
@@ -75,8 +69,6 @@ Testing:
|
||||
},
|
||||
"iops_wr": 0,
|
||||
"ro": false,
|
||||
- "children": [
|
||||
- ],
|
||||
"node-name": "disk0",
|
||||
"backing_file_depth": 0,
|
||||
"drv": "null-co",
|
||||
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
|
||||
index 35c0fc0d20..cd8b506dba 100644
|
||||
--- a/tests/qemu-iotests/common.filter
|
||||
+++ b/tests/qemu-iotests/common.filter
|
||||
@@ -230,6 +230,7 @@ _filter_img_info()
|
||||
discard=0
|
||||
regex_json_spec_start='^ *"format-specific": \{'
|
||||
regex_json_child_start='^ *"children": \['
|
||||
+ regex_json_limit_start='^ *"limits": \{'
|
||||
gsed -e "s#$REMOTE_TEST_DIR#TEST_DIR#g" \
|
||||
-e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
|
||||
-e "s#$TEST_DIR#TEST_DIR#g" \
|
||||
@@ -262,7 +263,7 @@ _filter_img_info()
|
||||
discard=1
|
||||
elif [[ $line =~ "Child node '/" ]]; then
|
||||
discard=1
|
||||
- elif [[ $line =~ $regex_json_spec_start ]]; then
|
||||
+ elif [[ $line =~ $regex_json_spec_start || $line =~ $regex_json_limit_start ]]; then
|
||||
discard=2
|
||||
regex_json_end="^${line%%[^ ]*}\\},? *$"
|
||||
elif [[ $line =~ $regex_json_child_start ]]; then
|
||||
--
|
||||
2.52.0
|
||||
|
||||
98
kvm-block-Improve-comments-in-BlockLimits.patch
Normal file
98
kvm-block-Improve-comments-in-BlockLimits.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 43ef7d6a38dd596315f1b66c5736df5d732abc95 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Wolf <kwolf@redhat.com>
|
||||
Date: Fri, 24 Oct 2025 14:30:37 +0200
|
||||
Subject: [PATCH 1/6] block: Improve comments in BlockLimits
|
||||
|
||||
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
||||
RH-MergeRequest: 440: block: Expose block limits in monitor and qemu-img info
|
||||
RH-Jira: RHEL-132989
|
||||
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Commit: [1/4] 89b5ee003a4c87cd7736b9ca674baffdd92e38e5 (kmwolf/centos-qemu-kvm)
|
||||
|
||||
Patches to expose the limits in QAPI have made clear that the existing
|
||||
documentation of BlockLimits could be improved: The meaning of
|
||||
min_mem_alignment and opt_mem_alignment could be clearer, and talking
|
||||
about better alignment values isn't helpful when we only detect these
|
||||
values and never choose them.
|
||||
|
||||
Make the changes in the BlockLimits documentation now, so that the
|
||||
patches exposing the fields in QAPI can use descriptions consistent with
|
||||
it.
|
||||
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
Message-ID: <20251024123041.51254-2-kwolf@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
(cherry picked from commit 46dd683d56b1328cb2bc923914bfd7ac590064f7)
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
---
|
||||
include/block/block_int-common.h | 30 +++++++++++++++++-------------
|
||||
1 file changed, 17 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
|
||||
index 034c0634c8..5206f32d53 100644
|
||||
--- a/include/block/block_int-common.h
|
||||
+++ b/include/block/block_int-common.h
|
||||
@@ -817,10 +817,10 @@ typedef struct BlockLimits {
|
||||
int64_t max_pdiscard;
|
||||
|
||||
/*
|
||||
- * Optimal alignment for discard requests in bytes. A power of 2
|
||||
- * is best but not mandatory. Must be a multiple of
|
||||
- * bl.request_alignment, and must be less than max_pdiscard if
|
||||
- * that is set. May be 0 if bl.request_alignment is good enough
|
||||
+ * Optimal alignment for discard requests in bytes. Note that this doesn't
|
||||
+ * have to be a power of two. Must be a multiple of bl.request_alignment,
|
||||
+ * and must be less than max_pdiscard if that is set. May be 0 if
|
||||
+ * bl.request_alignment is good enough.
|
||||
*/
|
||||
uint32_t pdiscard_alignment;
|
||||
|
||||
@@ -831,11 +831,10 @@ typedef struct BlockLimits {
|
||||
int64_t max_pwrite_zeroes;
|
||||
|
||||
/*
|
||||
- * Optimal alignment for write zeroes requests in bytes. A power
|
||||
- * of 2 is best but not mandatory. Must be a multiple of
|
||||
- * bl.request_alignment, and must be less than max_pwrite_zeroes
|
||||
- * if that is set. May be 0 if bl.request_alignment is good
|
||||
- * enough
|
||||
+ * Optimal alignment for write zeroes requests in bytes. Note that this
|
||||
+ * doesn't have to be a power of two. Must be a multiple of
|
||||
+ * bl.request_alignment, and must be less than max_pwrite_zeroes if that is
|
||||
+ * set. May be 0 if bl.request_alignment is good enough.
|
||||
*/
|
||||
uint32_t pwrite_zeroes_alignment;
|
||||
|
||||
@@ -863,18 +862,23 @@ typedef struct BlockLimits {
|
||||
uint64_t max_hw_transfer;
|
||||
|
||||
/*
|
||||
- * Maximal number of scatter/gather elements allowed by the hardware.
|
||||
+ * Maximum number of scatter/gather elements allowed by the hardware.
|
||||
* Applies whenever transfers to the device bypass the kernel I/O
|
||||
* scheduler, for example with SG_IO. If larger than max_iov
|
||||
* or if zero, blk_get_max_hw_iov will fall back to max_iov.
|
||||
*/
|
||||
int max_hw_iov;
|
||||
|
||||
-
|
||||
- /* memory alignment, in bytes so that no bounce buffer is needed */
|
||||
+ /*
|
||||
+ * Minimal required memory alignment in bytes for zero-copy I/O to succeed.
|
||||
+ * For unaligned requests, a bounce buffer will be used.
|
||||
+ */
|
||||
size_t min_mem_alignment;
|
||||
|
||||
- /* memory alignment, in bytes, for bounce buffer */
|
||||
+ /*
|
||||
+ * Optimal memory alignment in bytes. This is the alignment used for any
|
||||
+ * buffer allocations QEMU performs internally.
|
||||
+ */
|
||||
size_t opt_mem_alignment;
|
||||
|
||||
/* maximum number of iovec elements */
|
||||
--
|
||||
2.52.0
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
From b10f6682b2a1462efb83ba6f407d9450e82b63ac Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= <clg@redhat.com>
|
||||
Date: Thu, 6 Nov 2025 11:51:48 +0100
|
||||
Subject: [PATCH 5/6] hw/intc/ioapic: Fix ACCEL_KERNEL_GSI_IRQFD_POSSIBLE typo
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Cédric Le Goater <clg@redhat.com>
|
||||
RH-MergeRequest: 453: hw/intc/ioapic: Fix ACCEL_KERNEL_GSI_IRQFD_POSSIBLE typo
|
||||
RH-Jira: RHEL-140187
|
||||
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||||
RH-Acked-by: Igor Mammedov <imammedo@redhat.com>
|
||||
RH-Commit: [1/1] 2a6d42467dceb8abf7679f1b73f1491bbf67ebc1 (clegoate/qemu-kvm-centos)
|
||||
|
||||
Commit 638ac1c78457 introduced a regression in interrupt remapping
|
||||
when running a VM configured with an intel-iommu device and an
|
||||
assigned PCI VF. During boot, Linux reports repeated messages :
|
||||
|
||||
[ 15.416794] __common_interrupt: 2.37 No irq handler for vector
|
||||
[ 15.417266] __common_interrupt: 2.37 No irq handler for vector
|
||||
[ 15.417733] __common_interrupt: 2.37 No irq handler for vector
|
||||
[ 15.418202] __common_interrupt: 2.37 No irq handler for vector
|
||||
[ 15.418670] __common_interrupt: 2.37 No irq handler for vector
|
||||
|
||||
and may eventually hang.
|
||||
|
||||
The issue is caused by the incorrect use of the macro
|
||||
ACCEL_KERNEL_GSI_IRQFD_POSSIBLE, which should instead be
|
||||
ACCEL_GSI_IRQFD_POSSIBLE.
|
||||
|
||||
Fixes: 638ac1c78457 ("hw/intc: Generalize APIC helper names from kvm_* to accel_*")
|
||||
Cc: Magnus Kulke <magnuskulke@linux.microsoft.com>
|
||||
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
||||
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
Message-ID: <20251106105148.737093-1-clg@redhat.com>
|
||||
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
(cherry picked from commit 3abfbb571143ba865488b6c11f8ad75dda97d1a3)
|
||||
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
||||
---
|
||||
hw/intc/ioapic.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
|
||||
index e431d00311..38e4384648 100644
|
||||
--- a/hw/intc/ioapic.c
|
||||
+++ b/hw/intc/ioapic.c
|
||||
@@ -216,7 +216,7 @@ static void ioapic_update_kvm_routes(IOAPICCommonState *s)
|
||||
#endif
|
||||
}
|
||||
|
||||
-#ifdef ACCEL_KERNEL_GSI_IRQFD_POSSIBLE
|
||||
+#ifdef ACCEL_GSI_IRQFD_POSSIBLE
|
||||
static void ioapic_iec_notifier(void *private, bool global,
|
||||
uint32_t index, uint32_t mask)
|
||||
{
|
||||
@@ -434,7 +434,7 @@ static const MemoryRegionOps ioapic_io_ops = {
|
||||
|
||||
static void ioapic_machine_done_notify(Notifier *notifier, void *data)
|
||||
{
|
||||
-#ifdef ACCEL_KERNEL_GSI_IRQFD_POSSIBLE
|
||||
+#ifdef ACCEL_GSI_IRQFD_POSSIBLE
|
||||
IOAPICCommonState *s = container_of(notifier, IOAPICCommonState,
|
||||
machine_done);
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
62
kvm-q35-increase-default-tseg-size.patch
Normal file
62
kvm-q35-increase-default-tseg-size.patch
Normal file
@ -0,0 +1,62 @@
|
||||
From 2b12179e5fffa2d5eba61d828eb2a3f3c96864fb Mon Sep 17 00:00:00 2001
|
||||
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Date: Thu, 6 Nov 2025 11:56:40 +0100
|
||||
Subject: [PATCH 6/6] q35: increase default tseg size
|
||||
|
||||
RH-Author: Gerd Hoffmann <kraxel@redhat.com>
|
||||
RH-MergeRequest: 448: q35: increase default tseg size
|
||||
RH-Jira: RHEL-139057
|
||||
RH-Acked-by: Igor Mammedov <imammedo@redhat.com>
|
||||
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>
|
||||
RH-Commit: [1/1] f69fba674307d2f1822045ddb41012d8b826724e (kraxel.rh/centos-src-qemu-kvm)
|
||||
|
||||
With virtual machines becoming larger (more CPUs, more memory) the
|
||||
memory needed by the SMM code in OVMF to manage page tables and vcpu
|
||||
state grows too.
|
||||
|
||||
Default SMM memory (aka TSEG) size is 16 MB, and this often is not
|
||||
enough. Bump it to 64 MB for new machine types.
|
||||
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Message-Id: <20251106105640.1642109-1-kraxel@redhat.com>
|
||||
(cherry picked from commit fa4136387928749d5a1b4fa3606ae0ce6dce75aa)
|
||||
|
||||
[ RHEL: drop compat property update for upstream machine types ]
|
||||
[ RHEL: add compat property for rhel 9.6 + older machine types ]
|
||||
|
||||
Resolves: RHEL-139057
|
||||
---
|
||||
hw/i386/pc.c | 1 +
|
||||
hw/pci-host/q35.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
|
||||
index dc3f140fdc..1f4154de5e 100644
|
||||
--- a/hw/i386/pc.c
|
||||
+++ b/hw/i386/pc.c
|
||||
@@ -299,6 +299,7 @@ const size_t pc_rhel_compat_len = G_N_ELEMENTS(pc_rhel_compat);
|
||||
|
||||
GlobalProperty pc_rhel_9_8_compat[] = {
|
||||
/* pc_rhel_10_2_compat from pc_compat_10_0 */
|
||||
+ { "mch", "extended-tseg-mbytes", "16" },
|
||||
{ TYPE_X86_CPU, "x-consistent-cache", "false" },
|
||||
{ TYPE_X86_CPU, "x-vendor-cpuid-only-v2", "false" },
|
||||
{ TYPE_X86_CPU, "x-arch-cap-always-on", "true" },
|
||||
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
|
||||
index 1951ae440c..a708758d36 100644
|
||||
--- a/hw/pci-host/q35.c
|
||||
+++ b/hw/pci-host/q35.c
|
||||
@@ -663,7 +663,7 @@ static void mch_realize(PCIDevice *d, Error **errp)
|
||||
|
||||
static const Property mch_props[] = {
|
||||
DEFINE_PROP_UINT16("extended-tseg-mbytes", MCHPCIState, ext_tseg_mbytes,
|
||||
- 16),
|
||||
+ 64),
|
||||
DEFINE_PROP_BOOL("smbase-smram", MCHPCIState, has_smram_at_smbase, true),
|
||||
};
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
153
kvm-qemu-img-info-Add-cache-mode-option.patch
Normal file
153
kvm-qemu-img-info-Add-cache-mode-option.patch
Normal file
@ -0,0 +1,153 @@
|
||||
From e06931af04484b3900ab07f966df49dc1086734d Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Wolf <kwolf@redhat.com>
|
||||
Date: Fri, 24 Oct 2025 14:30:40 +0200
|
||||
Subject: [PATCH 4/6] qemu-img info: Add cache mode option
|
||||
|
||||
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
||||
RH-MergeRequest: 440: block: Expose block limits in monitor and qemu-img info
|
||||
RH-Jira: RHEL-132989
|
||||
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Commit: [4/4] 3b4c5546694ba39d46f18646dc1fce7a6d937e0f (kmwolf/centos-qemu-kvm)
|
||||
|
||||
When querying block limits, different cache modes (in particular
|
||||
O_DIRECT or not) can result in different limits. Add an option to
|
||||
'qemu-img info' that allows the user to specify a cache mode, so that
|
||||
they can get the block limits for the cache mode they intend to use with
|
||||
their VM.
|
||||
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
Message-ID: <20251024123041.51254-5-kwolf@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
(cherry picked from commit 911992fd6ec7a84c7cc82831b4bcd8a2ca5ccc76)
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
---
|
||||
docs/tools/qemu-img.rst | 2 +-
|
||||
qemu-img-cmds.hx | 4 ++--
|
||||
qemu-img.c | 25 +++++++++++++++++++++----
|
||||
3 files changed, 24 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
|
||||
index fdc9ea9cf2..558b0eb84d 100644
|
||||
--- a/docs/tools/qemu-img.rst
|
||||
+++ b/docs/tools/qemu-img.rst
|
||||
@@ -503,7 +503,7 @@ Command description:
|
||||
|
||||
The size syntax is similar to :manpage:`dd(1)`'s size syntax.
|
||||
|
||||
-.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-U] FILENAME
|
||||
+.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-t CACHE] [-U] FILENAME
|
||||
|
||||
Give information about the disk image *FILENAME*. Use it in
|
||||
particular to know the size reserved on disk which can be different
|
||||
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
|
||||
index 74b66f9d42..6bc8265cfb 100644
|
||||
--- a/qemu-img-cmds.hx
|
||||
+++ b/qemu-img-cmds.hx
|
||||
@@ -66,9 +66,9 @@ SRST
|
||||
ERST
|
||||
|
||||
DEF("info", img_info,
|
||||
- "info [--object objectdef] [--image-opts] [-f fmt] [--output=ofmt] [--backing-chain] [--limits] [-U] filename")
|
||||
+ "info [--object objectdef] [--image-opts] [-f fmt] [--output=ofmt] [--backing-chain] [--limits] [-t CACHE] [-U] filename")
|
||||
SRST
|
||||
-.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-U] FILENAME
|
||||
+.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-t CACHE] [-U] FILENAME
|
||||
ERST
|
||||
|
||||
DEF("map", img_map,
|
||||
diff --git a/qemu-img.c b/qemu-img.c
|
||||
index 5cdbeda969..a7791896c1 100644
|
||||
--- a/qemu-img.c
|
||||
+++ b/qemu-img.c
|
||||
@@ -3003,6 +3003,7 @@ static gboolean str_equal_func(gconstpointer a, gconstpointer b)
|
||||
static BlockGraphInfoList *collect_image_info_list(bool image_opts,
|
||||
const char *filename,
|
||||
const char *fmt,
|
||||
+ const char *cache,
|
||||
bool chain, bool limits,
|
||||
bool force_share)
|
||||
{
|
||||
@@ -3010,6 +3011,15 @@ static BlockGraphInfoList *collect_image_info_list(bool image_opts,
|
||||
BlockGraphInfoList **tail = &head;
|
||||
GHashTable *filenames;
|
||||
Error *err = NULL;
|
||||
+ int cache_flags = 0;
|
||||
+ bool writethrough = false;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = bdrv_parse_cache_mode(cache, &cache_flags, &writethrough);
|
||||
+ if (ret < 0) {
|
||||
+ error_report("Invalid cache option: %s", cache);
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
|
||||
|
||||
@@ -3026,8 +3036,8 @@ static BlockGraphInfoList *collect_image_info_list(bool image_opts,
|
||||
g_hash_table_insert(filenames, (gpointer)filename, NULL);
|
||||
|
||||
blk = img_open(image_opts, filename, fmt,
|
||||
- BDRV_O_NO_BACKING | BDRV_O_NO_IO, false, false,
|
||||
- force_share);
|
||||
+ BDRV_O_NO_BACKING | BDRV_O_NO_IO | cache_flags,
|
||||
+ writethrough, false, force_share);
|
||||
if (!blk) {
|
||||
goto err;
|
||||
}
|
||||
@@ -3087,6 +3097,7 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
OutputFormat output_format = OFORMAT_HUMAN;
|
||||
bool chain = false;
|
||||
const char *filename, *fmt;
|
||||
+ const char *cache = BDRV_DEFAULT_CACHE;
|
||||
BlockGraphInfoList *list;
|
||||
bool image_opts = false;
|
||||
bool force_share = false;
|
||||
@@ -3099,13 +3110,14 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
{"format", required_argument, 0, 'f'},
|
||||
{"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
|
||||
{"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
|
||||
+ {"cache", required_argument, 0, 't'},
|
||||
{"force-share", no_argument, 0, 'U'},
|
||||
{"limits", no_argument, 0, OPTION_LIMITS},
|
||||
{"output", required_argument, 0, OPTION_OUTPUT},
|
||||
{"object", required_argument, 0, OPTION_OBJECT},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
- c = getopt_long(argc, argv, "hf:U", long_options, NULL);
|
||||
+ c = getopt_long(argc, argv, "hf:t:U", long_options, NULL);
|
||||
if (c == -1) {
|
||||
break;
|
||||
}
|
||||
@@ -3121,6 +3133,8 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
" (incompatible with -f|--format)\n"
|
||||
" --backing-chain\n"
|
||||
" display information about the backing chain for copy-on-write overlays\n"
|
||||
+" -t, --cache CACHE\n"
|
||||
+" cache mode for FILE (default: " BDRV_DEFAULT_CACHE ")\n"
|
||||
" -U, --force-share\n"
|
||||
" open image in shared mode for concurrent access\n"
|
||||
" --limits\n"
|
||||
@@ -3143,6 +3157,9 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
case OPTION_BACKING_CHAIN:
|
||||
chain = true;
|
||||
break;
|
||||
+ case 't':
|
||||
+ cache = optarg;
|
||||
+ break;
|
||||
case 'U':
|
||||
force_share = true;
|
||||
break;
|
||||
@@ -3164,7 +3181,7 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
}
|
||||
filename = argv[optind++];
|
||||
|
||||
- list = collect_image_info_list(image_opts, filename, fmt, chain,
|
||||
+ list = collect_image_info_list(image_opts, filename, fmt, cache, chain,
|
||||
limits, force_share);
|
||||
if (!list) {
|
||||
return 1;
|
||||
--
|
||||
2.52.0
|
||||
|
||||
240
kvm-qemu-img-info-Optionally-show-block-limits.patch
Normal file
240
kvm-qemu-img-info-Optionally-show-block-limits.patch
Normal file
@ -0,0 +1,240 @@
|
||||
From f0a73f74d818259aeef128bd2a230a5db1381994 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Wolf <kwolf@redhat.com>
|
||||
Date: Fri, 24 Oct 2025 14:30:39 +0200
|
||||
Subject: [PATCH 3/6] qemu-img info: Optionally show block limits
|
||||
|
||||
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
||||
RH-MergeRequest: 440: block: Expose block limits in monitor and qemu-img info
|
||||
RH-Jira: RHEL-132989
|
||||
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Commit: [3/4] 86bbedcb5b2cfffd1da1640aff391127e87c7228 (kmwolf/centos-qemu-kvm)
|
||||
|
||||
Add a new --limits option to 'qemu-img info' that displays the block
|
||||
limits for the image and all of its children, making the information
|
||||
more accessible for human users than in QMP. This option is not enabled
|
||||
by default because it can be a lot of output that isn't usually relevant
|
||||
if you're not specifically trying to diagnose some I/O problem.
|
||||
|
||||
This makes the same information automatically also available in HMP
|
||||
'info block -v'.
|
||||
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
|
||||
Message-ID: <20251024123041.51254-4-kwolf@redhat.com>
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
(cherry picked from commit 5b4b3bfdfc28d2398f34194d260d6eef9a9048b4)
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
---
|
||||
block/qapi.c | 34 ++++++++++++++++++++++++++++++++--
|
||||
docs/tools/qemu-img.rst | 6 +++++-
|
||||
include/block/qapi.h | 2 +-
|
||||
qemu-img-cmds.hx | 4 ++--
|
||||
qemu-img.c | 15 ++++++++++++---
|
||||
5 files changed, 52 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/block/qapi.c b/block/qapi.c
|
||||
index 54521d0a68..9f5771e019 100644
|
||||
--- a/block/qapi.c
|
||||
+++ b/block/qapi.c
|
||||
@@ -417,6 +417,7 @@ fail:
|
||||
*/
|
||||
void bdrv_query_block_graph_info(BlockDriverState *bs,
|
||||
BlockGraphInfo **p_info,
|
||||
+ bool limits,
|
||||
Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
@@ -425,7 +426,7 @@ void bdrv_query_block_graph_info(BlockDriverState *bs,
|
||||
BdrvChild *c;
|
||||
|
||||
info = g_new0(BlockGraphInfo, 1);
|
||||
- bdrv_do_query_node_info(bs, qapi_BlockGraphInfo_base(info), false, errp);
|
||||
+ bdrv_do_query_node_info(bs, qapi_BlockGraphInfo_base(info), limits, errp);
|
||||
if (*errp) {
|
||||
goto fail;
|
||||
}
|
||||
@@ -439,7 +440,7 @@ void bdrv_query_block_graph_info(BlockDriverState *bs,
|
||||
QAPI_LIST_APPEND(children_list_tail, c_info);
|
||||
|
||||
c_info->name = g_strdup(c->name);
|
||||
- bdrv_query_block_graph_info(c->bs, &c_info->info, errp);
|
||||
+ bdrv_query_block_graph_info(c->bs, &c_info->info, limits, errp);
|
||||
if (*errp) {
|
||||
goto fail;
|
||||
}
|
||||
@@ -936,6 +937,29 @@ void bdrv_image_info_specific_dump(ImageInfoSpecific *info_spec,
|
||||
visit_free(v);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Dumps the given BlockLimitsInfo object in a human-readable form,
|
||||
+ * prepending an optional prefix if the dump is not empty.
|
||||
+ */
|
||||
+static void bdrv_image_info_limits_dump(BlockLimitsInfo *limits,
|
||||
+ const char *prefix,
|
||||
+ int indentation)
|
||||
+{
|
||||
+ QObject *obj;
|
||||
+ Visitor *v = qobject_output_visitor_new(&obj);
|
||||
+
|
||||
+ visit_type_BlockLimitsInfo(v, NULL, &limits, &error_abort);
|
||||
+ visit_complete(v, &obj);
|
||||
+ if (!qobject_is_empty_dump(obj)) {
|
||||
+ if (prefix) {
|
||||
+ qemu_printf("%*s%s", indentation * 4, "", prefix);
|
||||
+ }
|
||||
+ dump_qobject(indentation + 1, obj);
|
||||
+ }
|
||||
+ qobject_unref(obj);
|
||||
+ visit_free(v);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* Print the given @info object in human-readable form. Every field is indented
|
||||
* using the given @indentation (four spaces per indentation level).
|
||||
@@ -1011,6 +1035,12 @@ void bdrv_node_info_dump(BlockNodeInfo *info, int indentation, bool protocol)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (info->limits) {
|
||||
+ bdrv_image_info_limits_dump(info->limits,
|
||||
+ "Block limits:\n",
|
||||
+ indentation);
|
||||
+ }
|
||||
+
|
||||
if (info->has_snapshots) {
|
||||
SnapshotInfoList *elem;
|
||||
|
||||
diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
|
||||
index 5e7b85079d..fdc9ea9cf2 100644
|
||||
--- a/docs/tools/qemu-img.rst
|
||||
+++ b/docs/tools/qemu-img.rst
|
||||
@@ -503,7 +503,7 @@ Command description:
|
||||
|
||||
The size syntax is similar to :manpage:`dd(1)`'s size syntax.
|
||||
|
||||
-.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [-U] FILENAME
|
||||
+.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-U] FILENAME
|
||||
|
||||
Give information about the disk image *FILENAME*. Use it in
|
||||
particular to know the size reserved on disk which can be different
|
||||
@@ -571,6 +571,10 @@ Command description:
|
||||
``ImageInfoSpecific*`` QAPI object (e.g. ``ImageInfoSpecificQCow2``
|
||||
for qcow2 images).
|
||||
|
||||
+ *Block limits*
|
||||
+ The block limits for I/O that QEMU detected for the image.
|
||||
+ This information is only shown if the ``--limits`` option was specified.
|
||||
+
|
||||
.. option:: map [--object OBJECTDEF] [--image-opts] [-f FMT] [--start-offset=OFFSET] [--max-length=LEN] [--output=OFMT] [-U] FILENAME
|
||||
|
||||
Dump the metadata of image *FILENAME* and its backing file chain.
|
||||
diff --git a/include/block/qapi.h b/include/block/qapi.h
|
||||
index 54c48de26a..be554e53dc 100644
|
||||
--- a/include/block/qapi.h
|
||||
+++ b/include/block/qapi.h
|
||||
@@ -42,7 +42,7 @@ bdrv_query_image_info(BlockDriverState *bs, ImageInfo **p_info, bool flat,
|
||||
bool skip_implicit_filters, Error **errp);
|
||||
void GRAPH_RDLOCK
|
||||
bdrv_query_block_graph_info(BlockDriverState *bs, BlockGraphInfo **p_info,
|
||||
- Error **errp);
|
||||
+ bool limits, Error **errp);
|
||||
|
||||
void bdrv_snapshot_dump(QEMUSnapshotInfo *sn);
|
||||
void bdrv_image_info_specific_dump(ImageInfoSpecific *info_spec,
|
||||
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
|
||||
index 2c5a8a28f9..74b66f9d42 100644
|
||||
--- a/qemu-img-cmds.hx
|
||||
+++ b/qemu-img-cmds.hx
|
||||
@@ -66,9 +66,9 @@ SRST
|
||||
ERST
|
||||
|
||||
DEF("info", img_info,
|
||||
- "info [--object objectdef] [--image-opts] [-f fmt] [--output=ofmt] [--backing-chain] [-U] filename")
|
||||
+ "info [--object objectdef] [--image-opts] [-f fmt] [--output=ofmt] [--backing-chain] [--limits] [-U] filename")
|
||||
SRST
|
||||
-.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [-U] FILENAME
|
||||
+.. option:: info [--object OBJECTDEF] [--image-opts] [-f FMT] [--output=OFMT] [--backing-chain] [--limits] [-U] FILENAME
|
||||
ERST
|
||||
|
||||
DEF("map", img_map,
|
||||
diff --git a/qemu-img.c b/qemu-img.c
|
||||
index 7a162fdc08..5cdbeda969 100644
|
||||
--- a/qemu-img.c
|
||||
+++ b/qemu-img.c
|
||||
@@ -86,6 +86,7 @@ enum {
|
||||
OPTION_BITMAPS = 275,
|
||||
OPTION_FORCE = 276,
|
||||
OPTION_SKIP_BROKEN = 277,
|
||||
+ OPTION_LIMITS = 278,
|
||||
};
|
||||
|
||||
typedef enum OutputFormat {
|
||||
@@ -3002,7 +3003,8 @@ static gboolean str_equal_func(gconstpointer a, gconstpointer b)
|
||||
static BlockGraphInfoList *collect_image_info_list(bool image_opts,
|
||||
const char *filename,
|
||||
const char *fmt,
|
||||
- bool chain, bool force_share)
|
||||
+ bool chain, bool limits,
|
||||
+ bool force_share)
|
||||
{
|
||||
BlockGraphInfoList *head = NULL;
|
||||
BlockGraphInfoList **tail = &head;
|
||||
@@ -3039,7 +3041,7 @@ static BlockGraphInfoList *collect_image_info_list(bool image_opts,
|
||||
* the chain manually here.
|
||||
*/
|
||||
bdrv_graph_rdlock_main_loop();
|
||||
- bdrv_query_block_graph_info(bs, &info, &err);
|
||||
+ bdrv_query_block_graph_info(bs, &info, limits, &err);
|
||||
bdrv_graph_rdunlock_main_loop();
|
||||
|
||||
if (err) {
|
||||
@@ -3088,6 +3090,7 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
BlockGraphInfoList *list;
|
||||
bool image_opts = false;
|
||||
bool force_share = false;
|
||||
+ bool limits = false;
|
||||
|
||||
fmt = NULL;
|
||||
for(;;) {
|
||||
@@ -3097,6 +3100,7 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
{"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
|
||||
{"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
|
||||
{"force-share", no_argument, 0, 'U'},
|
||||
+ {"limits", no_argument, 0, OPTION_LIMITS},
|
||||
{"output", required_argument, 0, OPTION_OUTPUT},
|
||||
{"object", required_argument, 0, OPTION_OBJECT},
|
||||
{0, 0, 0, 0}
|
||||
@@ -3119,6 +3123,8 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
" display information about the backing chain for copy-on-write overlays\n"
|
||||
" -U, --force-share\n"
|
||||
" open image in shared mode for concurrent access\n"
|
||||
+" --limits\n"
|
||||
+" show detected block limits (may depend on options, e.g. cache mode)\n"
|
||||
" --output human|json\n"
|
||||
" specify output format (default: human)\n"
|
||||
" --object OBJDEF\n"
|
||||
@@ -3140,6 +3146,9 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
case 'U':
|
||||
force_share = true;
|
||||
break;
|
||||
+ case OPTION_LIMITS:
|
||||
+ limits = true;
|
||||
+ break;
|
||||
case OPTION_OUTPUT:
|
||||
output_format = parse_output_format(argv[0], optarg);
|
||||
break;
|
||||
@@ -3156,7 +3165,7 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
|
||||
filename = argv[optind++];
|
||||
|
||||
list = collect_image_info_list(image_opts, filename, fmt, chain,
|
||||
- force_share);
|
||||
+ limits, force_share);
|
||||
if (!list) {
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
2.52.0
|
||||
|
||||
@ -149,7 +149,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}:%{version} \
|
||||
Summary: QEMU is a machine emulator and virtualizer
|
||||
Name: qemu-kvm
|
||||
Version: 10.1.0
|
||||
Release: 11%{?rcrel}%{?dist}%{?cc_suffix}
|
||||
Release: 12%{?rcrel}%{?dist}%{?cc_suffix}
|
||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||
# Epoch 15 used for RHEL 8
|
||||
# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5)
|
||||
@ -296,6 +296,18 @@ Patch75: kvm-accel-mshv-use-return-value-of-handle_pio_str_read.patch
|
||||
Patch76: kvm-monitor-generalize-query-mshv-info-mshv-to-query-acc.patch
|
||||
# For RHEL-138240 - QEMU crashes when stopping source VM during live migration [rhel-9]
|
||||
Patch77: kvm-block-Fix-BDS-use-after-free-during-shutdown.patch
|
||||
# For RHEL-132989 - Expose block limits of block nodes in QMP and qemu-img [rhel-9]
|
||||
Patch78: kvm-block-Improve-comments-in-BlockLimits.patch
|
||||
# For RHEL-132989 - Expose block limits of block nodes in QMP and qemu-img [rhel-9]
|
||||
Patch79: kvm-block-Expose-block-limits-for-images-in-QMP.patch
|
||||
# For RHEL-132989 - Expose block limits of block nodes in QMP and qemu-img [rhel-9]
|
||||
Patch80: kvm-qemu-img-info-Optionally-show-block-limits.patch
|
||||
# For RHEL-132989 - Expose block limits of block nodes in QMP and qemu-img [rhel-9]
|
||||
Patch81: kvm-qemu-img-info-Add-cache-mode-option.patch
|
||||
# For RHEL-140187 - Intel IOMMU VM freezes: "call_irq_handler: 3.37 No irq handler for vector"[rhel-9.8]
|
||||
Patch82: kvm-hw-intc-ioapic-Fix-ACCEL_KERNEL_GSI_IRQFD_POSSIBLE-t.patch
|
||||
# For RHEL-139057 - [qemu, rhel-9] increase default TSEG size
|
||||
Patch83: kvm-q35-increase-default-tseg-size.patch
|
||||
|
||||
|
||||
# For RHEL-11424 - [IBM 9.6 FEAT] KVM: Full boot order support - qemu part
|
||||
@ -2010,6 +2022,20 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Jan 27 2026 Jon Maloy <jmaloy@redhat.com> - 10.1.0-12
|
||||
- kvm-block-Improve-comments-in-BlockLimits.patch [RHEL-132989]
|
||||
- kvm-block-Expose-block-limits-for-images-in-QMP.patch [RHEL-132989]
|
||||
- kvm-qemu-img-info-Optionally-show-block-limits.patch [RHEL-132989]
|
||||
- kvm-qemu-img-info-Add-cache-mode-option.patch [RHEL-132989]
|
||||
- kvm-hw-intc-ioapic-Fix-ACCEL_KERNEL_GSI_IRQFD_POSSIBLE-t.patch [RHEL-140187]
|
||||
- kvm-q35-increase-default-tseg-size.patch [RHEL-139057]
|
||||
- Resolves: RHEL-132989
|
||||
(Expose block limits of block nodes in QMP and qemu-img [rhel-9])
|
||||
- Resolves: RHEL-140187
|
||||
(Intel IOMMU VM freezes: "call_irq_handler: 3.37 No irq handler for vector"[rhel-9.8])
|
||||
- Resolves: RHEL-139057
|
||||
([qemu, rhel-9] increase default TSEG size)
|
||||
|
||||
* Mon Jan 19 2026 Jon Maloy <jmaloy@redhat.com> - 10.1.0-11
|
||||
- kvm-block-Fix-BDS-use-after-free-during-shutdown.patch [RHEL-138240]
|
||||
- Resolves: RHEL-138240
|
||||
|
||||
Loading…
Reference in New Issue
Block a user