aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-09-07qapi: Reject section markup in definition documentationMarkus Armbruster5-26/+9
Section markup in definition documentation makes no sense and can produce invalid Texinfo. Reject. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200320091805.5585-2-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
2020-09-07Merge remote-tracking branch 'remotes/kraxel/tags/vga-20200904-pull-request' ↵Peter Maydell2-4/+13
into staging vga: fixes for cirrus and virtio-gpu. # gpg: Signature made Fri 04 Sep 2020 12:26:36 BST # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/vga-20200904-pull-request: cirrus: handle wraparound in cirrus_invalidate_region virtio-gpu: fix unmap the already mapped items Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-06Merge remote-tracking branch 'remotes/kraxel/tags/ui-20200904-pull-request' ↵Peter Maydell4-26/+40
into staging ui: memleak fixes. gtk: refresh interval fix. spice: add mouse buttons. # gpg: Signature made Fri 04 Sep 2020 08:00:55 BST # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/ui-20200904-pull-request: ui/gtk: Update refresh interval after widget is realized ui: Add more mouse buttons to SPICE vnc-auth-sasl: Plug memleak in vnc_socket_ip_addr_string ui/gtk-gl-area: Plug memleak in gd_gl_area_create_context() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-05Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20200903' into stagingPeter Maydell3-67/+143
Improve inlining in cputlb.c. Fix vector abs fallback. Only set parallel_cpus for SMP. Add vector dupm for 256-bit elements. # gpg: Signature made Thu 03 Sep 2020 22:38:25 BST # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [full] # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * remotes/rth/tags/pull-tcg-20200903: tcg: Implement 256-bit dup for tcg_gen_gvec_dup_mem tcg: Eliminate one store for in-place 128-bit dup_mem softmmu/cpus: Only set parallel_cpus for SMP tcg: Fix tcg gen for vectorized absolute value cputlb: Make store_helper less fragile to compiler optimizations Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-04Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2020-09-03' into ↵Peter Maydell9-76/+108
staging QAPI patches patches for 2020-09-03 # gpg: Signature made Thu 03 Sep 2020 09:00:37 BST # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-qapi-2020-09-03: docs/qdev-device-use: Don't suggest -drive and -net can do USB qapi: Document event VSERPORT_CHANGE is rate-limited docs/interop/qmp-spec: Point to the QEMU QMP reference manual scripts/qmp/qom-fuse: Fix getattr(), read() for files in / scripts/qmp/qom-fuse: Port to current Python module fuse scripts/qmp/qom-fuse: Unbreak import of QEMUMonitorProtocol qapi/block-core.json: Remove stale description of 'blockdev-add' qapi: enable use of g_autoptr with QAPI types Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-04Merge remote-tracking branch ↵Peter Maydell6-1/+337
'remotes/vivier2/tags/linux-user-for-5.2-pull-request' into staging Add btrfs support Fix MK_ARRAY() # gpg: Signature made Thu 03 Sep 2020 00:26:37 BST # gpg: using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C # gpg: issuer "laurent@vivier.eu" # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full] # gpg: aka "Laurent Vivier <laurent@vivier.eu>" [full] # gpg: aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full] # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F 5173 F30C 38BD 3F2F BE3C * remotes/vivier2/tags/linux-user-for-5.2-pull-request: linux-user: Add support for btrfs ioctls used to scrub a filesystem linux-user: Add support for btrfs ioctls used to manage quota linux-user: Add support for two btrfs ioctls used for subvolume linux-user: Add support for a group of btrfs inode ioctls linux-user: Add support for btrfs ioctls used to get/set features linux-user: Add support for btrfs ioctls used to manipulate with devices linux-user: Add support for a group of btrfs ioctls used for snapshots linux-user: Add support for a group of btrfs ioctls used for subvolumes linux-user: fix implicit conversion from enumeration type error Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-04cirrus: handle wraparound in cirrus_invalidate_regionGerd Hoffmann1-3/+9
Code simply asserts that there is no wraparound instead of handling it properly. The assert() can be triggered by the guest (must be privilidged inside the guest though). Fix it. Buglink: https://bugs.launchpad.net/qemu/+bug/1880189 Cc: Li Qiang <liq3ea@163.com> Reported-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Li Qiang <liq3ea@163.com> Message-id: 20200901140944.24101-1-kraxel@redhat.com
2020-09-04virtio-gpu: fix unmap the already mapped itemsLi Zhijian1-1/+4
we go here either (!(*iov)[i].iov_base) or (len != l), so we need to consider to unmap the 'i'th item as well when the 'i'th item is not nil CC: Li Qiang <liq3ea@gmail.com> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> Message-id: 20200827035855.24354-1-lizhijian@cn.fujitsu.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-04ui/gtk: Update refresh interval after widget is realizedPhilippe Mathieu-Daudé1-26/+26
Nikola reported on Windows when gd_vc_gfx_init() is called, the window is not yet realized, so we run gd_refresh_rate_millihz(NULL) which returns 0 milli-Hertz. When a Widget is realized, it fires a 'realized' event. We already have the gd_draw_event() handler registered for this even, so simply move the gd_refresh_rate_millihz() there. When the event fires, the window is known to exist. This completes commit c4c00922cc original intention. Reported-by: Nikola Pavlica <pavlica.nikola@gmail.com> Tested-by: Nikola Pavlica <pavlica.nikola@gmail.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20200817172331.598255-1-philmd@redhat.com Suggested-by: Nikola Pavlica <pavlica.nikola@gmail.com> Tested-by: Nikola Pavlica <pavlica.nikola@gmail.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-04ui: Add more mouse buttons to SPICEFrediano Ziglio1-0/+2
Add support for SIDE and EXTRA buttons. The constants for buttons in both SPICE and QEMU are defined as LEFT MIDDLE RIGHT UP DOWN SIDE EXTRA (same order). "button_mask" contains for each bit the state of a button. Qemu currently uses bits 0, 1, 2 respectively as LEFT, RIGHT, MIDDLE; also add bits 4 and 5 as UP and DOWN (using wheel movements). SPICE protocol uses a bitmask based on the order above where LEFT is bit 0, MIDDLE is bit 1 and so on till EXTRA being bit 6. To avoid clash with Qemu usage SPICE bitmask from SIDE are move a bit more resulting respectively in 0x40 and 0x80 values. Signed-off-by: Frediano Ziglio <freddy77@gmail.com> Message-id: 20200820145851.50846-1-fziglio@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-04vnc-auth-sasl: Plug memleak in vnc_socket_ip_addr_stringPan Nengyuan1-0/+1
'addr' is forgot to free in vnc_socket_ip_addr_string error path. Fix that. Reported-by: Euler Robot <euler.robot@huawei.com> Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com> Reviewed-by: Li Qiang <liq3ea@gmail.com> Message-Id: <20200831134315.1221-11-pannengyuan@huawei.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-04ui/gtk-gl-area: Plug memleak in gd_gl_area_create_context()Pan Nengyuan1-0/+11
Receiving error in local variable err, and forgot to free it. This patch check the return value of 'gdk_window_create_gl_context' and 'gdk_gl_context_realize', then free err to fix it. Reported-by: Euler Robot <euler.robot@huawei.com> Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com> Message-Id: <20200831134315.1221-6-pannengyuan@huawei.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-03Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2020-09-02' into ↵Peter Maydell7-9/+283
staging nbd patches for 2020-09-02 - fix a few iotests affected by earlier nbd changes - avoid blocking qemu by nbd client in connect() - build qemu-nbd for mingw # gpg: Signature made Wed 02 Sep 2020 22:52:31 BST # gpg: using RSA key 71C2CC22B1C4602927D2F3AAA7A16B4A2527436A # gpg: Good signature from "Eric Blake <eblake@redhat.com>" [full] # gpg: aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>" [full] # gpg: aka "[jpeg image of size 6874]" [full] # Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A * remotes/ericb/tags/pull-nbd-2020-09-02: nbd: disable signals and forking on Windows builds nbd: skip SIGTERM handler if NBD device support is not built block: add missing socket_init() calls to tools block/nbd: use non-blocking connect: fix vm hang on connect() iotests/259: Fix reference output iotests/059: Fix reference output Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-03tcg: Implement 256-bit dup for tcg_gen_gvec_dup_memRichard Henderson1-3/+49
We already support duplication of 128-bit blocks. This extends that support to 256-bit blocks. This will be needed by SVE2. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2020-09-03tcg: Eliminate one store for in-place 128-bit dup_memRichard Henderson1-2/+2
Do not store back to the exact memory from which we just loaded. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2020-09-03softmmu/cpus: Only set parallel_cpus for SMPRichard Henderson1-1/+10
Do not set parallel_cpus if there is only one cpu instantiated. This will allow tcg to use serial code to implement atomics. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2020-09-03tcg: Fix tcg gen for vectorized absolute valueStephen Long1-2/+3
The fallback inline expansion for vectorized absolute value, when the host doesn't support such an insn was flawed. E.g. when a vector of bytes has all elements negative, mask will be 0xffff_ffff_ffff_ffff. Subtracting mask only adds 1 to the low element instead of all elements becase -mask is 1 and not 0x0101_0101_0101_0101. Signed-off-by: Stephen Long <steplong@quicinc.com> Message-Id: <20200813161818.190-1-steplong@quicinc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2020-09-03cputlb: Make store_helper less fragile to compiler optimizationsRichard Henderson1-59/+79
This has no functional change. The current function structure is: inline QEMU_ALWAYSINLINE store_memop() { switch () { ... default: qemu_build_not_reached(); } } inline QEMU_ALWAYSINLINE store_helper() { ... if (span_two_pages_or_io) { ... helper_ret_stb_mmu(); } store_memop(); } helper_ret_stb_mmu() { store_helper(); } Whereas GCC will generate an error at compile-time when an always_inline function is not inlined, Clang does not. Nor does Clang prioritize the inlining of always_inline functions. Both of these are arguably bugs. Both `store_memop` and `store_helper` need to be inlined and allow constant propogations to eliminate the `qemu_build_not_reached` call. However, if the compiler instead chooses to inline helper_ret_stb_mmu into store_helper, then store_helper is now self-recursive and the compiler is no longer able to propagate the constant in the same way. This does not produce at current QEMU head, but was reproducible at v4.2.0 with `clang-10 -O2 -fexperimental-new-pass-manager`. The inline recursion problem can be fixed solely by marking helper_ret_stb_mmu as noinline, so the compiler does not make an incorrect decision about which functions to inline. In addition, extract store_helper_unaligned as a noinline subroutine that can be shared by all of the helpers. This saves about 6k code size in an optimized x86_64 build. Reported-by: Shu-Chun Weng <scw@google.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2020-09-03Merge remote-tracking branch ↵Peter Maydell18-89/+183
'remotes/huth-gitlab/tags/pull-request-2020-09-03' into staging * Cirrus-CI improvements and fixes (compile with -Werror & fix for 1h problem) * Two build system fixes to fix some failures the CI * One m68k QOMification patch * Some trivial qtest patches * Some small improvements for the Gitlab CI # gpg: Signature made Thu 03 Sep 2020 12:04:32 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/huth-gitlab/tags/pull-request-2020-09-03: gitlab-ci.yml: Set artifacts expiration time gitlab-ci.yml: Run check-qtest and check-unit at the end of the fuzzer job gitlab/travis: Rework the disabled features tests libqtest: Rename qmp_assert_error_class() to qmp_expect_error_and_unref() tests/qtest/ipmi-kcs: Fix assert side-effect tests/qtest/tpm: Declare input buffers const and static tests/qtest/ahci: Improve error handling (NEGATIVE_RETURNS) hw/m68k: QOMify the mcf5206 system integration module configure: Add system = 'linux' for meson when cross-compiling meson: fix keymaps without qemu-keymap cirrus.yml: Split FreeBSD job into two parts cirrus.yml: Update the macOS jobs to Catalina cirrus.yml: Compile macOS with -Werror cirrus.yml: Compile FreeBSD with -Werror configure: Fix atomic64 test for --enable-werror on macOS Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-03Merge remote-tracking branch 'remotes/legoater/tags/pull-aspeed-20200901' ↵Peter Maydell9-95/+208
into staging Various fixes of Aspeed machines : * New Supermicro X11 BMC machine (Erik) * Fixed valid access size on AST2400 SCU * Improved robustness of the ftgmac100 model. * New flash models in m25p80 (Igor) * Fixed reset sequence of SDHCI/eMMC controllers * Improved support of the AST2600 SDMC (Joel) * Couple of SMC cleanups # gpg: Signature made Tue 01 Sep 2020 13:39:20 BST # gpg: using RSA key A0F66548F04895EBFE6B0B6051A343C7CFFBECA1 # gpg: Good signature from "Cédric Le Goater <clg@kaod.org>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: A0F6 6548 F048 95EB FE6B 0B60 51A3 43C7 CFFB ECA1 * remotes/legoater/tags/pull-aspeed-20200901: hw: add a number of SPI-flash's of m25p80 family arm: aspeed: add strap define `25HZ` of AST2500 aspeed/smc: Open AHB window of the second chip of the AST2600 FMC controller aspeed/sdmc: Simplify calculation of RAM bits aspeed/sdmc: Allow writes to unprotected registers aspeed/sdmc: Perform memory training ftgmac100: Improve software reset ftgmac100: Fix integer overflow in ftgmac100_do_tx() ftgmac100: Check for invalid len and address before doing a DMA transfer ftgmac100: Change interrupt status when a DMA error occurs ftgmac100: Fix interrupt status "Packet moved to RX FIFO" ftgmac100: Fix interrupt status "Packet transmitted on ethernet" ftgmac100: Fix registers that can be read aspeed/sdhci: Fix reset sequence aspeed/smc: Fix max_slaves of the legacy SMC device aspeed/smc: Fix MemoryRegionOps definition hw/arm/aspeed: Add board model for Supermicro X11 BMC aspeed/scu: Fix valid access size on AST2400 m25p80: Add support for n25q512ax3 m25p80: Return the JEDEC ID twice for mx25l25635e Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-09-03gitlab-ci.yml: Set artifacts expiration timeThomas Huth1-0/+4
The default expiration time for artifacts seems to be very high (30 days?). Since we only need the artifacts to pass the binaries from one stage to the next one, we can decrease the expiration time to avoid to spam the file server too much. Two days should be enough in case someone still wants to have a look after the pipeline finished. Message-Id: <20200806161546.15325-1-thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03gitlab-ci.yml: Run check-qtest and check-unit at the end of the fuzzer jobThomas Huth1-2/+4
The fuzzer job finishes quite early, so we can run the unit tests and qtests with -fsanitize=address here without extending the total test time. Message-Id: <20200831153228.229185-1-thuth@redhat.com> Reviewed-by: Alexander Bulekov <alxndr@bu.edu> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03gitlab/travis: Rework the disabled features testsThomas Huth2-13/+19
Let's focus on the gitlab-ci when testing the compilation with disabled features, thus add more switches there (and while we're at it, sort them also alphabetically). This should cover the test from the Travis CI now, too, so that we can remove the now-redundant job from the Travis CI. Message-Id: <20200806155306.13717-1-thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03libqtest: Rename qmp_assert_error_class() to qmp_expect_error_and_unref()Markus Armbruster6-29/+29
qmp_assert_error_class() does more than just assert: it also unrefs the @rsp argument. Rename to qmp_expect_error_and_unref() to reduce confusion. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200902115733.1229537-1-armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03tests/qtest/ipmi-kcs: Fix assert side-effectPhilippe Mathieu-Daudé1-1/+2
Fix assert side-effect reported by Coverity: /qemu/tests/qtest/ipmi-kcs-test.c: 84 in kcs_wait_obf() 83 while (IPMI_KCS_CMDREG_GET_OBF() == 0) { >>> CID 1432368: Incorrect expression (ASSERT_SIDE_EFFECT) >>> Argument "--count" of g_assert() has a side effect. The containing function might work differently in a non-debug build. 84 g_assert(--count != 0); Reported-by: Coverity (CID 1432368) Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200902080801.160652-2-philmd@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03tests/qtest/tpm: Declare input buffers const and staticPhilippe Mathieu-Daudé2-7/+7
The functions using these arrays expect a "const unsigned char *" argument, it is safe to declare these as 'static const'. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200902080909.161034-1-philmd@redhat.com> Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03tests/qtest/ahci: Improve error handling (NEGATIVE_RETURNS)Philippe Mathieu-Daudé1-0/+1
Fix an error handling issue reported by Coverity: /qemu/tests/qtest/ahci-test.c: 1452 in prepare_iso() 1444 int fd = mkstemp(cdrom_path); >>> CID 1432375: Error handling issues (NEGATIVE_RETURNS) >>> "fd" is passed to a parameter that cannot be negative. 1452 ret = write(fd, patt, size); Reported-by: Coverity (CID 1432375) Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200902080552.159806-1-philmd@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03hw/m68k: QOMify the mcf5206 system integration moduleThomas Huth3-13/+48
The mcf5206 system integration module should be a proper device. Let's finally QOMify it. Signed-off-by: Thomas Huth <huth@tuxfamily.org> Message-Id: <20200819065201.4045-1-huth@tuxfamily.org>
2020-09-03configure: Add system = 'linux' for meson when cross-compilingThomas Huth1-0/+3
Meson needs the "system = xyz" line when cross-compiling. We are already adding a "system = 'windows'" for the MinGW cross-compilation case here, so let's add a "system = 'linux'" now for Linux hosts, too. Message-Id: <20200823111757.72002-2-thuth@redhat.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03meson: fix keymaps without qemu-keymapGerd Hoffmann2-9/+28
In case the qemu-keymap tool generating them is neither installed on the system nor built from sources (due to xkbcommon not being available) qemu will not find the keymaps when started directly from the build tree, This happens because commit ddcf607fa3d6 ("meson: drop keymaps symlink") removed the symlink to the source tree, and the special handling for install doesn't help in case we do not install qemu. Lets fix that by simply copying over the file from the source tree as fallback. Reported-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-Id: <20200827102617.14448-1-kraxel@redhat.com> [thuth: Rebased, changed "config_host['qemu_datadir']" to "qemu_datadir", added Gerd's UNLINK fix to configure script] Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03cirrus.yml: Split FreeBSD job into two partsThomas Huth1-6/+26
The FreeBSD jobs currently hit the 1h time limit in the Cirrus-CI. We have to split the build targets here to make sure that the job finishes in time again. According to the Cirrus-CI docs and some tests that I did, it also seems like the total amount of CPUs that can be used for FreeBSD jobs is limited to 8, so each job now only gets 4 CPUs. That increases the compilation time of each job a little bit, but it still seems to be better to run two jobs with 4 CPUs each in parallel than to run two jobs with 8 CPUs sequentially. Message-Id: <20200831154405.229706-1-thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03cirrus.yml: Update the macOS jobs to CatalinaThomas Huth1-2/+2
When looking at the CI jobs on cirrus-ci.com, it seems like the mojave-based images have been decomissioned a while ago already, since apparently all our jobs get automatically upgraded to catalina. So let's update our YML script accordingly to avoid confusion. Reviewed-by: Ed Maste <emaste@freebsd.org> Message-Id: <20200728074405.13118-5-thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03cirrus.yml: Compile macOS with -WerrorThomas Huth1-2/+5
Compiler warnings currently go unnoticed in our macOS builds, since -Werror is only enabled for Linux and MinGW builds by default. So let's enable them here now, too. Unfortunately, the sasl header is marked as deprecated in the macOS headers and thus generates a lot of deprecation warnings. Thus we have to also use -Wno-error=deprecated-declarations to be able to compile the code here. Message-Id: <20200728074405.13118-4-thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03cirrus.yml: Compile FreeBSD with -WerrorThomas Huth1-1/+1
Compiler warnings currently go unnoticed in our FreeBSD builds, since -Werror is only enabled for Linux and MinGW builds by default. So let's enable them here now, too. Reviewed-by: Ed Maste <emaste@freebsd.org> Message-Id: <20200728074405.13118-3-thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03configure: Fix atomic64 test for --enable-werror on macOSThomas Huth1-5/+5
When using --enable-werror for the macOS builders in the Cirrus-CI, the atomic64 test is currently failing, and config.log shows a bunch of error messages like this: config-temp/qemu-conf.c:6:7: error: implicit declaration of function '__atomic_load_8' is invalid in C99 [-Werror,-Wimplicit-function-declaration] y = __atomic_load_8(&x, 0); ^ config-temp/qemu-conf.c:6:7: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes] Seems like these __atomic_*_8 functions are available in one of the libraries there, so that the test links and passes there when not using --enable-werror. But there does not seem to be a valid prototype for them in any of the header files, so that the test fails when using --enable-werror. Fix it by using the "official" built-in functions instead (see e.g. https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html). We are not using the *_8 variants in QEMU anyway. Suggested-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20200728074405.13118-2-thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
2020-09-03docs/qdev-device-use: Don't suggest -drive and -net can do USBMarkus Armbruster1-2/+32
Commit 480324ec8d "docs/qdev-device-use: Clean up the sentences related to -usbdevice" deleted the information on syntax that no longer works. Unfortunately, the resulting text suggests you can configure USB block devices with -drive, and USB network devices with -net, which is misleading. Instead of rephrasing the now misleading text, I'm putting the information back, and just make clear it's about old versions of QEMU. Cc: Thomas Huth <thuth@redhat.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200806081147.3123652-4-armbru@redhat.com>
2020-09-03qapi: Document event VSERPORT_CHANGE is rate-limitedMarkus Armbruster1-0/+2
Commit e2ae6159de "virtio-serial: report frontend connection state via monitor" neglected to document the new event is rate-limited. Fix that. Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Eric Blake <eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200806081147.3123652-3-armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2020-09-03docs/interop/qmp-spec: Point to the QEMU QMP reference manualMarkus Armbruster1-3/+6
Commit 4d8bb958fa0..231aaf3a821 integrated the contents of docs/qmp-events.txt into QAPI schema doc comments. It left dangling references to qmp-events.txt behind. Fix to point to the QEMU QMP reference manual generated from the QAPI schema. Add a similar reference for commands. Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200806081147.3123652-2-armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2020-09-03scripts/qmp/qom-fuse: Fix getattr(), read() for files in /Markus Armbruster1-2/+8
path, prop = "type".rsplit('/', 1) sets path to "", which doesn't work. Correct to "/". Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200723142738.1868568-4-armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
2020-09-03scripts/qmp/qom-fuse: Port to current Python module fuseMarkus Armbruster1-46/+47
Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200723142738.1868568-3-armbru@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
2020-09-03scripts/qmp/qom-fuse: Unbreak import of QEMUMonitorProtocolMarkus Armbruster1-2/+2
Commit c7b942d7f8 "scripts/qmp: Fix shebang and imports" messed with it for reasons I don't quite understand. I do understand how it fails now: it neglects to import sys. Fix that. It now fails because it expects an old version of module fuse. That's next. Fixes: c7b942d7f84ef54f266921bf7668d43f1f2c7c79 Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200723142738.1868568-2-armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
2020-09-03qapi/block-core.json: Remove stale description of 'blockdev-add'Kashyap Chamarthy1-3/+1
On a 'qemu-discuss' thread[1], Kevin identifies that the current doc blurb for @blockdev-add is stale: This is actually a documentation bug. @id doesn't exist, blockdev-add never creates a BlockBackend. This was different in the very first versions of the patches to add blockdev-add and we probably just forgot to update the documentation after removing it. So remove the stale bits. And the requirement for 'node-name' is already mentioned in the documentation of @BlockdevOptions: [...] # @node-name: the node name of the new node (Since 2.0). # This option is required on the top level of blockdev-add. # Valid node names start with an alphabetic character and may # contain only alphanumeric characters, '-', '.' and '_'. Their # maximum length is 31 characters. [...] [1] https://lists.nongnu.org/archive/html/qemu-discuss/2020-07/msg00071.html -- equivalent to "-drive if=ide,id=disk0....." Fixes: be4b67bc7d ("blockdev: Allow creation of BDS trees without BB") Signed-off-by: Kashyap Chamarthy <kchamart@redhat.com> Suggested-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200805100158.1239390-1-kchamart@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2020-09-03qapi: enable use of g_autoptr with QAPI typesDaniel P. Berrangé4-18/+10
Currently QAPI generates a type and function for free'ing it: typedef struct QCryptoBlockCreateOptions QCryptoBlockCreateOptions; void qapi_free_QCryptoBlockCreateOptions(QCryptoBlockCreateOptions *obj); This is used in the traditional manner: QCryptoBlockCreateOptions *opts = NULL; opts = g_new0(QCryptoBlockCreateOptions, 1); ....do stuff with opts... qapi_free_QCryptoBlockCreateOptions(opts); Since bumping the min glib to 2.48, QEMU has incrementally adopted the use of g_auto/g_autoptr. This allows the compiler to run a function to free a variable when it goes out of scope, the benefit being the compiler can guarantee it is freed in all possible code ptahs. This benefit is applicable to QAPI types too, and given the seriously long method names for some qapi_free_XXXX() functions, is much less typing. This change thus makes the code generator emit: G_DEFINE_AUTOPTR_CLEANUP_FUNC(QCryptoBlockCreateOptions, qapi_free_QCryptoBlockCreateOptions) The above code example now becomes g_autoptr(QCryptoBlockCreateOptions) opts = NULL; opts = g_new0(QCryptoBlockCreateOptions, 1); ....do stuff with opts... Note, if the local pointer needs to live beyond the scope holding the variable, then g_steal_pointer can be used. This is useful to return the pointer to the caller in the success codepath, while letting it be freed in all error codepaths. return g_steal_pointer(&opts); The crypto/block.h header needs updating to avoid symbol clash now that the g_autoptr support is a standard QAPI feature. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200723153845.2934357-1-berrange@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2020-09-03linux-user: Add support for btrfs ioctls used to scrub a filesystemFilip Bozuta3-0/+43
This patch implements functionality for following ioctls: BTRFS_IOC_SCRUB - Starting a btrfs filesystem scrub Start a btrfs filesystem scrub. The third ioctls argument is a pointer to a following type: struct btrfs_ioctl_scrub_args { __u64 devid; /* in */ __u64 start; /* in */ __u64 end; /* in */ __u64 flags; /* in */ struct btrfs_scrub_progress progress; /* out */ /* pad to 1k */ __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8]; }; Before calling this ioctl, field 'devid' should be filled with value that represents the device id of the btrfs filesystem for which the scrub is to be started. BTRFS_IOC_SCRUB_CANCEL - Canceling scrub of a btrfs filesystem Cancel a btrfs filesystem scrub if it is running. The third ioctls argument is ignored. BTRFS_IOC_SCRUB_PROGRESS - Getting status of a running scrub Read the status of a running btrfs filesystem scrub. The third ioctls argument is a pointer to the above mentioned 'struct btrfs_ioctl_scrub_args'. Similarly as with 'BTRFS_IOC_SCRUB', the 'devid' field should be filled with value that represents the id of the btrfs device for which the scrub has started. The status of a running scrub is returned in the field 'progress' which is of type 'struct btrfs_scrub_progress' and its definition can be found at: https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/btrfs.h#L150 Implementation nots: Ioctls in this patch use type 'struct btrfs_ioctl_scrub_args' as their third argument. That is the reason why an aproppriate thunk type definition is added in file 'syscall_types.h'. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-9-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for btrfs ioctls used to manage quotaFilip Bozuta3-0/+63
This patch implements functionality for following ioctls: BTRFS_IOC_QUOTA_CTL - Enabling/Disabling quota support Enable or disable quota support for a btrfs filesystem. Quota support is enabled or disabled using the ioctls third argument which represents a pointer to a following type: struct btrfs_ioctl_quota_ctl_args { __u64 cmd; __u64 status; }; Before calling this ioctl, the 'cmd' field should be filled with one of the values 'BTRFS_QUOTA_CTL_ENABLE' (enabling quota) 'BTRFS_QUOTA_CTL_DISABLE' (disabling quota). BTRFS_IOC_QGROUP_CREATE - Creating/Removing a subvolume quota group Create or remove a subvolume quota group. The subvolume quota group is created or removed using the ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_qgroup_create_args { __u64 create; __u64 qgroupid; }; Before calling this ioctl, the 'create' field should be filled with the aproppriate value depending on if the user wants to create or remove a quota group (0 for removing, everything else for creating). Also, the 'qgroupid' field should be filled with the value for the quota group id that is to be created. BTRFS_IOC_QGROUP_ASSIGN - Asigning or removing a quota group as child group Asign or remove a quota group as child quota group of another group in the btrfs filesystem. The asignment is done using the ioctl's third argument which represents a pointert to a following type: struct btrfs_ioctl_qgroup_assign_args { __u64 assign; __u64 src; __u64 dst; }; Before calling this ioctl, the 'assign' field should be filled with the aproppriate value depending on if the user wants to asign or remove a quota group as a child quota group of another group (0 for removing, everythin else for asigning). Also, the 'src' and 'dst' fields should be filled with the aproppriate quota group id values depending on which quota group needs to asigned or removed as child quota group of another group ('src' gets asigned or removed as child group of 'dst'). BTRFS_IOC_QGROUP_LIMIT - Limiting the size of a quota group Limit the size of a quota group. The size of the quota group is limited with the ioctls third argument which represents a pointer to a following type: struct btrfs_ioctl_qgroup_limit_args { __u64 qgroupid; struct btrfs_qgroup_limit lim; }; Before calling this ioctl, the 'qgroup' id field should be filled with aproppriate value of the quota group id for which the size is to be limited. The second field is of following type: struct btrfs_qgroup_limit { __u64 flags; __u64 max_rfer; __u64 max_excl; __u64 rsv_rfer; __u64 rsv_excl; }; The 'max_rfer' field should be filled with the size to which the quota group should be limited. The 'flags' field can be used for passing additional options and can have values which can be found on: https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/btrfs.h#L67 BTRFS_IOC_QUOTA_RESCAN_STATUS - Checking status of running rescan operation Check status of a running rescan operation. The status is checked using the ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_quota_rescan_args { __u64 flags; __u64 progress; __u64 reserved[6]; }; If there is a rescan operation running, 'flags' field is set to 1, and 'progress' field is set to aproppriate value which represents the progress of the operation. BTRFS_IOC_QUOTA_RESCAN - Starting a rescan operation Start ar rescan operation to Trash all quota groups and scan the metadata again with the current config. Before calling this ioctl, BTRFS_IOC_QUOTA_RESCAN_STATUS sould be run to check if there is already a rescan operation runing. After that ioctl call, the received 'struct btrfs_ioctl_quota_rescan_args' should be than passed as this ioctls third argument. BTRFS_IOC_QUOTA_RESCAN_WAIT - Waiting for a rescan operation to finish Wait until a rescan operation is finished (if there is a rescan operation running). The third ioctls argument is ignored. Implementation notes: Almost all of the ioctls in this patch use structure types as third arguments. That is the reason why aproppriate thunk definitions were added in file 'syscall_types.h'. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-8-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for two btrfs ioctls used for subvolumeFilip Bozuta3-0/+23
This patch implements functionality for following ioctl: BTRFS_IOC_DEFAULT_SUBVOL - Setting a default subvolume Set a default subvolume for a btrfs filesystem. The third ioctl's argument is a '__u64' (unsigned long long) which represents the id of a subvolume that is to be set as the default. BTRFS_IOC_GET_SUBVOL_ROOTREF - Getting tree and directory id of subvolumes Read tree and directory id of subvolumes from a btrfs filesystem. The tree and directory id's are returned in the ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_get_subvol_rootref_args { /* in/out, minimum id of rootref's treeid to be searched */ __u64 min_treeid; /* out */ struct { __u64 treeid; __u64 dirid; } rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM]; /* out, number of found items */ __u8 num_items; __u8 align[7]; }; Before calling this ioctl, 'min_treeid' field should be filled with value that represent the minimum value for the tree id. Implementation notes: Ioctl BTRFS_IOC_GET_SUBVOL_ROOTREF uses the above mentioned structure type as third argument. That is the reason why a aproppriate thunk structure definition is added in file 'syscall_types.h'. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-7-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for a group of btrfs inode ioctlsFilip Bozuta3-0/+57
This patch implements functionality of following ioctls: BTRFS_IOC_INO_LOOKUP - Reading tree root id and path Read tree root id and path for a given file or directory. The name and tree root id are returned in an ioctl's third argument that represents a pointer to a following type: struct btrfs_ioctl_ino_lookup_args { __u64 treeid; __u64 objectid; char name[BTRFS_INO_LOOKUP_PATH_MAX]; }; Before calling this ioctl, field 'objectid' should be filled with the object id value for which the tree id and path are to be read. Value 'BTRFS_FIRST_FREE_OBJECTID' represents the object id for the first available btrfs object (directory or file). BTRFS_IOC_INO_PATHS - Reading paths to all files Read path to all files with a certain inode number. The paths are returned in the ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_ino_path_args { __u64 inum; /* in */ __u64 size; /* in */ __u64 reserved[4]; /* struct btrfs_data_container *fspath; out */ __u64 fspath; /* out */ }; Before calling this ioctl, the 'inum' and 'size' field should be filled with the aproppriate inode number and size of the directory where file paths should be looked for. For now, the paths are returned in an '__u64' (unsigned long long) value 'fspath'. BTRFS_IOC_LOGICAL_INO - Reading inode numbers Read inode numbers for files on a certain logical adress. The inode numbers are returned in the ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_logical_ino_args { __u64 logical; /* in */ __u64 size; /* in */ __u64 reserved[3]; /* must be 0 for now */ __u64 flags; /* in, v2 only */ /* struct btrfs_data_container *inodes; out */ __u64 inodes; }; Before calling this ioctl, the 'logical' and 'size' field should be filled with the aproppriate logical adress and size of where the inode numbers of files should be looked for. For now, the inode numbers are returned in an '__u64' (unsigned long long) value 'inodes'. BTRFS_IOC_LOGICAL_INO_V2 - Reading inode numbers Same as the above mentioned ioctl except that it allows passing a flags 'BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET'. BTRFS_IOC_INO_LOOKUP_USER - Reading subvolume name and path Read name and path of a subvolume. The tree root id and path are read in an ioctl's third argument which represents a pointer to a following type: struct btrfs_ioctl_ino_lookup_user_args { /* in, inode number containing the subvolume of 'subvolid' */ __u64 dirid; /* in */ __u64 treeid; /* out, name of the subvolume of 'treeid' */ char name[BTRFS_VOL_NAME_MAX + 1]; /* * out, constructed path from the directory with which the ioctl is * called to dirid */ char path[BTRFS_INO_LOOKUP_USER_PATH_MAX]; }; Before calling this ioctl, the 'dirid' and 'treeid' field should be filled with aproppriate values which represent the inode number of the directory that contains the subvolume and treeid of the subvolume. Implementation notes: All of the ioctls in this patch use structure types as third arguments. That is the reason why aproppriate thunk definitions were added in file 'syscall_types.h'. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-6-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for btrfs ioctls used to get/set featuresFilip Bozuta3-0/+20
This patch implements functionality for following ioctls: BTRFS_IOC_GET_FEATURES - Getting feature flags Read feature flags for a btrfs filesystem. The feature flags are returned inside the ioctl's third argument which represents a pointer to a following structure type: struct btrfs_ioctl_feature_flags { __u64 compat_flags; __u64 compat_ro_flags; __u64 incompat_flags; }; All of the structure field represent bit masks that can be composed of values which can be found on: https://elixir.bootlin.com/linux/latest/source/fs/btrfs/ctree.h#L282 BTRFS_IOC_SET_FEATURES - Setting feature flags Set and clear feature flags for a btrfs filesystem. The feature flags are set using the ioctl's third argument which represents a 'struct btrfs_ioctl_feature_flags[2]' array. The first element of the array represent flags which are to be cleared and the second element of the array represent flags which are to be set. The second element has the priority over the first, which means that if there are matching flags in the elements, they will be set in the filesystem. If the flag values in the third argument aren't correctly set to be composed of the available predefined flag values, errno ENOPERM ("Operation not permitted") is returned. BTRFS_IOC_GET_SUPPORTED_FEATURES - Getting supported feature flags Read supported feature flags for a btrfs filesystem. The supported feature flags are read using the ioctl's third argument which represents a 'struct btrfs_ioctl_feature_flags[3]' array. The first element of this array represents all of the supported flags in the btrfs filesystem. The second element represents flags that can be safely set and third element represent flags that can be safely clearead. Implementation notes: All of the implemented ioctls use 'struct btrfs_ioctl_feature_flags' as third argument. That is the reason why a corresponding defintion was added in file 'linux-user/syscall_types.h'. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-5-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for btrfs ioctls used to manipulate with devicesFilip Bozuta3-1/+53
This patch implements functionality for following ioctls: BTRFS_IOC_SCAN_DEV - Scanning device for a btrfs filesystem Scan a device for a btrfs filesystem. The device that is to be scanned is passed in the ioctl's third argument which represents a pointer to a 'struct ioc_vol_args' (which was mentioned in a previous patch). Before calling this ioctl, the name field of this structure should be filled with the aproppriate name value which represents a path for the device. If the device contains a btrfs filesystem, the ioctl returns 0, otherwise a negative value is returned. BTRFS_IOC_ADD_DEV - Adding a device to a btrfs filesystem Add a device to a btrfs filesystem. The device that is to be added is passed in the ioctl's third argument which represents a pointer to a 'struct ioc_vol_args' (which was mentioned in a previous patch). Before calling this ioctl, the name field of this structure should be filled with the aproppriate name value which represents a path for the device. BTRFS_IOC_RM_DEV - Removing a device from a btrfs filesystem Remove a device from a btrfs filesystem. The device that is to be removed is passed in the ioctl's third argument which represents a pointer to a 'struct ioc_vol_args' (which was mentioned in a previous patch). Before calling this ioctl, the name field of this structure should be filled with the aproppriate name value which represents a path for the device. BTRFS_IOC_DEV_INFO - Getting information about a device Obtain information for device in a btrfs filesystem. The information is gathered in the ioctl's third argument which represents a pointer to a following structure type: struct btrfs_ioctl_dev_info_args { __u64 devid; /* in/out */ __u8 uuid[BTRFS_UUID_SIZE]; /* in/out */ __u64 bytes_used; /* out */ __u64 total_bytes; /* out */ __u64 unused[379]; /* pad to 4k */ __u8 path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */ }; Before calling this ioctl, field "devid" should be set with the id value for the device for which the information is to be obtained. If this field is not aproppriately set, the errno ENODEV ("No such device") is returned. BTRFS_IOC_GET_DEV_STATS - Getting device statistics Obtain stats informatin for device in a btrfs filesystem. The information is gathered in the ioctl's third argument which represents a pointer to a following structure type: struct btrfs_ioctl_get_dev_stats { __u64 devid; /* in */ __u64 nr_items; /* in/out */ __u64 flags; /* in/out */ /* out values: */ __u64 values[BTRFS_DEV_STAT_VALUES_MAX]; /* * This pads the struct to 1032 bytes. It was originally meant to pad to * 1024 bytes, but when adding the flags field, the padding calculation * was not adjusted. */ __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; }; Before calling this ioctl, field "devid" should be set with the id value for the device for which the information is to be obtained. If this field is not aproppriately set, the errno ENODEV ("No such device") is returned. BTRFS_IOC_FORGET_DEV - Remove unmounted devices Search and remove all stale devices (devices which are not mounted). The third ioctl argument is a pointer to a 'struct btrfs_ioctl_vol_args'. The ioctl call will release all unmounted devices which match the path which is specified in the "name" field of the structure. If an empty path ("") is specified, all unmounted devices will be released. Implementation notes: Ioctls BTRFS_IOC_DEV_INFO and BTRFS_IOC_GET_DEV_STATS use types 'struct btrfs_ioctl_dev_info_args' and ' struct btrfs_ioctl_get_dev_stats' as third argument types. That is the reason why corresponding structure definitions were added in file 'linux-user/syscall_types.h'. Since the thunk type for 'struct ioc_vol_args' was already added in a previous patch, the rest of the implementation was straightforward. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-4-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-09-03linux-user: Add support for a group of btrfs ioctls used for snapshotsFilip Bozuta3-1/+12
This patch implements functionality for following ioctls: BTRFS_IOC_SNAP_CREATE - Creating a subvolume snapshot Create a snapshot of a btrfs subvolume. The snapshot is created using the ioctl's third argument that is a pointer to a 'struct btrfs_ioctl_vol_args' (which was mentioned in the previous patch). Before calling this ioctl, the fields of the structure should be filled with aproppriate values for the file descriptor and path of the subvolume for which the snapshot is to be created. BTRFS_IOC_SNAP_DESTROY - Removing a subvolume snapshot Delete a snapshot of a btrfs subvolume. The snapshot is deleted using the ioctl's third argument that is a pointer to a 'struct btrfs_ioctl_vol_args' (which was mentioned in the previous patch). Before calling this ioctl, the fields of the structure should be filled with aproppriate values for the file descriptor and path of the subvolume for which the snapshot is to be deleted. Implementation notes: Since the thunk type 'struct btrfs_ioctl_vol_args' is defined in the previous patch, the implementation for these ioctls was straightforward. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Tested-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20200823195014.116226-3-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>