mbox

[PULL,00/48] i386, rust changes for 2024-01-24

Message ID 20250128112439.1225171-1-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show

Pull-request

https://gitlab.com/bonzini/qemu.git tags/for-upstream

Message

Paolo Bonzini Jan. 28, 2025, 11:24 a.m. UTC
The following changes since commit d6430c17d7113d3c38480dc34e59d00b0504e2f7:

  Merge tag 'pull-riscv-to-apply-20250119-1' of https://github.com/alistair23/qemu into staging (2025-01-19 08:55:46 -0500)

are available in the Git repository at:

  https://gitlab.com/bonzini/qemu.git tags/for-upstream

for you to fetch changes up to 021d8e747907d4a2226557bf9885d4c0fa6abd8b:

  rust: qemu-api: add sub-subclass to the integration tests (2025-01-28 12:22:54 +0100)

----------------------------------------------------------------
* target/i386: optimize string instructions
* target/i386: new Sierra Forest and Clearwater Forest models
* rust: type-safe vmstate implementation
* rust: use interior mutability for PL011
* rust: clean ups
* memtxattrs: remove usage of bitfields from MEMTXATTRS_UNSPECIFIED

----------------------------------------------------------------
Paolo Bonzini (37):
      rust: pl011: fix repr(C) for PL011Class
      target/i386: inline gen_jcc into sole caller
      target/i386: remove trailing 1 from gen_{j, cmov, set}cc1
      target/i386: unify REP and REPZ/REPNZ generation
      target/i386: unify choice between single and repeated string instructions
      target/i386: reorganize ops emitted by do_gen_rep, drop repz_opt
      target/i386: tcg: move gen_set/reset_* earlier in the file
      target/i386: fix RF handling for string instructions
      target/i386: make cc_op handling more explicit for repeated string instructions.
      target/i386: do not use gen_op_jz_ecx for repeated string operations
      target/i386: optimize CX handling in repeated string operations
      target/i386: execute multiple REP/REPZ iterations without leaving TB
      target/i386: pull computation of string update value out of loop
      target/i386: extract common bits of gen_repz/gen_repz_nz
      target/i386: avoid using s->tmp0 for add to implicit registers
      rust: vmstate: add new type safe implementation
      rust: vmstate: implement VMState for non-leaf types
      rust: vmstate: add varray support to vmstate_of!
      rust: vmstate: implement Zeroable for VMStateField
      rust: vmstate: implement VMState for scalar types
      rust: vmstate: add public utility macros to implement VMState
      rust: qemu_api: add vmstate_struct
      rust: pl011: switch vmstate to new-style macros
      rust: vmstate: remove translation of C vmstate macros
      rust: vmstate: make order of parameters consistent in vmstate_clock
      rust: prefer NonNull::new to assertions
      rust: pl011: remove unnecessary "extern crate"
      rust: pl011: hide unnecessarily "pub" items from outside pl011::device
      rust: pl011: extract conversion to RegisterOffset
      rust: pl011: extract CharBackend receive logic into a separate function
      rust: pl011: pull interrupt updates out of read/write ops
      rust: pl011: extract PL011Registers
      rust: pl011: wrap registers with BqlRefCell
      rust: pl011: remove duplicate definitions
      rust: pl011: pull device-specific code out of MemoryRegionOps callbacks
      rust: pl011: drop use of ControlFlow
      rust: qdev: make reset take a shared reference

Tao Su (4):
      target/i386: Introduce SierraForest-v2 model
      target/i386: Export BHI_NO bit to guests
      target/i386: Add new CPU model ClearwaterForest
      docs: Add GNR, SRF and CWF CPU models

Zhao Liu (7):
      stub: Fix build failure with --enable-user --disable-system --enable-tools
      rust/qdev: Make REALIZE safe
      rust/pl011: Avoid bindings::*
      memattrs: Convert unspecified member to bool
      memattrs: Check the size of MemTxAttrs
      rust/zeroable: Implement Zeroable with const_zero macro
      rust: qemu-api: add sub-subclass to the integration tests

 docs/system/cpu-models-x86.rst.inc     |  50 ++-
 include/exec/memattrs.h                |  21 +-
 target/i386/cpu.h                      |  33 +-
 target/i386/cpu.c                      | 156 +++++++-
 target/i386/tcg/translate.c            | 363 ++++++++++-------
 target/i386/tcg/emit.c.inc             |  55 +--
 rust/hw/char/pl011/src/device.rs       | 509 +++++++++++++-----------
 rust/hw/char/pl011/src/device_class.rs |  73 ++--
 rust/hw/char/pl011/src/lib.rs          |  69 ++--
 rust/hw/char/pl011/src/memory_ops.rs   |  25 +-
 rust/qemu-api/src/prelude.rs           |   2 +
 rust/qemu-api/src/qdev.rs              |  16 +-
 rust/qemu-api/src/qom.rs               |  21 +-
 rust/qemu-api/src/vmstate.rs           | 700 +++++++++++++++++++++------------
 rust/qemu-api/src/zeroable.rs          | 118 +++---
 rust/qemu-api/tests/tests.rs           |  56 ++-
 stubs/meson.build                      |   4 +-
 17 files changed, 1416 insertions(+), 855 deletions(-)

Comments

Stefan Hajnoczi Jan. 28, 2025, 2:19 p.m. UTC | #1
On Tue, Jan 28, 2025 at 6:25 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> The following changes since commit d6430c17d7113d3c38480dc34e59d00b0504e2f7:
>
>   Merge tag 'pull-riscv-to-apply-20250119-1' of https://github.com/alistair23/qemu into staging (2025-01-19 08:55:46 -0500)
>
> are available in the Git repository at:
>
>   https://gitlab.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to 021d8e747907d4a2226557bf9885d4c0fa6abd8b:
>
>   rust: qemu-api: add sub-subclass to the integration tests (2025-01-28 12:22:54 +0100)

CI is hitting the following failure (see default.log):

thread '<unnamed>' panicked at 'already borrowed',
rust/qemu-api/libqemu_api.rlib.p/structured/cell.rs:450:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 5

https://gitlab.com/qemu-project/qemu/-/jobs/8972076251/artifacts/browse/build/tests/functional/arm/test_arm_tuxrun.TuxRunArmTest.test_armv7be/

Do you want to include a patch that sets RUST_BACKTRACE=1 in the test
environment so the backtrace is captured in the logs?

Thanks,
Stefan

>
> ----------------------------------------------------------------
> * target/i386: optimize string instructions
> * target/i386: new Sierra Forest and Clearwater Forest models
> * rust: type-safe vmstate implementation
> * rust: use interior mutability for PL011
> * rust: clean ups
> * memtxattrs: remove usage of bitfields from MEMTXATTRS_UNSPECIFIED
>
> ----------------------------------------------------------------
> Paolo Bonzini (37):
>       rust: pl011: fix repr(C) for PL011Class
>       target/i386: inline gen_jcc into sole caller
>       target/i386: remove trailing 1 from gen_{j, cmov, set}cc1
>       target/i386: unify REP and REPZ/REPNZ generation
>       target/i386: unify choice between single and repeated string instructions
>       target/i386: reorganize ops emitted by do_gen_rep, drop repz_opt
>       target/i386: tcg: move gen_set/reset_* earlier in the file
>       target/i386: fix RF handling for string instructions
>       target/i386: make cc_op handling more explicit for repeated string instructions.
>       target/i386: do not use gen_op_jz_ecx for repeated string operations
>       target/i386: optimize CX handling in repeated string operations
>       target/i386: execute multiple REP/REPZ iterations without leaving TB
>       target/i386: pull computation of string update value out of loop
>       target/i386: extract common bits of gen_repz/gen_repz_nz
>       target/i386: avoid using s->tmp0 for add to implicit registers
>       rust: vmstate: add new type safe implementation
>       rust: vmstate: implement VMState for non-leaf types
>       rust: vmstate: add varray support to vmstate_of!
>       rust: vmstate: implement Zeroable for VMStateField
>       rust: vmstate: implement VMState for scalar types
>       rust: vmstate: add public utility macros to implement VMState
>       rust: qemu_api: add vmstate_struct
>       rust: pl011: switch vmstate to new-style macros
>       rust: vmstate: remove translation of C vmstate macros
>       rust: vmstate: make order of parameters consistent in vmstate_clock
>       rust: prefer NonNull::new to assertions
>       rust: pl011: remove unnecessary "extern crate"
>       rust: pl011: hide unnecessarily "pub" items from outside pl011::device
>       rust: pl011: extract conversion to RegisterOffset
>       rust: pl011: extract CharBackend receive logic into a separate function
>       rust: pl011: pull interrupt updates out of read/write ops
>       rust: pl011: extract PL011Registers
>       rust: pl011: wrap registers with BqlRefCell
>       rust: pl011: remove duplicate definitions
>       rust: pl011: pull device-specific code out of MemoryRegionOps callbacks
>       rust: pl011: drop use of ControlFlow
>       rust: qdev: make reset take a shared reference
>
> Tao Su (4):
>       target/i386: Introduce SierraForest-v2 model
>       target/i386: Export BHI_NO bit to guests
>       target/i386: Add new CPU model ClearwaterForest
>       docs: Add GNR, SRF and CWF CPU models
>
> Zhao Liu (7):
>       stub: Fix build failure with --enable-user --disable-system --enable-tools
>       rust/qdev: Make REALIZE safe
>       rust/pl011: Avoid bindings::*
>       memattrs: Convert unspecified member to bool
>       memattrs: Check the size of MemTxAttrs
>       rust/zeroable: Implement Zeroable with const_zero macro
>       rust: qemu-api: add sub-subclass to the integration tests
>
>  docs/system/cpu-models-x86.rst.inc     |  50 ++-
>  include/exec/memattrs.h                |  21 +-
>  target/i386/cpu.h                      |  33 +-
>  target/i386/cpu.c                      | 156 +++++++-
>  target/i386/tcg/translate.c            | 363 ++++++++++-------
>  target/i386/tcg/emit.c.inc             |  55 +--
>  rust/hw/char/pl011/src/device.rs       | 509 +++++++++++++-----------
>  rust/hw/char/pl011/src/device_class.rs |  73 ++--
>  rust/hw/char/pl011/src/lib.rs          |  69 ++--
>  rust/hw/char/pl011/src/memory_ops.rs   |  25 +-
>  rust/qemu-api/src/prelude.rs           |   2 +
>  rust/qemu-api/src/qdev.rs              |  16 +-
>  rust/qemu-api/src/qom.rs               |  21 +-
>  rust/qemu-api/src/vmstate.rs           | 700 +++++++++++++++++++++------------
>  rust/qemu-api/src/zeroable.rs          | 118 +++---
>  rust/qemu-api/tests/tests.rs           |  56 ++-
>  stubs/meson.build                      |   4 +-
>  17 files changed, 1416 insertions(+), 855 deletions(-)
> --
> 2.48.1
>
>
Paolo Bonzini Jan. 28, 2025, 4:11 p.m. UTC | #2
On 1/28/25 15:19, Stefan Hajnoczi wrote:
> thread '<unnamed>' panicked at 'already borrowed',
> rust/qemu-api/libqemu_api.rlib.p/structured/cell.rs:450:5
> note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
> fatal runtime error: failed to initiate panic, error 5
> 
> https://gitlab.com/qemu-project/qemu/-/jobs/8972076251/artifacts/browse/build/tests/functional/arm/test_arm_tuxrun.TuxRunArmTest.test_armv7be/

Hmm, this one does not reproduce locally.  I've started a
QEMU_CI_AVOCADO_TESTING run.

> Do you want to include a patch that sets RUST_BACKTRACE=1 in the test
> environment so the backtrace is captured in the logs?
Yeah, I'll send one in the next version of the pull request.  The 
BqlRefCell issues are easy to track (because you cannot drop the BQL 
while you have an outstanding borrow, unlike regular Rust RefCells), but 
you do need a backtrace...

Paolo