Am 31. März 2025 09:18:05 UTC schrieb "Daniel P. Berrangé"
<berra...@redhat.com>:
>On Sun, Mar 30, 2025 at 10:58:57PM +0200, Bernhard Beschow wrote:
>> Now that there is logging support in Rust for QEMU, use it in the pl011
>> device.
>>
>> Signed-off-by: Bernhard Beschow <shen...@gmail.com>
>> ---
>> rust/hw/char/pl011/src/device.rs | 12 ++++++++----
>> 1 file changed, 8 insertions(+), 4 deletions(-)
>>
>> diff --git a/rust/hw/char/pl011/src/device.rs
>> b/rust/hw/char/pl011/src/device.rs
>> index bf88e0b00a..d5470fae11 100644
>> --- a/rust/hw/char/pl011/src/device.rs
>> +++ b/rust/hw/char/pl011/src/device.rs
>> @@ -8,9 +8,11 @@
>> chardev::{CharBackend, Chardev, Event},
>> impl_vmstate_forward,
>> irq::{IRQState, InterruptSource},
>> + log::{LOG_GUEST_ERROR, LOG_UNIMP},
>> memory::{hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder},
>> prelude::*,
>> qdev::{Clock, ClockEvent, DeviceImpl, DeviceState, Property, ResetType,
>> ResettablePhasesImpl},
>> + qemu_log_mask,
>> qom::{ObjectImpl, Owned, ParentField},
>> static_assert,
>> sysbus::{SysBusDevice, SysBusDeviceImpl},
>> @@ -298,8 +300,7 @@ pub(self) fn write(
>> DMACR => {
>> self.dmacr = value;
>> if value & 3 > 0 {
>> - // qemu_log_mask(LOG_UNIMP, "pl011: DMA not
>> implemented\n");
>> - eprintln!("pl011: DMA not implemented");
>> + qemu_log_mask!(LOG_UNIMP, "pl011: DMA not
>> implemented\n");
>> }
>> }
>> }
>> @@ -535,7 +536,7 @@ fn read(&self, offset: hwaddr, _size: u32) -> u64 {
>> u64::from(device_id[(offset - 0xfe0) >> 2])
>> }
>> Err(_) => {
>> - // qemu_log_mask(LOG_GUEST_ERROR, "pl011_read: Bad offset
>> 0x%x\n", (int)offset);
>> + qemu_log_mask!(LOG_GUEST_ERROR, "pl011_read: Bad offset
>> {offset}\n");
>> 0
>> }
>> Ok(field) => {
>> @@ -567,7 +568,10 @@ fn write(&self, offset: hwaddr, value: u64, _size: u32)
>> {
>> .borrow_mut()
>> .write(field, value as u32, &self.char_backend);
>> } else {
>> - eprintln!("write bad offset {offset} value {value}");
>> + qemu_log_mask!(
>> + LOG_GUEST_ERROR,
>> + "pl011_write: Bad offset {offset} value {value}\n"
>> + );
>> }
>
>General conceptual question ..... I've never understood what the dividing
>line is between use of 'qemu_log_mask' and trace points.
I *think* it's the perspective: If you want to see any issues, regardless of
which device, use the -l option, i.e. qemu_log_mask(). If, however, you want to
see what a particular device does, use tracepoints.
>The latter can be
>optionally built to feed into qemu log, as well as the other dynamic trace
>backends.
The use of qemu_log() in qemu_log_mask() seems like an implementation detail to
me. Theoretically, qemu_log_mask() could use a different backend if this got
implemented, and wouldn't require code changes throughout QEMU.
Best regards,
Bernhard
>
>Is there a compelling reason to use 'qemu_log', that isn't acceptable for
>trace probe points ?
>
>This is an indirect way of asking whether qemu_log_mask should be exposed
>to rust, or would exposing tracing be sufficient ?
>
>With regards,
>Daniel