2019-08-29 21:34:43 +03:00
|
|
|
block_ss.add(genh)
|
|
|
|
block_ss.add(files(
|
|
|
|
'accounting.c',
|
|
|
|
'aio_task.c',
|
|
|
|
'amend.c',
|
|
|
|
'backup.c',
|
|
|
|
'blkdebug.c',
|
|
|
|
'blklogwrites.c',
|
|
|
|
'blkverify.c',
|
|
|
|
'block-backend.c',
|
|
|
|
'block-copy.c',
|
|
|
|
'commit.c',
|
2023-09-05 16:06:06 +03:00
|
|
|
'copy-before-write.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'copy-on-read.c',
|
|
|
|
'create.c',
|
|
|
|
'crypto.c',
|
|
|
|
'dirty-bitmap.c',
|
|
|
|
'filter-compress.c',
|
2023-09-05 16:06:06 +03:00
|
|
|
'graph-lock.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'io.c',
|
|
|
|
'mirror.c',
|
|
|
|
'nbd.c',
|
|
|
|
'null.c',
|
2023-09-05 16:06:06 +03:00
|
|
|
'preallocate.c',
|
|
|
|
'progress_meter.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'qapi.c',
|
2023-09-05 16:06:06 +03:00
|
|
|
'qcow2.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'qcow2-bitmap.c',
|
|
|
|
'qcow2-cache.c',
|
|
|
|
'qcow2-cluster.c',
|
|
|
|
'qcow2-refcount.c',
|
|
|
|
'qcow2-snapshot.c',
|
|
|
|
'qcow2-threads.c',
|
|
|
|
'quorum.c',
|
|
|
|
'raw-format.c',
|
2022-03-03 22:43:39 +03:00
|
|
|
'reqlist.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'snapshot.c',
|
2022-03-03 22:43:44 +03:00
|
|
|
'snapshot-access.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'throttle.c',
|
2023-09-05 16:06:06 +03:00
|
|
|
'throttle-groups.c',
|
2019-08-29 21:34:43 +03:00
|
|
|
'write-threshold.c',
|
2021-01-02 15:52:13 +03:00
|
|
|
), zstd, zlib, gnutls)
|
2019-08-29 21:34:43 +03:00
|
|
|
|
2023-06-13 16:33:47 +03:00
|
|
|
system_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
|
|
|
|
system_ss.add(files('block-ram-registrar.c'))
|
replay: do not build if TCG is not available
this fixes non-TCG builds broken recently by replay reverse debugging.
Stub the needed functions in stub/, splitting roughly between functions
needed only by system emulation, by system emulation and tools,
and by everyone. This includes duplicating some code in replay/, and
puts the logic for non-replay related events in the replay/ module (+
the stubs), so this should be revisited in the future.
Surprisingly, only _one_ qtest was affected by this, ide-test.c, which
resulted in a buzz as the bh events were never delivered, and the bh
never executed.
Many other subsystems _should_ have been affected.
This fixes the immediate issue, however a better way to group replay
functionality to TCG-only code could be developed in the long term.
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Message-Id: <20201013192123.22632-4-cfontana@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-10-13 22:21:23 +03:00
|
|
|
|
2021-10-13 12:42:25 +03:00
|
|
|
if get_option('qcow1').allowed()
|
|
|
|
block_ss.add(files('qcow.c'))
|
|
|
|
endif
|
|
|
|
if get_option('vdi').allowed()
|
|
|
|
block_ss.add(files('vdi.c'))
|
|
|
|
endif
|
2023-04-21 12:27:58 +03:00
|
|
|
if get_option('vhdx').allowed()
|
|
|
|
block_ss.add(files(
|
|
|
|
'vhdx-endian.c',
|
|
|
|
'vhdx-log.c',
|
|
|
|
'vhdx.c'
|
|
|
|
))
|
|
|
|
endif
|
|
|
|
if get_option('vmdk').allowed()
|
|
|
|
block_ss.add(files('vmdk.c'))
|
|
|
|
endif
|
|
|
|
if get_option('vpc').allowed()
|
|
|
|
block_ss.add(files('vpc.c'))
|
|
|
|
endif
|
2021-10-13 12:42:25 +03:00
|
|
|
if get_option('cloop').allowed()
|
|
|
|
block_ss.add(files('cloop.c'))
|
|
|
|
endif
|
|
|
|
if get_option('bochs').allowed()
|
|
|
|
block_ss.add(files('bochs.c'))
|
|
|
|
endif
|
|
|
|
if get_option('vvfat').allowed()
|
|
|
|
block_ss.add(files('vvfat.c'))
|
|
|
|
endif
|
|
|
|
if get_option('dmg').allowed()
|
|
|
|
block_ss.add(files('dmg.c'))
|
|
|
|
endif
|
|
|
|
if get_option('qed').allowed()
|
|
|
|
block_ss.add(files(
|
|
|
|
'qed-check.c',
|
|
|
|
'qed-cluster.c',
|
|
|
|
'qed-l2-cache.c',
|
|
|
|
'qed-table.c',
|
|
|
|
'qed.c',
|
|
|
|
))
|
|
|
|
endif
|
|
|
|
if get_option('parallels').allowed()
|
|
|
|
block_ss.add(files('parallels.c', 'parallels-ext.c'))
|
|
|
|
endif
|
|
|
|
|
2019-08-29 21:34:43 +03:00
|
|
|
block_ss.add(when: 'CONFIG_WIN32', if_true: files('file-win32.c', 'win32-aio.c'))
|
|
|
|
block_ss.add(when: 'CONFIG_POSIX', if_true: [files('file-posix.c'), coref, iokit])
|
2020-11-17 15:11:25 +03:00
|
|
|
block_ss.add(when: libiscsi, if_true: files('iscsi-opts.c'))
|
2019-08-29 21:34:43 +03:00
|
|
|
block_ss.add(when: 'CONFIG_LINUX', if_true: files('nvme.c'))
|
2023-04-28 22:49:19 +03:00
|
|
|
if get_option('replication').allowed()
|
2021-10-13 12:43:54 +03:00
|
|
|
block_ss.add(files('replication.c'))
|
|
|
|
endif
|
2021-10-07 16:08:20 +03:00
|
|
|
block_ss.add(when: libaio, if_true: files('linux-aio.c'))
|
meson: fix missing preprocessor symbols
While most libraries do not need a CONFIG_* symbol because the
"when:" clauses are enough, some do. Add them back or stop
using them if possible.
In the case of libpmem, the statement to add the CONFIG_* symbol
was still in configure, but could not be triggered because it
checked for "no" instead of "disabled" (and it would be wrong anyway
since the test for the library has not been done yet).
Reported-by: Li Zhijian <lizhijian@cn.fujitsu.com>
Fixes: 587d59d6cc ("configure, meson: convert virgl detection to meson", 2021-07-06)
Fixes: 83ef16821a ("configure, meson: convert libdaxctl detection to meson", 2021-07-06)
Fixes: e36e8c70f6 ("configure, meson: convert libpmem detection to meson", 2021-07-06)
Fixes: 53c22b68e3 ("configure, meson: convert liburing detection to meson", 2021-07-06)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-07-08 14:50:06 +03:00
|
|
|
block_ss.add(when: linux_io_uring, if_true: files('io_uring.c'))
|
2019-08-29 21:34:43 +03:00
|
|
|
|
|
|
|
block_modules = {}
|
|
|
|
|
|
|
|
modsrc = []
|
|
|
|
foreach m : [
|
blkio: add libblkio block driver
libblkio (https://gitlab.com/libblkio/libblkio/) is a library for
high-performance disk I/O. It currently supports io_uring,
virtio-blk-vhost-user, and virtio-blk-vhost-vdpa with additional drivers
under development.
One of the reasons for developing libblkio is that other applications
besides QEMU can use it. This will be particularly useful for
virtio-blk-vhost-user which applications may wish to use for connecting
to qemu-storage-daemon.
libblkio also gives us an opportunity to develop in Rust behind a C API
that is easy to consume from QEMU.
This commit adds io_uring, nvme-io_uring, virtio-blk-vhost-user, and
virtio-blk-vhost-vdpa BlockDrivers to QEMU using libblkio. It will be
easy to add other libblkio drivers since they will share the majority of
code.
For now I/O buffers are copied through bounce buffers if the libblkio
driver requires it. Later commits add an optimization for
pre-registering guest RAM to avoid bounce buffers.
The syntax is:
--blockdev io_uring,node-name=drive0,filename=test.img,readonly=on|off,cache.direct=on|off
--blockdev nvme-io_uring,node-name=drive0,filename=/dev/ng0n1,readonly=on|off,cache.direct=on
--blockdev virtio-blk-vhost-vdpa,node-name=drive0,path=/dev/vdpa...,readonly=on|off,cache.direct=on
--blockdev virtio-blk-vhost-user,node-name=drive0,path=vhost-user-blk.sock,readonly=on|off,cache.direct=on
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Message-id: 20221013185908.1297568-3-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2022-10-13 21:58:57 +03:00
|
|
|
[blkio, 'blkio', files('blkio.c')],
|
2021-06-01 10:54:10 +03:00
|
|
|
[curl, 'curl', files('curl.c')],
|
|
|
|
[glusterfs, 'gluster', files('gluster.c')],
|
2021-06-01 11:00:48 +03:00
|
|
|
[libiscsi, 'iscsi', [files('iscsi.c'), libm]],
|
2021-06-01 10:54:10 +03:00
|
|
|
[libnfs, 'nfs', files('nfs.c')],
|
|
|
|
[libssh, 'ssh', files('ssh.c')],
|
|
|
|
[rbd, 'rbd', files('rbd.c')],
|
2019-08-29 21:34:43 +03:00
|
|
|
]
|
2020-11-17 14:59:57 +03:00
|
|
|
if m[0].found()
|
2021-06-01 10:54:10 +03:00
|
|
|
module_ss = ss.source_set()
|
|
|
|
module_ss.add(when: m[0], if_true: m[2])
|
2019-08-29 21:34:43 +03:00
|
|
|
if enable_modules
|
2021-06-01 10:54:10 +03:00
|
|
|
modsrc += module_ss.all_sources()
|
2019-08-29 21:34:43 +03:00
|
|
|
endif
|
|
|
|
block_modules += {m[1] : module_ss}
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
# those are not exactly regular block modules, so treat them apart
|
2021-10-13 12:42:25 +03:00
|
|
|
if get_option('dmg').allowed()
|
2019-08-29 21:34:43 +03:00
|
|
|
foreach m : [
|
2020-11-17 14:59:57 +03:00
|
|
|
[liblzfse, 'dmg-lzfse', liblzfse, 'dmg-lzfse.c'],
|
|
|
|
[libbzip2, 'dmg-bz2', [glib, libbzip2], 'dmg-bz2.c']
|
2019-08-29 21:34:43 +03:00
|
|
|
]
|
2020-11-17 14:59:57 +03:00
|
|
|
if m[0].found()
|
2019-08-29 21:34:43 +03:00
|
|
|
module_ss = ss.source_set()
|
|
|
|
module_ss.add(when: m[2], if_true: files(m[3]))
|
|
|
|
block_modules += {m[1] : module_ss}
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
endif
|
|
|
|
|
|
|
|
module_block_py = find_program('../scripts/modules/module_block.py')
|
|
|
|
module_block_h = custom_target('module_block.h',
|
|
|
|
output: 'module_block.h',
|
|
|
|
input: modsrc,
|
|
|
|
command: [module_block_py, '@OUTPUT0@', modsrc])
|
|
|
|
block_ss.add(module_block_h)
|
|
|
|
|
2020-09-24 21:54:11 +03:00
|
|
|
wrapper_py = find_program('../scripts/block-coroutine-wrapper.py')
|
|
|
|
block_gen_c = custom_target('block-gen.c',
|
|
|
|
output: 'block-gen.c',
|
2022-03-03 18:15:48 +03:00
|
|
|
input: files(
|
|
|
|
'../include/block/block-io.h',
|
2022-11-28 17:23:37 +03:00
|
|
|
'../include/block/dirty-bitmap.h',
|
2023-01-13 23:42:04 +03:00
|
|
|
'../include/block/block_int-io.h',
|
2022-03-03 18:15:48 +03:00
|
|
|
'../include/block/block-global-state.h',
|
2023-01-26 20:24:21 +03:00
|
|
|
'../include/sysemu/block-backend-global-state.h',
|
2022-07-05 19:15:14 +03:00
|
|
|
'../include/sysemu/block-backend-io.h',
|
2022-03-03 18:15:48 +03:00
|
|
|
'coroutines.h'
|
|
|
|
),
|
2020-09-24 21:54:11 +03:00
|
|
|
command: [wrapper_py, '@OUTPUT@', '@INPUT@'])
|
|
|
|
block_ss.add(block_gen_c)
|
|
|
|
|
2019-08-29 21:34:43 +03:00
|
|
|
block_ss.add(files('stream.c'))
|
|
|
|
|
2023-06-13 16:33:47 +03:00
|
|
|
system_ss.add(files('qapi-sysemu.c'))
|
2020-09-24 18:26:50 +03:00
|
|
|
|
|
|
|
subdir('export')
|
2019-08-29 21:34:43 +03:00
|
|
|
subdir('monitor')
|
|
|
|
|
|
|
|
modules += {'block': block_modules}
|