1
The following changes since commit 55a19ad8b2d0797e3a8fe90ab99a9bb713824059:
1
The following changes since commit 15ef89d2a1a7b93845a6b09c2ee8e1979f6eb30b:
2
2
3
Update version for v2.9.0-rc1 release (2017-03-21 17:13:29 +0000)
3
Update version for v7.0.0-rc1 release (2022-03-22 22:58:44 +0000)
4
4
5
are available in the git repository at:
5
are available in the Git repository at:
6
6
7
https://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
7
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
8
8
9
for you to fetch changes up to 600ac6a0ef5c06418446ef2f37407bddcc51b21c:
9
for you to fetch changes up to 2539eade4f689eda7e9fe45486f18334bfbafaf0:
10
10
11
blockjob: add devops to blockjob backends (2017-03-22 13:26:27 -0400)
11
hw: Fix misleading hexadecimal format (2022-03-24 10:38:42 +0000)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Block patches for 2.9
14
Pull request
15
16
Philippe found cases where the 0x%d format string was used, leading to
17
misleading output. The patches look harmless and could save people time, so I
18
think it's worth including them in 7.0.
19
15
----------------------------------------------------------------
20
----------------------------------------------------------------
16
21
17
John Snow (3):
22
Philippe Mathieu-Daudé (2):
18
blockjob: add block_job_start_shim
23
block: Fix misleading hexadecimal format
19
block-backend: add drained_begin / drained_end ops
24
hw: Fix misleading hexadecimal format
20
blockjob: add devops to blockjob backends
21
25
22
Paolo Bonzini (1):
26
block/parallels-ext.c | 2 +-
23
blockjob: avoid recursive AioContext locking
27
hw/i386/sgx.c | 2 +-
24
28
hw/i386/trace-events | 6 +++---
25
block/block-backend.c | 24 ++++++++++++++--
29
hw/misc/trace-events | 4 ++--
26
blockjob.c | 63 ++++++++++++++++++++++++++++++++----------
30
hw/scsi/trace-events | 4 ++--
27
include/sysemu/block-backend.h | 8 ++++++
31
5 files changed, 9 insertions(+), 9 deletions(-)
28
3 files changed, 79 insertions(+), 16 deletions(-)
29
32
30
--
33
--
31
2.9.3
34
2.35.1
32
35
33
diff view generated by jsdifflib
1
From: Paolo Bonzini <pbonzini@redhat.com>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
Streaming or any other block job hangs when performed on a block device
3
"0x%u" format is very misleading, replace by "0x%x".
4
that has a non-default iothread. This happens because the AioContext
5
is acquired twice by block_job_defer_to_main_loop_bh and then released
6
only once by BDRV_POLL_WHILE. (Insert rants on recursive mutexes, which
7
unfortunately are a temporary but necessary evil for iothreads at the
8
moment).
9
4
10
Luckily, the reason for the double acquisition is simple; the function
5
Found running:
11
acquires the AioContext for both the job iothread and the BDS iothread,
12
in case the BDS iothread was changed while the job was running. It
13
is therefore enough to skip the second acquisition when the two
14
AioContexts are one and the same.
15
6
16
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
7
$ git grep -E '0x%[0-9]*([lL]*|" ?PRI)[dDuU]' block/
17
Reviewed-by: Eric Blake <eblake@redhat.com>
8
18
Reviewed-by: Jeff Cody <jcody@redhat.com>
9
Inspired-by: Richard Henderson <richard.henderson@linaro.org>
19
Message-id: 1490118490-5597-1-git-send-email-pbonzini@redhat.com
10
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
20
Signed-off-by: Jeff Cody <jcody@redhat.com>
11
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
12
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
13
Reviewed-by: Denis V. Lunev <den@openvz.org>
14
Message-id: 20220323114718.58714-2-philippe.mathieu.daude@gmail.com
15
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
21
---
16
---
22
blockjob.c | 8 ++++++--
17
block/parallels-ext.c | 2 +-
23
1 file changed, 6 insertions(+), 2 deletions(-)
18
1 file changed, 1 insertion(+), 1 deletion(-)
24
19
25
diff --git a/blockjob.c b/blockjob.c
20
diff --git a/block/parallels-ext.c b/block/parallels-ext.c
26
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
27
--- a/blockjob.c
22
--- a/block/parallels-ext.c
28
+++ b/blockjob.c
23
+++ b/block/parallels-ext.c
29
@@ -XXX,XX +XXX,XX @@ static void block_job_defer_to_main_loop_bh(void *opaque)
24
@@ -XXX,XX +XXX,XX @@ static int parallels_parse_format_extension(BlockDriverState *bs,
30
25
break;
31
/* Fetch BDS AioContext again, in case it has changed */
26
32
aio_context = blk_get_aio_context(data->job->blk);
27
default:
33
- aio_context_acquire(aio_context);
28
- error_setg(errp, "Unknown feature: 0x%" PRIu64, fh.magic);
34
+ if (aio_context != data->aio_context) {
29
+ error_setg(errp, "Unknown feature: 0x%" PRIx64, fh.magic);
35
+ aio_context_acquire(aio_context);
30
goto fail;
36
+ }
31
}
37
38
data->job->deferred_to_main_loop = false;
39
data->fn(data->job, data->opaque);
40
41
- aio_context_release(aio_context);
42
+ if (aio_context != data->aio_context) {
43
+ aio_context_release(aio_context);
44
+ }
45
46
aio_context_release(data->aio_context);
47
32
48
--
33
--
49
2.9.3
34
2.35.1
50
35
51
36
diff view generated by jsdifflib
Deleted patch
1
From: John Snow <jsnow@redhat.com>
2
1
3
The purpose of this shim is to allow us to pause pre-started jobs.
4
The purpose of *that* is to allow us to buffer a pause request that
5
will be able to take effect before the job ever does any work, allowing
6
us to create jobs during a quiescent state (under which they will be
7
automatically paused), then resuming the jobs after the critical section
8
in any order, either:
9
10
(1) -block_job_start
11
-block_job_resume (via e.g. drained_end)
12
13
(2) -block_job_resume (via e.g. drained_end)
14
-block_job_start
15
16
The problem that requires a startup wrapper is the idea that a job must
17
start in the busy=true state only its first time-- all subsequent entries
18
require busy to be false, and the toggling of this state is otherwise
19
handled during existing pause and yield points.
20
21
The wrapper simply allows us to mandate that a job can "start," set busy
22
to true, then immediately pause only if necessary. We could avoid
23
requiring a wrapper, but all jobs would need to do it, so it's been
24
factored out here.
25
26
Signed-off-by: John Snow <jsnow@redhat.com>
27
Reviewed-by: Jeff Cody <jcody@redhat.com>
28
Message-id: 20170316212351.13797-2-jsnow@redhat.com
29
Signed-off-by: Jeff Cody <jcody@redhat.com>
30
---
31
blockjob.c | 26 +++++++++++++++++++-------
32
1 file changed, 19 insertions(+), 7 deletions(-)
33
34
diff --git a/blockjob.c b/blockjob.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/blockjob.c
37
+++ b/blockjob.c
38
@@ -XXX,XX +XXX,XX @@ static bool block_job_started(BlockJob *job)
39
return job->co;
40
}
41
42
+/**
43
+ * All jobs must allow a pause point before entering their job proper. This
44
+ * ensures that jobs can be paused prior to being started, then resumed later.
45
+ */
46
+static void coroutine_fn block_job_co_entry(void *opaque)
47
+{
48
+ BlockJob *job = opaque;
49
+
50
+ assert(job && job->driver && job->driver->start);
51
+ block_job_pause_point(job);
52
+ job->driver->start(job);
53
+}
54
+
55
void block_job_start(BlockJob *job)
56
{
57
assert(job && !block_job_started(job) && job->paused &&
58
- !job->busy && job->driver->start);
59
- job->co = qemu_coroutine_create(job->driver->start, job);
60
- if (--job->pause_count == 0) {
61
- job->paused = false;
62
- job->busy = true;
63
- qemu_coroutine_enter(job->co);
64
- }
65
+ job->driver && job->driver->start);
66
+ job->co = qemu_coroutine_create(block_job_co_entry, job);
67
+ job->pause_count--;
68
+ job->busy = true;
69
+ job->paused = false;
70
+ qemu_coroutine_enter(job->co);
71
}
72
73
void block_job_ref(BlockJob *job)
74
--
75
2.9.3
76
77
diff view generated by jsdifflib
Deleted patch
1
From: John Snow <jsnow@redhat.com>
2
1
3
Allow block backends to forward drain requests to their devices/users.
4
The initial intended purpose for this patch is to allow BBs to forward
5
requests along to BlockJobs, which will want to pause if their associated
6
BB has entered a drained region.
7
8
Signed-off-by: John Snow <jsnow@redhat.com>
9
Reviewed-by: Jeff Cody <jcody@redhat.com>
10
Message-id: 20170316212351.13797-3-jsnow@redhat.com
11
Signed-off-by: Jeff Cody <jcody@redhat.com>
12
---
13
block/block-backend.c | 24 ++++++++++++++++++++++--
14
include/sysemu/block-backend.h | 8 ++++++++
15
2 files changed, 30 insertions(+), 2 deletions(-)
16
17
diff --git a/block/block-backend.c b/block/block-backend.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/block/block-backend.c
20
+++ b/block/block-backend.c
21
@@ -XXX,XX +XXX,XX @@ struct BlockBackend {
22
bool allow_write_beyond_eof;
23
24
NotifierList remove_bs_notifiers, insert_bs_notifiers;
25
+
26
+ int quiesce_counter;
27
};
28
29
typedef struct BlockBackendAIOCB {
30
@@ -XXX,XX +XXX,XX @@ void blk_set_dev_ops(BlockBackend *blk, const BlockDevOps *ops,
31
void *opaque)
32
{
33
/* All drivers that use blk_set_dev_ops() are qdevified and we want to keep
34
- * it that way, so we can assume blk->dev is a DeviceState if blk->dev_ops
35
- * is set. */
36
+ * it that way, so we can assume blk->dev, if present, is a DeviceState if
37
+ * blk->dev_ops is set. Non-device users may use dev_ops without device. */
38
assert(!blk->legacy_dev);
39
40
blk->dev_ops = ops;
41
blk->dev_opaque = opaque;
42
+
43
+ /* Are we currently quiesced? Should we enforce this right now? */
44
+ if (blk->quiesce_counter && ops->drained_begin) {
45
+ ops->drained_begin(opaque);
46
+ }
47
}
48
49
/*
50
@@ -XXX,XX +XXX,XX @@ static void blk_root_drained_begin(BdrvChild *child)
51
{
52
BlockBackend *blk = child->opaque;
53
54
+ if (++blk->quiesce_counter == 1) {
55
+ if (blk->dev_ops && blk->dev_ops->drained_begin) {
56
+ blk->dev_ops->drained_begin(blk->dev_opaque);
57
+ }
58
+ }
59
+
60
/* Note that blk->root may not be accessible here yet if we are just
61
* attaching to a BlockDriverState that is drained. Use child instead. */
62
63
@@ -XXX,XX +XXX,XX @@ static void blk_root_drained_begin(BdrvChild *child)
64
static void blk_root_drained_end(BdrvChild *child)
65
{
66
BlockBackend *blk = child->opaque;
67
+ assert(blk->quiesce_counter);
68
69
assert(blk->public.io_limits_disabled);
70
--blk->public.io_limits_disabled;
71
+
72
+ if (--blk->quiesce_counter == 0) {
73
+ if (blk->dev_ops && blk->dev_ops->drained_end) {
74
+ blk->dev_ops->drained_end(blk->dev_opaque);
75
+ }
76
+ }
77
}
78
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
79
index XXXXXXX..XXXXXXX 100644
80
--- a/include/sysemu/block-backend.h
81
+++ b/include/sysemu/block-backend.h
82
@@ -XXX,XX +XXX,XX @@ typedef struct BlockDevOps {
83
* Runs when the size changed (e.g. monitor command block_resize)
84
*/
85
void (*resize_cb)(void *opaque);
86
+ /*
87
+ * Runs when the backend receives a drain request.
88
+ */
89
+ void (*drained_begin)(void *opaque);
90
+ /*
91
+ * Runs when the backend's last drain request ends.
92
+ */
93
+ void (*drained_end)(void *opaque);
94
} BlockDevOps;
95
96
/* This struct is embedded in (the private) BlockBackend struct and contains
97
--
98
2.9.3
99
100
diff view generated by jsdifflib
1
From: John Snow <jsnow@redhat.com>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
This lets us hook into drained_begin and drained_end requests from the
3
"0x%u" format is very misleading, replace by "0x%x".
4
backend level, which is particularly useful for making sure that all
5
jobs associated with a particular node (whether the source or the target)
6
receive a drain request.
7
4
8
Suggested-by: Kevin Wolf <kwolf@redhat.com>
5
Found running:
9
Signed-off-by: John Snow <jsnow@redhat.com>
6
10
Reviewed-by: Jeff Cody <jcody@redhat.com>
7
$ git grep -E '0x%[0-9]*([lL]*|" ?PRI)[dDuU]' hw/
11
Message-id: 20170316212351.13797-4-jsnow@redhat.com
8
12
Signed-off-by: Jeff Cody <jcody@redhat.com>
9
Inspired-by: Richard Henderson <richard.henderson@linaro.org>
10
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
12
Message-id: 20220323114718.58714-3-philippe.mathieu.daude@gmail.com
13
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
13
---
14
---
14
blockjob.c | 29 ++++++++++++++++++++++++-----
15
hw/i386/sgx.c | 2 +-
15
1 file changed, 24 insertions(+), 5 deletions(-)
16
hw/i386/trace-events | 6 +++---
17
hw/misc/trace-events | 4 ++--
18
hw/scsi/trace-events | 4 ++--
19
4 files changed, 8 insertions(+), 8 deletions(-)
16
20
17
diff --git a/blockjob.c b/blockjob.c
21
diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
18
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
19
--- a/blockjob.c
23
--- a/hw/i386/sgx.c
20
+++ b/blockjob.c
24
+++ b/hw/i386/sgx.c
21
@@ -XXX,XX +XXX,XX @@ static const BdrvChildRole child_job = {
25
@@ -XXX,XX +XXX,XX @@ void pc_machine_init_sgx_epc(PCMachineState *pcms)
22
.stay_at_node = true,
23
};
24
25
+static void block_job_drained_begin(void *opaque)
26
+{
27
+ BlockJob *job = opaque;
28
+ block_job_pause(job);
29
+}
30
+
31
+static void block_job_drained_end(void *opaque)
32
+{
33
+ BlockJob *job = opaque;
34
+ block_job_resume(job);
35
+}
36
+
37
+static const BlockDevOps block_job_dev_ops = {
38
+ .drained_begin = block_job_drained_begin,
39
+ .drained_end = block_job_drained_end,
40
+};
41
+
42
BlockJob *block_job_next(BlockJob *job)
43
{
44
if (!job) {
45
@@ -XXX,XX +XXX,XX @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,
46
}
26
}
47
27
48
job = g_malloc0(driver->instance_size);
28
if ((sgx_epc->base + sgx_epc->size) < sgx_epc->base) {
49
- error_setg(&job->blocker, "block device is in use by block job: %s",
29
- error_report("Size of all 'sgx-epc' =0x%"PRIu64" causes EPC to wrap",
50
- BlockJobType_lookup[driver->job_type]);
30
+ error_report("Size of all 'sgx-epc' =0x%"PRIx64" causes EPC to wrap",
51
- block_job_add_bdrv(job, "main node", bs, 0, BLK_PERM_ALL, &error_abort);
31
sgx_epc->size);
52
- bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker);
32
exit(EXIT_FAILURE);
53
-
33
}
54
job->driver = driver;
34
diff --git a/hw/i386/trace-events b/hw/i386/trace-events
55
job->id = g_strdup(job_id);
35
index XXXXXXX..XXXXXXX 100644
56
job->blk = blk;
36
--- a/hw/i386/trace-events
57
@@ -XXX,XX +XXX,XX @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,
37
+++ b/hw/i386/trace-events
58
job->paused = true;
38
@@ -XXX,XX +XXX,XX @@ vtd_fault_disabled(void) "Fault processing disabled for context entry"
59
job->pause_count = 1;
39
vtd_replay_ce_valid(const char *mode, uint8_t bus, uint8_t dev, uint8_t fn, uint16_t domain, uint64_t hi, uint64_t lo) "%s: replay valid context device %02"PRIx8":%02"PRIx8".%02"PRIx8" domain 0x%"PRIx16" hi 0x%"PRIx64" lo 0x%"PRIx64
60
job->refcnt = 1;
40
vtd_replay_ce_invalid(uint8_t bus, uint8_t dev, uint8_t fn) "replay invalid context device %02"PRIx8":%02"PRIx8".%02"PRIx8
61
+
41
vtd_page_walk_level(uint64_t addr, uint32_t level, uint64_t start, uint64_t end) "walk (base=0x%"PRIx64", level=%"PRIu32") iova range 0x%"PRIx64" - 0x%"PRIx64
62
+ error_setg(&job->blocker, "block device is in use by block job: %s",
42
-vtd_page_walk_one(uint16_t domain, uint64_t iova, uint64_t gpa, uint64_t mask, int perm) "domain 0x%"PRIu16" iova 0x%"PRIx64" -> gpa 0x%"PRIx64" mask 0x%"PRIx64" perm %d"
63
+ BlockJobType_lookup[driver->job_type]);
43
+vtd_page_walk_one(uint16_t domain, uint64_t iova, uint64_t gpa, uint64_t mask, int perm) "domain 0x%"PRIx16" iova 0x%"PRIx64" -> gpa 0x%"PRIx64" mask 0x%"PRIx64" perm %d"
64
+ block_job_add_bdrv(job, "main node", bs, 0, BLK_PERM_ALL, &error_abort);
44
vtd_page_walk_one_skip_map(uint64_t iova, uint64_t mask, uint64_t translated) "iova 0x%"PRIx64" mask 0x%"PRIx64" translated 0x%"PRIx64
65
bs->job = job;
45
vtd_page_walk_one_skip_unmap(uint64_t iova, uint64_t mask) "iova 0x%"PRIx64" mask 0x%"PRIx64
66
46
vtd_page_walk_skip_read(uint64_t iova, uint64_t next) "Page walk skip iova 0x%"PRIx64" - 0x%"PRIx64" due to unable to read"
67
+ blk_set_dev_ops(blk, &block_job_dev_ops, job);
47
vtd_page_walk_skip_reserve(uint64_t iova, uint64_t next) "Page walk skip iova 0x%"PRIx64" - 0x%"PRIx64" due to rsrv set"
68
+ bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker);
48
vtd_switch_address_space(uint8_t bus, uint8_t slot, uint8_t fn, bool on) "Device %02x:%02x.%x switching address space (iommu enabled=%d)"
69
+
49
vtd_as_unmap_whole(uint8_t bus, uint8_t slot, uint8_t fn, uint64_t iova, uint64_t size) "Device %02x:%02x.%x start 0x%"PRIx64" size 0x%"PRIx64
70
QLIST_INSERT_HEAD(&block_jobs, job, job_list);
50
-vtd_translate_pt(uint16_t sid, uint64_t addr) "source id 0x%"PRIu16", iova 0x%"PRIx64
71
51
-vtd_pt_enable_fast_path(uint16_t sid, bool success) "sid 0x%"PRIu16" %d"
72
blk_add_aio_context_notifier(blk, block_job_attached_aio_context,
52
+vtd_translate_pt(uint16_t sid, uint64_t addr) "source id 0x%"PRIx16", iova 0x%"PRIx64
53
+vtd_pt_enable_fast_path(uint16_t sid, bool success) "sid 0x%"PRIx16" %d"
54
vtd_irq_generate(uint64_t addr, uint64_t data) "addr 0x%"PRIx64" data 0x%"PRIx64
55
vtd_reg_read(uint64_t addr, uint64_t size) "addr 0x%"PRIx64" size 0x%"PRIx64
56
vtd_reg_write(uint64_t addr, uint64_t size, uint64_t val) "addr 0x%"PRIx64" size 0x%"PRIx64" value 0x%"PRIx64
57
diff --git a/hw/misc/trace-events b/hw/misc/trace-events
58
index XXXXXXX..XXXXXXX 100644
59
--- a/hw/misc/trace-events
60
+++ b/hw/misc/trace-events
61
@@ -XXX,XX +XXX,XX @@
62
# See docs/devel/tracing.rst for syntax documentation.
63
64
# allwinner-cpucfg.c
65
-allwinner_cpucfg_cpu_reset(uint8_t cpu_id, uint32_t reset_addr) "id %u, reset_addr 0x%" PRIu32
66
+allwinner_cpucfg_cpu_reset(uint8_t cpu_id, uint32_t reset_addr) "id %u, reset_addr 0x%" PRIx32
67
allwinner_cpucfg_read(uint64_t offset, uint64_t data, unsigned size) "offset 0x%" PRIx64 " data 0x%" PRIx64 " size %" PRIu32
68
allwinner_cpucfg_write(uint64_t offset, uint64_t data, unsigned size) "offset 0x%" PRIx64 " data 0x%" PRIx64 " size %" PRIu32
69
70
@@ -XXX,XX +XXX,XX @@ imx7_gpr_write(uint64_t offset, uint64_t value) "addr 0x%08" PRIx64 "value 0x%08
71
72
# mos6522.c
73
mos6522_set_counter(int index, unsigned int val) "T%d.counter=%d"
74
-mos6522_get_next_irq_time(uint16_t latch, int64_t d, int64_t delta) "latch=%d counter=0x%"PRId64 " delta_next=0x%"PRId64
75
+mos6522_get_next_irq_time(uint16_t latch, int64_t d, int64_t delta) "latch=%d counter=0x%"PRIx64 " delta_next=0x%"PRIx64
76
mos6522_set_sr_int(void) "set sr_int"
77
mos6522_write(uint64_t addr, const char *name, uint64_t val) "reg=0x%"PRIx64 " [%s] val=0x%"PRIx64
78
mos6522_read(uint64_t addr, const char *name, unsigned val) "reg=0x%"PRIx64 " [%s] val=0x%x"
79
diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events
80
index XXXXXXX..XXXXXXX 100644
81
--- a/hw/scsi/trace-events
82
+++ b/hw/scsi/trace-events
83
@@ -XXX,XX +XXX,XX @@ lsi_bad_phase_interrupt(void) "Phase mismatch interrupt"
84
lsi_bad_selection(uint32_t id) "Selected absent target %"PRIu32
85
lsi_do_dma_unavailable(void) "DMA no data available"
86
lsi_do_dma(uint64_t addr, int len) "DMA addr=0x%"PRIx64" len=%d"
87
-lsi_queue_command(uint32_t tag) "Queueing tag=0x%"PRId32
88
+lsi_queue_command(uint32_t tag) "Queueing tag=0x%"PRIx32
89
lsi_add_msg_byte_error(void) "MSG IN data too long"
90
lsi_add_msg_byte(uint8_t data) "MSG IN 0x%02x"
91
lsi_reselect(int id) "Reselected target %d"
92
@@ -XXX,XX +XXX,XX @@ lsi_do_msgout_noop(void) "MSG: No Operation"
93
lsi_do_msgout_extended(uint8_t msg, uint8_t len) "Extended message 0x%x (len %d)"
94
lsi_do_msgout_ignored(const char *msg) "%s (ignored)"
95
lsi_do_msgout_simplequeue(uint8_t select_tag) "SIMPLE queue tag=0x%x"
96
-lsi_do_msgout_abort(uint32_t tag) "MSG: ABORT TAG tag=0x%"PRId32
97
+lsi_do_msgout_abort(uint32_t tag) "MSG: ABORT TAG tag=0x%"PRIx32
98
lsi_do_msgout_clearqueue(uint32_t tag) "MSG: CLEAR QUEUE tag=0x%"PRIx32
99
lsi_do_msgout_busdevicereset(uint32_t tag) "MSG: BUS DEVICE RESET tag=0x%"PRIx32
100
lsi_do_msgout_select(int id) "Select LUN %d"
73
--
101
--
74
2.9.3
102
2.35.1
75
103
76
104
diff view generated by jsdifflib