* [PULL 0/8] Block patches
@ 2021-05-24 13:01 Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 1/8] multi-process: Initialize variables declared with g_auto* Stefan Hajnoczi
` (8 more replies)
0 siblings, 9 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi
The following changes since commit 6c769690ac845fa62642a5f93b4e4bd906adab95:
Merge remote-tracking branch 'remotes/vsementsov/tags/pull-simplebench-2021-05-04' into staging (2021-05-21 12:02:34 +0100)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 0a6f0c76a030710780ce10d6347a70f098024d21:
coroutine-sleep: introduce qemu_co_sleep (2021-05-21 18:22:33 +0100)
----------------------------------------------------------------
Pull request
(Resent due to an email preparation mistake.)
----------------------------------------------------------------
Paolo Bonzini (6):
coroutine-sleep: use a stack-allocated timer
coroutine-sleep: disallow NULL QemuCoSleepState** argument
coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing
coroutine-sleep: move timer out of QemuCoSleepState
coroutine-sleep: replace QemuCoSleepState pointer with struct in the
API
coroutine-sleep: introduce qemu_co_sleep
Philippe Mathieu-Daudé (1):
bitops.h: Improve find_xxx_bit() documentation
Zenghui Yu (1):
multi-process: Initialize variables declared with g_auto*
include/qemu/bitops.h | 15 ++++++--
include/qemu/coroutine.h | 27 ++++++++-----
block/block-copy.c | 10 ++---
block/nbd.c | 14 +++----
hw/remote/memory.c | 5 +--
hw/remote/proxy.c | 3 +-
util/qemu-coroutine-sleep.c | 75 +++++++++++++++++++------------------
7 files changed, 79 insertions(+), 70 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PULL 1/8] multi-process: Initialize variables declared with g_auto*
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 2/8] bitops.h: Improve find_xxx_bit() documentation Stefan Hajnoczi
` (7 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Philippe Mathieu-Daudé,
Max Reitz, Stefan Hajnoczi, Zenghui Yu, Miroslav Rezanina
From: Zenghui Yu <yuzenghui@huawei.com>
Quote docs/devel/style.rst (section "Automatic memory deallocation"):
* Variables declared with g_auto* MUST always be initialized,
otherwise the cleanup function will use uninitialized stack memory
Initialize @name properly to get rid of the compilation error (using
gcc-7.3.0 on CentOS):
../hw/remote/proxy.c: In function 'pci_proxy_dev_realize':
/usr/include/glib-2.0/glib/glib-autocleanups.h:28:3: error: 'name' may be used uninitialized in this function [-Werror=maybe-uninitialized]
g_free (*pp);
^~~~~~~~~~~~
../hw/remote/proxy.c:350:30: note: 'name' was declared here
g_autofree char *name;
^~~~
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Reviewed-by: Jagannathan Raman <jag.raman@oracle.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Miroslav Rezanina <mrezanin@redhat.com>
Message-id: 20210312112143.1369-1-yuzenghui@huawei.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
hw/remote/memory.c | 5 ++---
hw/remote/proxy.c | 3 +--
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/hw/remote/memory.c b/hw/remote/memory.c
index 2d4174614a..472ed2a272 100644
--- a/hw/remote/memory.c
+++ b/hw/remote/memory.c
@@ -41,10 +41,9 @@ void remote_sysmem_reconfig(MPQemuMsg *msg, Error **errp)
remote_sysmem_reset();
- for (region = 0; region < msg->num_fds; region++) {
- g_autofree char *name;
+ for (region = 0; region < msg->num_fds; region++, suffix++) {
+ g_autofree char *name = g_strdup_printf("remote-mem-%u", suffix);
subregion = g_new(MemoryRegion, 1);
- name = g_strdup_printf("remote-mem-%u", suffix++);
memory_region_init_ram_from_fd(subregion, NULL,
name, sysmem_info->sizes[region],
true, msg->fds[region],
diff --git a/hw/remote/proxy.c b/hw/remote/proxy.c
index 4fa4be079d..6dda705fc2 100644
--- a/hw/remote/proxy.c
+++ b/hw/remote/proxy.c
@@ -347,13 +347,12 @@ static void probe_pci_info(PCIDevice *dev, Error **errp)
PCI_BASE_ADDRESS_SPACE_IO : PCI_BASE_ADDRESS_SPACE_MEMORY;
if (size) {
- g_autofree char *name;
+ g_autofree char *name = g_strdup_printf("bar-region-%d", i);
pdev->region[i].dev = pdev;
pdev->region[i].present = true;
if (type == PCI_BASE_ADDRESS_SPACE_MEMORY) {
pdev->region[i].memory = true;
}
- name = g_strdup_printf("bar-region-%d", i);
memory_region_init_io(&pdev->region[i].mr, OBJECT(pdev),
&proxy_mr_ops, &pdev->region[i],
name, size);
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 2/8] bitops.h: Improve find_xxx_bit() documentation
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 1/8] multi-process: Initialize variables declared with g_auto* Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 3/8] coroutine-sleep: use a stack-allocated timer Stefan Hajnoczi
` (6 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Philippe Mathieu-Daudé,
Richard Henderson, Max Reitz, Stefan Hajnoczi
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Document the following functions return the bitmap size
if no matching bit is found:
- find_first_bit
- find_next_bit
- find_last_bit
- find_first_zero_bit
- find_next_zero_bit
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20210510200758.2623154-2-philmd@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/bitops.h | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
index 3acbf3384c..a72f69fea8 100644
--- a/include/qemu/bitops.h
+++ b/include/qemu/bitops.h
@@ -140,7 +140,8 @@ static inline int test_bit(long nr, const unsigned long *addr)
* @addr: The address to start the search at
* @size: The maximum size to search
*
- * Returns the bit number of the first set bit, or size.
+ * Returns the bit number of the last set bit,
+ * or @size if there is no set bit in the bitmap.
*/
unsigned long find_last_bit(const unsigned long *addr,
unsigned long size);
@@ -150,6 +151,9 @@ unsigned long find_last_bit(const unsigned long *addr,
* @addr: The address to base the search on
* @offset: The bitnumber to start searching at
* @size: The bitmap size in bits
+ *
+ * Returns the bit number of the next set bit,
+ * or @size if there are no further set bits in the bitmap.
*/
unsigned long find_next_bit(const unsigned long *addr,
unsigned long size,
@@ -160,6 +164,9 @@ unsigned long find_next_bit(const unsigned long *addr,
* @addr: The address to base the search on
* @offset: The bitnumber to start searching at
* @size: The bitmap size in bits
+ *
+ * Returns the bit number of the next cleared bit,
+ * or @size if there are no further clear bits in the bitmap.
*/
unsigned long find_next_zero_bit(const unsigned long *addr,
@@ -171,7 +178,8 @@ unsigned long find_next_zero_bit(const unsigned long *addr,
* @addr: The address to start the search at
* @size: The maximum size to search
*
- * Returns the bit number of the first set bit.
+ * Returns the bit number of the first set bit,
+ * or @size if there is no set bit in the bitmap.
*/
static inline unsigned long find_first_bit(const unsigned long *addr,
unsigned long size)
@@ -194,7 +202,8 @@ static inline unsigned long find_first_bit(const unsigned long *addr,
* @addr: The address to start the search at
* @size: The maximum size to search
*
- * Returns the bit number of the first cleared bit.
+ * Returns the bit number of the first cleared bit,
+ * or @size if there is no clear bit in the bitmap.
*/
static inline unsigned long find_first_zero_bit(const unsigned long *addr,
unsigned long size)
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 3/8] coroutine-sleep: use a stack-allocated timer
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 1/8] multi-process: Initialize variables declared with g_auto* Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 2/8] bitops.h: Improve find_xxx_bit() documentation Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 4/8] coroutine-sleep: disallow NULL QemuCoSleepState** argument Stefan Hajnoczi
` (5 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
The lifetime of the timer is well-known (it cannot outlive
qemu_co_sleep_ns_wakeable, because it's deleted by the time the
coroutine resumes), so it is not necessary to place it on the heap.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-2-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
util/qemu-coroutine-sleep.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 8c4dac4fd7..eec6e81f3f 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -21,7 +21,7 @@ static const char *qemu_co_sleep_ns__scheduled = "qemu_co_sleep_ns";
struct QemuCoSleepState {
Coroutine *co;
- QEMUTimer *ts;
+ QEMUTimer ts;
QemuCoSleepState **user_state_pointer;
};
@@ -35,7 +35,7 @@ void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
if (sleep_state->user_state_pointer) {
*sleep_state->user_state_pointer = NULL;
}
- timer_del(sleep_state->ts);
+ timer_del(&sleep_state->ts);
aio_co_wake(sleep_state->co);
}
@@ -50,7 +50,6 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
AioContext *ctx = qemu_get_current_aio_context();
QemuCoSleepState state = {
.co = qemu_coroutine_self(),
- .ts = aio_timer_new(ctx, type, SCALE_NS, co_sleep_cb, &state),
.user_state_pointer = sleep_state,
};
@@ -63,10 +62,11 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
abort();
}
+ aio_timer_init(ctx, &state.ts, type, SCALE_NS, co_sleep_cb, &state);
if (sleep_state) {
*sleep_state = &state;
}
- timer_mod(state.ts, qemu_clock_get_ns(type) + ns);
+ timer_mod(&state.ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
if (sleep_state) {
/*
@@ -75,5 +75,4 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
*/
assert(*sleep_state == NULL);
}
- timer_free(state.ts);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 4/8] coroutine-sleep: disallow NULL QemuCoSleepState** argument
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (2 preceding siblings ...)
2021-05-24 13:01 ` [PULL 3/8] coroutine-sleep: use a stack-allocated timer Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 5/8] coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing Stefan Hajnoczi
` (4 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Simplify the code by removing conditionals. qemu_co_sleep_ns
can simply point the argument to an on-stack temporary.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-3-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/coroutine.h | 5 +++--
util/qemu-coroutine-sleep.c | 18 +++++-------------
2 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index ce5b9c6851..c5d7742989 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -295,7 +295,7 @@ typedef struct QemuCoSleepState QemuCoSleepState;
/**
* Yield the coroutine for a given duration. During this yield, @sleep_state
- * (if not NULL) is set to an opaque pointer, which may be used for
+ * is set to an opaque pointer, which may be used for
* qemu_co_sleep_wake(). Be careful, the pointer is set back to zero when the
* timer fires. Don't save the obtained value to other variables and don't call
* qemu_co_sleep_wake from another aio context.
@@ -304,7 +304,8 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
QemuCoSleepState **sleep_state);
static inline void coroutine_fn qemu_co_sleep_ns(QEMUClockType type, int64_t ns)
{
- qemu_co_sleep_ns_wakeable(type, ns, NULL);
+ QemuCoSleepState *unused = NULL;
+ qemu_co_sleep_ns_wakeable(type, ns, &unused);
}
/**
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index eec6e81f3f..3f6f637e81 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -32,9 +32,7 @@ void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
qemu_co_sleep_ns__scheduled, NULL);
assert(scheduled == qemu_co_sleep_ns__scheduled);
- if (sleep_state->user_state_pointer) {
- *sleep_state->user_state_pointer = NULL;
- }
+ *sleep_state->user_state_pointer = NULL;
timer_del(&sleep_state->ts);
aio_co_wake(sleep_state->co);
}
@@ -63,16 +61,10 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
}
aio_timer_init(ctx, &state.ts, type, SCALE_NS, co_sleep_cb, &state);
- if (sleep_state) {
- *sleep_state = &state;
- }
+ *sleep_state = &state;
timer_mod(&state.ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
- if (sleep_state) {
- /*
- * Note that *sleep_state is cleared during qemu_co_sleep_wake
- * before resuming this coroutine.
- */
- assert(*sleep_state == NULL);
- }
+
+ /* qemu_co_sleep_wake clears *sleep_state before resuming this coroutine. */
+ assert(*sleep_state == NULL);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 5/8] coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (3 preceding siblings ...)
2021-05-24 13:01 ` [PULL 4/8] coroutine-sleep: disallow NULL QemuCoSleepState** argument Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 6/8] coroutine-sleep: move timer out of QemuCoSleepState Stefan Hajnoczi
` (3 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
All callers of qemu_co_sleep_wake are checking whether they are passing
a NULL argument inside the pointer-to-pointer: do the check in
qemu_co_sleep_wake itself.
As a side effect, qemu_co_sleep_wake can be called more than once and
it will only wake the coroutine once; after the first time, the argument
will be set to NULL via *sleep_state->user_state_pointer. However, this
would not be safe unless co_sleep_cb keeps using the QemuCoSleepState*
directly, so make it go through the pointer-to-pointer instead.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-4-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
block/block-copy.c | 4 +---
block/nbd.c | 8 ++------
util/qemu-coroutine-sleep.c | 21 ++++++++++++---------
3 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/block/block-copy.c b/block/block-copy.c
index 9b4af00614..f896dc56f2 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -674,9 +674,7 @@ out:
void block_copy_kick(BlockCopyCallState *call_state)
{
- if (call_state->sleep_state) {
- qemu_co_sleep_wake(call_state->sleep_state);
- }
+ qemu_co_sleep_wake(call_state->sleep_state);
}
/*
diff --git a/block/nbd.c b/block/nbd.c
index 1d4668d42d..1c6315b168 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -289,9 +289,7 @@ static void coroutine_fn nbd_client_co_drain_begin(BlockDriverState *bs)
BDRVNBDState *s = (BDRVNBDState *)bs->opaque;
s->drained = true;
- if (s->connection_co_sleep_ns_state) {
- qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
- }
+ qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
nbd_co_establish_connection_cancel(bs, false);
@@ -330,9 +328,7 @@ static void nbd_teardown_connection(BlockDriverState *bs)
s->state = NBD_CLIENT_QUIT;
if (s->connection_co) {
- if (s->connection_co_sleep_ns_state) {
- qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
- }
+ qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
nbd_co_establish_connection_cancel(bs, true);
}
if (qemu_in_coroutine()) {
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 3f6f637e81..3ae2b5399a 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -27,19 +27,22 @@ struct QemuCoSleepState {
void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
{
- /* Write of schedule protected by barrier write in aio_co_schedule */
- const char *scheduled = qatomic_cmpxchg(&sleep_state->co->scheduled,
- qemu_co_sleep_ns__scheduled, NULL);
+ if (sleep_state) {
+ /* Write of schedule protected by barrier write in aio_co_schedule */
+ const char *scheduled = qatomic_cmpxchg(&sleep_state->co->scheduled,
+ qemu_co_sleep_ns__scheduled, NULL);
- assert(scheduled == qemu_co_sleep_ns__scheduled);
- *sleep_state->user_state_pointer = NULL;
- timer_del(&sleep_state->ts);
- aio_co_wake(sleep_state->co);
+ assert(scheduled == qemu_co_sleep_ns__scheduled);
+ *sleep_state->user_state_pointer = NULL;
+ timer_del(&sleep_state->ts);
+ aio_co_wake(sleep_state->co);
+ }
}
static void co_sleep_cb(void *opaque)
{
- qemu_co_sleep_wake(opaque);
+ QemuCoSleepState **sleep_state = opaque;
+ qemu_co_sleep_wake(*sleep_state);
}
void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
@@ -60,7 +63,7 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
abort();
}
- aio_timer_init(ctx, &state.ts, type, SCALE_NS, co_sleep_cb, &state);
+ aio_timer_init(ctx, &state.ts, type, SCALE_NS, co_sleep_cb, sleep_state);
*sleep_state = &state;
timer_mod(&state.ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 6/8] coroutine-sleep: move timer out of QemuCoSleepState
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (4 preceding siblings ...)
2021-05-24 13:01 ` [PULL 5/8] coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 7/8] coroutine-sleep: replace QemuCoSleepState pointer with struct in the API Stefan Hajnoczi
` (2 subsequent siblings)
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
This simplification is enabled by the previous patch. Now aio_co_wake
will only be called once, therefore we do not care about a spurious
firing of the timer after a qemu_co_sleep_wake.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-5-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
util/qemu-coroutine-sleep.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 3ae2b5399a..1d25019620 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -21,7 +21,6 @@ static const char *qemu_co_sleep_ns__scheduled = "qemu_co_sleep_ns";
struct QemuCoSleepState {
Coroutine *co;
- QEMUTimer ts;
QemuCoSleepState **user_state_pointer;
};
@@ -34,7 +33,6 @@ void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
assert(scheduled == qemu_co_sleep_ns__scheduled);
*sleep_state->user_state_pointer = NULL;
- timer_del(&sleep_state->ts);
aio_co_wake(sleep_state->co);
}
}
@@ -49,6 +47,7 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
QemuCoSleepState **sleep_state)
{
AioContext *ctx = qemu_get_current_aio_context();
+ QEMUTimer ts;
QemuCoSleepState state = {
.co = qemu_coroutine_self(),
.user_state_pointer = sleep_state,
@@ -63,10 +62,11 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
abort();
}
- aio_timer_init(ctx, &state.ts, type, SCALE_NS, co_sleep_cb, sleep_state);
+ aio_timer_init(ctx, &ts, type, SCALE_NS, co_sleep_cb, sleep_state);
*sleep_state = &state;
- timer_mod(&state.ts, qemu_clock_get_ns(type) + ns);
+ timer_mod(&ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
+ timer_del(&ts);
/* qemu_co_sleep_wake clears *sleep_state before resuming this coroutine. */
assert(*sleep_state == NULL);
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 7/8] coroutine-sleep: replace QemuCoSleepState pointer with struct in the API
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (5 preceding siblings ...)
2021-05-24 13:01 ` [PULL 6/8] coroutine-sleep: move timer out of QemuCoSleepState Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 8/8] coroutine-sleep: introduce qemu_co_sleep Stefan Hajnoczi
2021-05-24 18:01 ` [PULL 0/8] Block patches Peter Maydell
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Right now, users of qemu_co_sleep_ns_wakeable are simply passing
a pointer to QemuCoSleepState by reference to the function. But
QemuCoSleepState really is just a Coroutine*; making the
content of the struct public is just as efficient and lets us
skip the user_state_pointer indirection.
Since the usage is changed, take the occasion to rename the
struct to QemuCoSleep.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-6-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/coroutine.h | 23 +++++++++++----------
block/block-copy.c | 8 ++++----
block/nbd.c | 10 ++++-----
util/qemu-coroutine-sleep.c | 41 ++++++++++++++++---------------------
4 files changed, 39 insertions(+), 43 deletions(-)
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index c5d7742989..82c0671f80 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -291,21 +291,22 @@ void qemu_co_rwlock_wrlock(CoRwlock *lock);
*/
void qemu_co_rwlock_unlock(CoRwlock *lock);
-typedef struct QemuCoSleepState QemuCoSleepState;
+typedef struct QemuCoSleep {
+ Coroutine *to_wake;
+} QemuCoSleep;
/**
- * Yield the coroutine for a given duration. During this yield, @sleep_state
- * is set to an opaque pointer, which may be used for
- * qemu_co_sleep_wake(). Be careful, the pointer is set back to zero when the
- * timer fires. Don't save the obtained value to other variables and don't call
- * qemu_co_sleep_wake from another aio context.
+ * Yield the coroutine for a given duration. Initializes @w so that,
+ * during this yield, it can be passed to qemu_co_sleep_wake() to
+ * terminate the sleep.
*/
-void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
- QemuCoSleepState **sleep_state);
+void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
+ QEMUClockType type, int64_t ns);
+
static inline void coroutine_fn qemu_co_sleep_ns(QEMUClockType type, int64_t ns)
{
- QemuCoSleepState *unused = NULL;
- qemu_co_sleep_ns_wakeable(type, ns, &unused);
+ QemuCoSleep w = { 0 };
+ qemu_co_sleep_ns_wakeable(&w, type, ns);
}
/**
@@ -314,7 +315,7 @@ static inline void coroutine_fn qemu_co_sleep_ns(QEMUClockType type, int64_t ns)
* qemu_co_sleep_ns() and should be checked to be non-NULL before calling
* qemu_co_sleep_wake().
*/
-void qemu_co_sleep_wake(QemuCoSleepState *sleep_state);
+void qemu_co_sleep_wake(QemuCoSleep *w);
/**
* Yield until a file descriptor becomes readable
diff --git a/block/block-copy.c b/block/block-copy.c
index f896dc56f2..c2e5090412 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -50,7 +50,7 @@ typedef struct BlockCopyCallState {
/* State */
int ret;
bool finished;
- QemuCoSleepState *sleep_state;
+ QemuCoSleep sleep;
bool cancelled;
/* OUT parameters */
@@ -625,8 +625,8 @@ block_copy_dirty_clusters(BlockCopyCallState *call_state)
if (ns > 0) {
block_copy_task_end(task, -EAGAIN);
g_free(task);
- qemu_co_sleep_ns_wakeable(QEMU_CLOCK_REALTIME, ns,
- &call_state->sleep_state);
+ qemu_co_sleep_ns_wakeable(&call_state->sleep,
+ QEMU_CLOCK_REALTIME, ns);
continue;
}
}
@@ -674,7 +674,7 @@ out:
void block_copy_kick(BlockCopyCallState *call_state)
{
- qemu_co_sleep_wake(call_state->sleep_state);
+ qemu_co_sleep_wake(&call_state->sleep);
}
/*
diff --git a/block/nbd.c b/block/nbd.c
index 1c6315b168..616f9ae6c4 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -116,7 +116,7 @@ typedef struct BDRVNBDState {
CoQueue free_sema;
Coroutine *connection_co;
Coroutine *teardown_co;
- QemuCoSleepState *connection_co_sleep_ns_state;
+ QemuCoSleep reconnect_sleep;
bool drained;
bool wait_drained_end;
int in_flight;
@@ -289,7 +289,7 @@ static void coroutine_fn nbd_client_co_drain_begin(BlockDriverState *bs)
BDRVNBDState *s = (BDRVNBDState *)bs->opaque;
s->drained = true;
- qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
+ qemu_co_sleep_wake(&s->reconnect_sleep);
nbd_co_establish_connection_cancel(bs, false);
@@ -328,7 +328,7 @@ static void nbd_teardown_connection(BlockDriverState *bs)
s->state = NBD_CLIENT_QUIT;
if (s->connection_co) {
- qemu_co_sleep_wake(s->connection_co_sleep_ns_state);
+ qemu_co_sleep_wake(&s->reconnect_sleep);
nbd_co_establish_connection_cancel(bs, true);
}
if (qemu_in_coroutine()) {
@@ -685,8 +685,8 @@ static coroutine_fn void nbd_co_reconnect_loop(BDRVNBDState *s)
}
bdrv_inc_in_flight(s->bs);
} else {
- qemu_co_sleep_ns_wakeable(QEMU_CLOCK_REALTIME, timeout,
- &s->connection_co_sleep_ns_state);
+ qemu_co_sleep_ns_wakeable(&s->reconnect_sleep,
+ QEMU_CLOCK_REALTIME, timeout);
if (s->drained) {
continue;
}
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 1d25019620..89c3b758c5 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -19,42 +19,37 @@
static const char *qemu_co_sleep_ns__scheduled = "qemu_co_sleep_ns";
-struct QemuCoSleepState {
+void qemu_co_sleep_wake(QemuCoSleep *w)
+{
Coroutine *co;
- QemuCoSleepState **user_state_pointer;
-};
-void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
-{
- if (sleep_state) {
+ co = w->to_wake;
+ w->to_wake = NULL;
+ if (co) {
/* Write of schedule protected by barrier write in aio_co_schedule */
- const char *scheduled = qatomic_cmpxchg(&sleep_state->co->scheduled,
+ const char *scheduled = qatomic_cmpxchg(&co->scheduled,
qemu_co_sleep_ns__scheduled, NULL);
assert(scheduled == qemu_co_sleep_ns__scheduled);
- *sleep_state->user_state_pointer = NULL;
- aio_co_wake(sleep_state->co);
+ aio_co_wake(co);
}
}
static void co_sleep_cb(void *opaque)
{
- QemuCoSleepState **sleep_state = opaque;
- qemu_co_sleep_wake(*sleep_state);
+ QemuCoSleep *w = opaque;
+ qemu_co_sleep_wake(w);
}
-void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
- QemuCoSleepState **sleep_state)
+void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
+ QEMUClockType type, int64_t ns)
{
+ Coroutine *co = qemu_coroutine_self();
AioContext *ctx = qemu_get_current_aio_context();
QEMUTimer ts;
- QemuCoSleepState state = {
- .co = qemu_coroutine_self(),
- .user_state_pointer = sleep_state,
- };
- const char *scheduled = qatomic_cmpxchg(&state.co->scheduled, NULL,
- qemu_co_sleep_ns__scheduled);
+ const char *scheduled = qatomic_cmpxchg(&co->scheduled, NULL,
+ qemu_co_sleep_ns__scheduled);
if (scheduled) {
fprintf(stderr,
"%s: Co-routine was already scheduled in '%s'\n",
@@ -62,12 +57,12 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
abort();
}
- aio_timer_init(ctx, &ts, type, SCALE_NS, co_sleep_cb, sleep_state);
- *sleep_state = &state;
+ w->to_wake = co;
+ aio_timer_init(ctx, &ts, type, SCALE_NS, co_sleep_cb, w),
timer_mod(&ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
timer_del(&ts);
- /* qemu_co_sleep_wake clears *sleep_state before resuming this coroutine. */
- assert(*sleep_state == NULL);
+ /* w->to_wake is cleared before resuming this coroutine. */
+ assert(w->to_wake == NULL);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PULL 8/8] coroutine-sleep: introduce qemu_co_sleep
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (6 preceding siblings ...)
2021-05-24 13:01 ` [PULL 7/8] coroutine-sleep: replace QemuCoSleepState pointer with struct in the API Stefan Hajnoczi
@ 2021-05-24 13:01 ` Stefan Hajnoczi
2021-05-24 18:01 ` [PULL 0/8] Block patches Peter Maydell
8 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2021-05-24 13:01 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, qemu-block, John G Johnson, John Snow,
Max Reitz, Stefan Hajnoczi, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Allow using QemuCoSleep to sleep forever until woken by qemu_co_sleep_wake.
This makes the logic of qemu_co_sleep_ns_wakeable easy to understand.
In the future we will introduce an API that can work even if the
sleep and wake happen from different threads. For now, initializing
w->to_wake after timer_mod is fine because the timer can only fire in
the same AioContext.
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20210517100548.28806-7-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/coroutine.h | 5 +++++
util/qemu-coroutine-sleep.c | 26 +++++++++++++++++++-------
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index 82c0671f80..292e61aef0 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -303,6 +303,11 @@ typedef struct QemuCoSleep {
void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
QEMUClockType type, int64_t ns);
+/**
+ * Yield the coroutine until the next call to qemu_co_sleep_wake.
+ */
+void coroutine_fn qemu_co_sleep(QemuCoSleep *w);
+
static inline void coroutine_fn qemu_co_sleep_ns(QEMUClockType type, int64_t ns)
{
QemuCoSleep w = { 0 };
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 89c3b758c5..571ab521ff 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -41,12 +41,9 @@ static void co_sleep_cb(void *opaque)
qemu_co_sleep_wake(w);
}
-void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
- QEMUClockType type, int64_t ns)
+void coroutine_fn qemu_co_sleep(QemuCoSleep *w)
{
Coroutine *co = qemu_coroutine_self();
- AioContext *ctx = qemu_get_current_aio_context();
- QEMUTimer ts;
const char *scheduled = qatomic_cmpxchg(&co->scheduled, NULL,
qemu_co_sleep_ns__scheduled);
@@ -58,11 +55,26 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
}
w->to_wake = co;
- aio_timer_init(ctx, &ts, type, SCALE_NS, co_sleep_cb, w),
- timer_mod(&ts, qemu_clock_get_ns(type) + ns);
qemu_coroutine_yield();
- timer_del(&ts);
/* w->to_wake is cleared before resuming this coroutine. */
assert(w->to_wake == NULL);
}
+
+void coroutine_fn qemu_co_sleep_ns_wakeable(QemuCoSleep *w,
+ QEMUClockType type, int64_t ns)
+{
+ AioContext *ctx = qemu_get_current_aio_context();
+ QEMUTimer ts;
+
+ aio_timer_init(ctx, &ts, type, SCALE_NS, co_sleep_cb, w);
+ timer_mod(&ts, qemu_clock_get_ns(type) + ns);
+
+ /*
+ * The timer will fire in the current AiOContext, so the callback
+ * must happen after qemu_co_sleep yields and there is no race
+ * between timer_mod and qemu_co_sleep.
+ */
+ qemu_co_sleep(w);
+ timer_del(&ts);
+}
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PULL 0/8] Block patches
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
` (7 preceding siblings ...)
2021-05-24 13:01 ` [PULL 8/8] coroutine-sleep: introduce qemu_co_sleep Stefan Hajnoczi
@ 2021-05-24 18:01 ` Peter Maydell
8 siblings, 0 replies; 17+ messages in thread
From: Peter Maydell @ 2021-05-24 18:01 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Kevin Wolf, Elena Ufimtseva, Vladimir Sementsov-Ogievskiy,
Jagannathan Raman, Qemu-block, John G Johnson, John Snow,
QEMU Developers, Max Reitz
On Mon, 24 May 2021 at 14:02, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit 6c769690ac845fa62642a5f93b4e4bd906adab95:
>
> Merge remote-tracking branch 'remotes/vsementsov/tags/pull-simplebench-2021-05-04' into staging (2021-05-21 12:02:34 +0100)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 0a6f0c76a030710780ce10d6347a70f098024d21:
>
> coroutine-sleep: introduce qemu_co_sleep (2021-05-21 18:22:33 +0100)
>
> ----------------------------------------------------------------
> Pull request
>
> (Resent due to an email preparation mistake.)
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/6.1
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PULL 0/8] Block patches
@ 2023-08-24 16:58 Stefan Hajnoczi
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2023-08-24 16:58 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Thomas Huth, Marc-André Lureau, Kevin Wolf,
Juan Quintela, Fam Zheng, Paolo Bonzini, Laurent Vivier,
Stefan Hajnoczi, Marcel Apfelbaum, John Snow, Jeuk Kim,
Hanna Reitz, Leonardo Bras, qemu-block,
Philippe Mathieu-Daudé,
Vladimir Sementsov-Ogievskiy, Daniel P. Berrangé,
Michael S. Tsirkin
The following changes since commit b0dd9a7d6dd15a6898e9c585b521e6bec79b25aa:
Open 8.2 development tree (2023-08-22 07:14:07 -0700)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 892470a8de848a685acb67ba739485424efc3aed:
tests/qemu-iotests/197: add testcase for CoR with subclusters (2023-08-24 10:28:50 -0400)
----------------------------------------------------------------
Pull request
First block pull request for the QEMU 8.2 release cycle.
----------------------------------------------------------------
Andrey Drobyshev via (3):
block: add subcluster_size field to BlockDriverInfo
block/io: align requests to subcluster_size
tests/qemu-iotests/197: add testcase for CoR with subclusters
Fabiano Rosas (1):
block-migration: Ensure we don't crash during migration cleanup
Jeuk Kim (4):
hw/ufs: Initial commit for emulated Universal-Flash-Storage
hw/ufs: Support for Query Transfer Requests
hw/ufs: Support for UFS logical unit
tests/qtest: Introduce tests for UFS
MAINTAINERS | 7 +
docs/specs/pci-ids.rst | 2 +
meson.build | 1 +
hw/ufs/trace.h | 1 +
hw/ufs/ufs.h | 131 +++
include/block/block-common.h | 5 +
include/block/block-io.h | 8 +-
include/block/ufs.h | 1090 +++++++++++++++++++++++++
include/hw/pci/pci.h | 1 +
include/hw/pci/pci_ids.h | 1 +
include/scsi/constants.h | 1 +
block.c | 7 +
block/io.c | 50 +-
block/mirror.c | 8 +-
block/qcow2.c | 1 +
hw/ufs/lu.c | 1445 ++++++++++++++++++++++++++++++++
hw/ufs/ufs.c | 1494 ++++++++++++++++++++++++++++++++++
migration/block.c | 11 +-
tests/qtest/ufs-test.c | 584 +++++++++++++
hw/Kconfig | 1 +
hw/meson.build | 1 +
hw/ufs/Kconfig | 4 +
hw/ufs/meson.build | 1 +
hw/ufs/trace-events | 58 ++
tests/qemu-iotests/197 | 29 +
tests/qemu-iotests/197.out | 24 +
tests/qtest/meson.build | 1 +
27 files changed, 4932 insertions(+), 35 deletions(-)
create mode 100644 hw/ufs/trace.h
create mode 100644 hw/ufs/ufs.h
create mode 100644 include/block/ufs.h
create mode 100644 hw/ufs/lu.c
create mode 100644 hw/ufs/ufs.c
create mode 100644 tests/qtest/ufs-test.c
create mode 100644 hw/ufs/Kconfig
create mode 100644 hw/ufs/meson.build
create mode 100644 hw/ufs/trace-events
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PULL 0/8] Block patches
2023-06-01 15:25 Stefan Hajnoczi
@ 2023-06-01 21:29 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 21:29 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel
On 6/1/23 08:25, Stefan Hajnoczi wrote:
> The following changes since commit c6a5fc2ac76c5ab709896ee1b0edd33685a67ed1:
>
> decodetree: Add --output-null for meson testing (2023-05-31 19:56:42 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 98b126f5e3228a346c774e569e26689943b401dd:
>
> qapi: add '@fdset' feature for BlockdevOptionsVirtioBlkVhostVdpa (2023-06-01 11:08:21 -0400)
>
> ----------------------------------------------------------------
> Pull request
>
> - Stefano Garzarella's blkio block driver 'fd' parameter
> - My thread-local blk_io_plug() series
Applied, thanks. Please update https://wiki.qemu.org/ChangeLog/8.1 as appropriate.
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PULL 0/8] Block patches
@ 2023-06-01 15:25 Stefan Hajnoczi
2023-06-01 21:29 ` Richard Henderson
0 siblings, 1 reply; 17+ messages in thread
From: Stefan Hajnoczi @ 2023-06-01 15:25 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-block, Stefano Stabellini, Aarushi Mehta, Anthony Perard,
Thomas Huth, Julia Suvorova, Paolo Bonzini, Fam Zheng,
Hanna Reitz, Philippe Mathieu-Daudé,
Stefano Garzarella, Michael S. Tsirkin, Daniel P. Berrangé,
Markus Armbruster, Cornelia Huck, Marc-André Lureau,
xen-devel, Paul Durrant, Kevin Wolf, Richard Henderson,
Eric Blake, Stefan Hajnoczi, Raphael Norwitz, kvm
The following changes since commit c6a5fc2ac76c5ab709896ee1b0edd33685a67ed1:
decodetree: Add --output-null for meson testing (2023-05-31 19:56:42 -0700)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 98b126f5e3228a346c774e569e26689943b401dd:
qapi: add '@fdset' feature for BlockdevOptionsVirtioBlkVhostVdpa (2023-06-01 11:08:21 -0400)
----------------------------------------------------------------
Pull request
- Stefano Garzarella's blkio block driver 'fd' parameter
- My thread-local blk_io_plug() series
----------------------------------------------------------------
Stefan Hajnoczi (6):
block: add blk_io_plug_call() API
block/nvme: convert to blk_io_plug_call() API
block/blkio: convert to blk_io_plug_call() API
block/io_uring: convert to blk_io_plug_call() API
block/linux-aio: convert to blk_io_plug_call() API
block: remove bdrv_co_io_plug() API
Stefano Garzarella (2):
block/blkio: use qemu_open() to support fd passing for virtio-blk
qapi: add '@fdset' feature for BlockdevOptionsVirtioBlkVhostVdpa
MAINTAINERS | 1 +
qapi/block-core.json | 6 ++
meson.build | 4 +
include/block/block-io.h | 3 -
include/block/block_int-common.h | 11 ---
include/block/raw-aio.h | 14 ---
include/sysemu/block-backend-io.h | 13 +--
block/blkio.c | 96 ++++++++++++------
block/block-backend.c | 22 -----
block/file-posix.c | 38 -------
block/io.c | 37 -------
block/io_uring.c | 44 ++++-----
block/linux-aio.c | 41 +++-----
block/nvme.c | 44 +++------
block/plug.c | 159 ++++++++++++++++++++++++++++++
hw/block/dataplane/xen-block.c | 8 +-
hw/block/virtio-blk.c | 4 +-
hw/scsi/virtio-scsi.c | 6 +-
block/meson.build | 1 +
block/trace-events | 6 +-
20 files changed, 293 insertions(+), 265 deletions(-)
create mode 100644 block/plug.c
--
2.40.1
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PULL 0/8] Block patches
2022-04-20 12:40 Hanna Reitz
@ 2022-04-20 18:12 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2022-04-20 18:12 UTC (permalink / raw)
To: Hanna Reitz, qemu-block; +Cc: Peter Maydell, qemu-devel
On 4/20/22 05:40, Hanna Reitz wrote:
> The following changes since commit 1be5a765c08cee3a9587c8a8d3fc2ea247b13f9c:
>
> Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging (2022-04-19 18:22:16 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/hreitz/qemu.git tags/pull-block-2022-04-20
>
> for you to fetch changes up to 0423f75351ab83b844a31349218b0eadd830e07a:
>
> qcow2: Add errp to rebuild_refcount_structure() (2022-04-20 12:09:17 +0200)
>
> ----------------------------------------------------------------
> Block patches:
> - Some changes for qcow2's refcount repair algorithm to make it work for
> qcow2 images stored on block devices
> - Skip test cases that require zstd when support for it is missing
> - Some refactoring in the iotests' meson.build
Applied, thanks. Please update the wiki changelog for 7.1 as appropriate.
r~
>
> ----------------------------------------------------------------
> Hanna Reitz (6):
> iotests.py: Add supports_qcow2_zstd_compression()
> iotests/065: Check for zstd support
> iotests/303: Check for zstd support
> qcow2: Improve refcount structure rebuilding
> iotests/108: Test new refcount rebuild algorithm
> qcow2: Add errp to rebuild_refcount_structure()
>
> Thomas Huth (2):
> tests/qemu-iotests/meson.build: Improve the indentation
> tests/qemu-iotests: Move the bash and sanitizer checks to meson.build
>
> block/qcow2-refcount.c | 353 +++++++++++++++++++++++----------
> tests/check-block.sh | 26 ---
> tests/qemu-iotests/065 | 24 ++-
> tests/qemu-iotests/108 | 259 +++++++++++++++++++++++-
> tests/qemu-iotests/108.out | 81 ++++++++
> tests/qemu-iotests/303 | 4 +-
> tests/qemu-iotests/iotests.py | 20 ++
> tests/qemu-iotests/meson.build | 73 ++++---
> 8 files changed, 673 insertions(+), 167 deletions(-)
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PULL 0/8] Block patches
@ 2022-04-20 12:40 Hanna Reitz
2022-04-20 18:12 ` Richard Henderson
0 siblings, 1 reply; 17+ messages in thread
From: Hanna Reitz @ 2022-04-20 12:40 UTC (permalink / raw)
To: qemu-block; +Cc: Peter Maydell, Hanna Reitz, Richard Henderson, qemu-devel
The following changes since commit 1be5a765c08cee3a9587c8a8d3fc2ea247b13f9c:
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging (2022-04-19 18:22:16 -0700)
are available in the Git repository at:
https://gitlab.com/hreitz/qemu.git tags/pull-block-2022-04-20
for you to fetch changes up to 0423f75351ab83b844a31349218b0eadd830e07a:
qcow2: Add errp to rebuild_refcount_structure() (2022-04-20 12:09:17 +0200)
----------------------------------------------------------------
Block patches:
- Some changes for qcow2's refcount repair algorithm to make it work for
qcow2 images stored on block devices
- Skip test cases that require zstd when support for it is missing
- Some refactoring in the iotests' meson.build
----------------------------------------------------------------
Hanna Reitz (6):
iotests.py: Add supports_qcow2_zstd_compression()
iotests/065: Check for zstd support
iotests/303: Check for zstd support
qcow2: Improve refcount structure rebuilding
iotests/108: Test new refcount rebuild algorithm
qcow2: Add errp to rebuild_refcount_structure()
Thomas Huth (2):
tests/qemu-iotests/meson.build: Improve the indentation
tests/qemu-iotests: Move the bash and sanitizer checks to meson.build
block/qcow2-refcount.c | 353 +++++++++++++++++++++++----------
tests/check-block.sh | 26 ---
tests/qemu-iotests/065 | 24 ++-
tests/qemu-iotests/108 | 259 +++++++++++++++++++++++-
tests/qemu-iotests/108.out | 81 ++++++++
tests/qemu-iotests/303 | 4 +-
tests/qemu-iotests/iotests.py | 20 ++
tests/qemu-iotests/meson.build | 73 ++++---
8 files changed, 673 insertions(+), 167 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PULL 0/8] Block patches
2020-05-19 8:00 Stefan Hajnoczi
@ 2020-05-19 15:15 ` Peter Maydell
0 siblings, 0 replies; 17+ messages in thread
From: Peter Maydell @ 2020-05-19 15:15 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Laurent Vivier, Kevin Wolf, Thomas Huth, Qemu-block, Stefan Weil,
QEMU Developers, Max Reitz, Alexander Bulekov, Bandan Das,
Paolo Bonzini, Fam Zheng
On Tue, 19 May 2020 at 09:01, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit 013a18edbbc59cdad019100c7d03c0494642b74c:
>
> Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-2020051=
> 4' into staging (2020-05-14 16:17:55 +0100)
>
> are available in the Git repository at:
>
> https://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to ba607ca8bff4d2c2062902f8355657c865ac7c29:
>
> aio-posix: disable fdmon-io_uring when GSource is used (2020-05-18 18:16:00=
> +0100)
>
> ----------------------------------------------------------------
> Pull request
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.1
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PULL 0/8] Block patches
@ 2020-05-19 8:00 Stefan Hajnoczi
2020-05-19 15:15 ` Peter Maydell
0 siblings, 1 reply; 17+ messages in thread
From: Stefan Hajnoczi @ 2020-05-19 8:00 UTC (permalink / raw)
To: qemu-devel
Cc: Laurent Vivier, Peter Maydell, Thomas Huth, qemu-block,
Stefan Weil, Max Reitz, Alexander Bulekov, Bandan Das,
Stefan Hajnoczi, Paolo Bonzini, Fam Zheng, Kevin Wolf
The following changes since commit 013a18edbbc59cdad019100c7d03c0494642b74c:
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-2020051=
4' into staging (2020-05-14 16:17:55 +0100)
are available in the Git repository at:
https://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to ba607ca8bff4d2c2062902f8355657c865ac7c29:
aio-posix: disable fdmon-io_uring when GSource is used (2020-05-18 18:16:00=
+0100)
----------------------------------------------------------------
Pull request
----------------------------------------------------------------
Philippe Mathieu-Daud=C3=A9 (6):
tests/fuzz/Makefile: Do not link code using unavailable devices
Makefile: List fuzz targets in 'make help'
tests/fuzz: Add missing space in test description
tests/fuzz: Remove unuseful/unused typedefs
tests/fuzz: Extract pciconfig_fuzz_qos() method
tests/fuzz: Extract ioport_fuzz_qtest() method
Stefan Hajnoczi (2):
aio-posix: don't duplicate fd handler deletion in
fdmon_io_uring_destroy()
aio-posix: disable fdmon-io_uring when GSource is used
Makefile | 6 +++-
tests/qtest/fuzz/Makefile.include | 6 ++--
include/block/aio.h | 3 ++
tests/qtest/fuzz/i440fx_fuzz.c | 47 ++++++++++++++++++++-----------
util/aio-posix.c | 13 +++++++++
util/aio-win32.c | 4 +++
util/async.c | 1 +
util/fdmon-io_uring.c | 13 +++++++--
8 files changed, 69 insertions(+), 24 deletions(-)
--=20
2.25.3
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2023-08-24 16:58 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-24 13:01 [PULL 0/8] Block patches Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 1/8] multi-process: Initialize variables declared with g_auto* Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 2/8] bitops.h: Improve find_xxx_bit() documentation Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 3/8] coroutine-sleep: use a stack-allocated timer Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 4/8] coroutine-sleep: disallow NULL QemuCoSleepState** argument Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 5/8] coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 6/8] coroutine-sleep: move timer out of QemuCoSleepState Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 7/8] coroutine-sleep: replace QemuCoSleepState pointer with struct in the API Stefan Hajnoczi
2021-05-24 13:01 ` [PULL 8/8] coroutine-sleep: introduce qemu_co_sleep Stefan Hajnoczi
2021-05-24 18:01 ` [PULL 0/8] Block patches Peter Maydell
-- strict thread matches above, loose matches on Subject: below --
2023-08-24 16:58 Stefan Hajnoczi
2023-06-01 15:25 Stefan Hajnoczi
2023-06-01 21:29 ` Richard Henderson
2022-04-20 12:40 Hanna Reitz
2022-04-20 18:12 ` Richard Henderson
2020-05-19 8:00 Stefan Hajnoczi
2020-05-19 15:15 ` Peter Maydell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.