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

Reply via email to