All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events
@ 2019-11-18 21:04 ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, qemu-block, Aleksandar Markovic, Kevin Wolf,
	Aleksandar Rikalo, qemu-trivial

Eric noted in [1] the dtrace via stap backend can not support
the dynamic '*' width format.
I'd really like to use dynamic width in trace event because the
read/write accesses are easier to read but it is not a priority.
Since next release is close, time to fix LP#1844817 [2].

Since v2:
- addressed Eric review comments from v2
- improved the documentation

Since v1:
- Do not update the qemu_log_mask() calls in hw/mips/gt64xxx_pci.c

[1] https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg04720.html
[2] https://bugs.launchpad.net/qemu/+bug/1844817

Philippe Mathieu-Daudé (3):
  hw/block/pflash: Remove dynamic field width from trace events
  hw/mips/gt64xxx: Remove dynamic field width from trace events
  trace: Forbid dynamic field width in event format

 docs/devel/tracing.txt        |  3 ++-
 hw/block/pflash_cfi01.c       |  8 ++++----
 hw/block/pflash_cfi02.c       |  8 ++++----
 hw/mips/gt64xxx_pci.c         | 16 ++++++++--------
 hw/block/trace-events         |  8 ++++----
 hw/mips/trace-events          |  4 ++--
 scripts/tracetool/__init__.py |  3 +++
 7 files changed, 27 insertions(+), 23 deletions(-)

-- 
2.21.0



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events
@ 2019-11-18 21:04 ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo,
	Philippe Mathieu-Daudé, Aurelien Jarno

Eric noted in [1] the dtrace via stap backend can not support
the dynamic '*' width format.
I'd really like to use dynamic width in trace event because the
read/write accesses are easier to read but it is not a priority.
Since next release is close, time to fix LP#1844817 [2].

Since v2:
- addressed Eric review comments from v2
- improved the documentation

Since v1:
- Do not update the qemu_log_mask() calls in hw/mips/gt64xxx_pci.c

[1] https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg04720.html
[2] https://bugs.launchpad.net/qemu/+bug/1844817

Philippe Mathieu-Daudé (3):
  hw/block/pflash: Remove dynamic field width from trace events
  hw/mips/gt64xxx: Remove dynamic field width from trace events
  trace: Forbid dynamic field width in event format

 docs/devel/tracing.txt        |  3 ++-
 hw/block/pflash_cfi01.c       |  8 ++++----
 hw/block/pflash_cfi02.c       |  8 ++++----
 hw/mips/gt64xxx_pci.c         | 16 ++++++++--------
 hw/block/trace-events         |  8 ++++----
 hw/mips/trace-events          |  4 ++--
 scripts/tracetool/__init__.py |  3 +++
 7 files changed, 27 insertions(+), 23 deletions(-)

-- 
2.21.0



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 1/3] hw/block/pflash: Remove dynamic field width from trace events
  2019-11-18 21:04 ` Philippe Mathieu-Daudé
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  -1 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, qemu-block, Aleksandar Markovic, Kevin Wolf,
	Aleksandar Rikalo, qemu-trivial

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), replace by a static field
width instead.

We previously passed to the trace API 'width << 1' as the number
of hex characters to display (the dynamic field width). We don't
need this anymore. Instead, display the size of bytes accessed.

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3: display size (in byte)

 hw/block/pflash_cfi01.c | 8 ++++----
 hw/block/pflash_cfi02.c | 8 ++++----
 hw/block/trace-events   | 8 ++++----
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index 566c0acb77..54e6ebd385 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -276,7 +276,7 @@ static uint32_t pflash_data_read(PFlashCFI01 *pfl, hwaddr offset,
         DPRINTF("BUG in %s\n", __func__);
         abort();
     }
-    trace_pflash_data_read(offset, width << 1, ret);
+    trace_pflash_data_read(offset, width, ret);
     return ret;
 }
 
@@ -389,7 +389,7 @@ static uint32_t pflash_read(PFlashCFI01 *pfl, hwaddr offset,
 
         break;
     }
-    trace_pflash_io_read(offset, width, width << 1, ret, pfl->cmd, pfl->wcycle);
+    trace_pflash_io_read(offset, width, ret, pfl->cmd, pfl->wcycle);
 
     return ret;
 }
@@ -414,7 +414,7 @@ static inline void pflash_data_write(PFlashCFI01 *pfl, hwaddr offset,
 {
     uint8_t *p = pfl->storage;
 
-    trace_pflash_data_write(offset, width << 1, value, pfl->counter);
+    trace_pflash_data_write(offset, width, value, pfl->counter);
     switch (width) {
     case 1:
         p[offset] = value;
@@ -453,7 +453,7 @@ static void pflash_write(PFlashCFI01 *pfl, hwaddr offset,
 
     cmd = value;
 
-    trace_pflash_io_write(offset, width, width << 1, value, pfl->wcycle);
+    trace_pflash_io_write(offset, width, value, pfl->wcycle);
     if (!pfl->wcycle) {
         /* Set the device in I/O access mode */
         memory_region_rom_device_set_romd(&pfl->mem, false);
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
index 4baca701b7..c7d92c3e79 100644
--- a/hw/block/pflash_cfi02.c
+++ b/hw/block/pflash_cfi02.c
@@ -260,7 +260,7 @@ static uint64_t pflash_data_read(PFlashCFI02 *pfl, hwaddr offset,
 {
     uint8_t *p = (uint8_t *)pfl->storage + offset;
     uint64_t ret = pfl->be ? ldn_be_p(p, width) : ldn_le_p(p, width);
-    trace_pflash_data_read(offset, width << 1, ret);
+    trace_pflash_data_read(offset, width, ret);
     return ret;
 }
 
@@ -385,7 +385,7 @@ static uint64_t pflash_read(void *opaque, hwaddr offset, unsigned int width)
         }
         break;
     }
-    trace_pflash_io_read(offset, width, width << 1, ret, pfl->cmd, pfl->wcycle);
+    trace_pflash_io_read(offset, width, ret, pfl->cmd, pfl->wcycle);
 
     return ret;
 }
@@ -432,7 +432,7 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
     uint8_t *p;
     uint8_t cmd;
 
-    trace_pflash_io_write(offset, width, width << 1, value, pfl->wcycle);
+    trace_pflash_io_write(offset, width, value, pfl->wcycle);
     cmd = value;
     if (pfl->cmd != 0xA0) {
         /* Reset does nothing during chip erase and sector erase. */
@@ -542,7 +542,7 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
                 }
                 goto reset_flash;
             }
-            trace_pflash_data_write(offset, width << 1, value, 0);
+            trace_pflash_data_write(offset, width, value, 0);
             if (!pfl->ro) {
                 p = (uint8_t *)pfl->storage + offset;
                 if (pfl->be) {
diff --git a/hw/block/trace-events b/hw/block/trace-events
index 13d1b21dd4..c03e80c2c9 100644
--- a/hw/block/trace-events
+++ b/hw/block/trace-events
@@ -8,10 +8,10 @@ fdc_ioport_write(uint8_t reg, uint8_t value) "write reg 0x%02x val 0x%02x"
 # pflash_cfi01.c
 pflash_reset(void) "reset"
 pflash_timer_expired(uint8_t cmd) "command 0x%02x done"
-pflash_io_read(uint64_t offset, int width, int fmt_width, uint32_t value, uint8_t cmd, uint8_t wcycle) "offset:0x%04"PRIx64" width:%d value:0x%0*x cmd:0x%02x wcycle:%u"
-pflash_io_write(uint64_t offset, int width, int fmt_width, uint32_t value, uint8_t wcycle) "offset:0x%04"PRIx64" width:%d value:0x%0*x wcycle:%u"
-pflash_data_read(uint64_t offset, int width, uint32_t value) "data offset:0x%04"PRIx64" value:0x%0*x"
-pflash_data_write(uint64_t offset, int width, uint32_t value, uint64_t counter) "data offset:0x%04"PRIx64" value:0x%0*x counter:0x%016"PRIx64
+pflash_io_read(uint64_t offset, unsigned size, uint32_t value, uint8_t cmd, uint8_t wcycle) "offset:0x%04"PRIx64" size:%u value:0x%04x cmd:0x%02x wcycle:%u"
+pflash_io_write(uint64_t offset, unsigned size, uint32_t value, uint8_t wcycle) "offset:0x%04"PRIx64" size:%u value:0x%04x wcycle:%u"
+pflash_data_read(uint64_t offset, unsigned size, uint32_t value) "data offset:0x%04"PRIx64" size:%u value:0x%04x"
+pflash_data_write(uint64_t offset, unsigned size, uint32_t value, uint64_t counter) "data offset:0x%04"PRIx64" size:%u value:0x%04x counter:0x%016"PRIx64
 pflash_manufacturer_id(uint16_t id) "Read Manufacturer ID: 0x%04x"
 pflash_device_id(uint16_t id) "Read Device ID: 0x%04x"
 pflash_device_info(uint64_t offset) "Read Device Information offset:0x%04"PRIx64
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 1/3] hw/block/pflash: Remove dynamic field width from trace events
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo,
	Philippe Mathieu-Daudé, Aurelien Jarno

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), replace by a static field
width instead.

We previously passed to the trace API 'width << 1' as the number
of hex characters to display (the dynamic field width). We don't
need this anymore. Instead, display the size of bytes accessed.

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3: display size (in byte)

 hw/block/pflash_cfi01.c | 8 ++++----
 hw/block/pflash_cfi02.c | 8 ++++----
 hw/block/trace-events   | 8 ++++----
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index 566c0acb77..54e6ebd385 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -276,7 +276,7 @@ static uint32_t pflash_data_read(PFlashCFI01 *pfl, hwaddr offset,
         DPRINTF("BUG in %s\n", __func__);
         abort();
     }
-    trace_pflash_data_read(offset, width << 1, ret);
+    trace_pflash_data_read(offset, width, ret);
     return ret;
 }
 
@@ -389,7 +389,7 @@ static uint32_t pflash_read(PFlashCFI01 *pfl, hwaddr offset,
 
         break;
     }
-    trace_pflash_io_read(offset, width, width << 1, ret, pfl->cmd, pfl->wcycle);
+    trace_pflash_io_read(offset, width, ret, pfl->cmd, pfl->wcycle);
 
     return ret;
 }
@@ -414,7 +414,7 @@ static inline void pflash_data_write(PFlashCFI01 *pfl, hwaddr offset,
 {
     uint8_t *p = pfl->storage;
 
-    trace_pflash_data_write(offset, width << 1, value, pfl->counter);
+    trace_pflash_data_write(offset, width, value, pfl->counter);
     switch (width) {
     case 1:
         p[offset] = value;
@@ -453,7 +453,7 @@ static void pflash_write(PFlashCFI01 *pfl, hwaddr offset,
 
     cmd = value;
 
-    trace_pflash_io_write(offset, width, width << 1, value, pfl->wcycle);
+    trace_pflash_io_write(offset, width, value, pfl->wcycle);
     if (!pfl->wcycle) {
         /* Set the device in I/O access mode */
         memory_region_rom_device_set_romd(&pfl->mem, false);
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
index 4baca701b7..c7d92c3e79 100644
--- a/hw/block/pflash_cfi02.c
+++ b/hw/block/pflash_cfi02.c
@@ -260,7 +260,7 @@ static uint64_t pflash_data_read(PFlashCFI02 *pfl, hwaddr offset,
 {
     uint8_t *p = (uint8_t *)pfl->storage + offset;
     uint64_t ret = pfl->be ? ldn_be_p(p, width) : ldn_le_p(p, width);
-    trace_pflash_data_read(offset, width << 1, ret);
+    trace_pflash_data_read(offset, width, ret);
     return ret;
 }
 
@@ -385,7 +385,7 @@ static uint64_t pflash_read(void *opaque, hwaddr offset, unsigned int width)
         }
         break;
     }
-    trace_pflash_io_read(offset, width, width << 1, ret, pfl->cmd, pfl->wcycle);
+    trace_pflash_io_read(offset, width, ret, pfl->cmd, pfl->wcycle);
 
     return ret;
 }
@@ -432,7 +432,7 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
     uint8_t *p;
     uint8_t cmd;
 
-    trace_pflash_io_write(offset, width, width << 1, value, pfl->wcycle);
+    trace_pflash_io_write(offset, width, value, pfl->wcycle);
     cmd = value;
     if (pfl->cmd != 0xA0) {
         /* Reset does nothing during chip erase and sector erase. */
@@ -542,7 +542,7 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
                 }
                 goto reset_flash;
             }
-            trace_pflash_data_write(offset, width << 1, value, 0);
+            trace_pflash_data_write(offset, width, value, 0);
             if (!pfl->ro) {
                 p = (uint8_t *)pfl->storage + offset;
                 if (pfl->be) {
diff --git a/hw/block/trace-events b/hw/block/trace-events
index 13d1b21dd4..c03e80c2c9 100644
--- a/hw/block/trace-events
+++ b/hw/block/trace-events
@@ -8,10 +8,10 @@ fdc_ioport_write(uint8_t reg, uint8_t value) "write reg 0x%02x val 0x%02x"
 # pflash_cfi01.c
 pflash_reset(void) "reset"
 pflash_timer_expired(uint8_t cmd) "command 0x%02x done"
-pflash_io_read(uint64_t offset, int width, int fmt_width, uint32_t value, uint8_t cmd, uint8_t wcycle) "offset:0x%04"PRIx64" width:%d value:0x%0*x cmd:0x%02x wcycle:%u"
-pflash_io_write(uint64_t offset, int width, int fmt_width, uint32_t value, uint8_t wcycle) "offset:0x%04"PRIx64" width:%d value:0x%0*x wcycle:%u"
-pflash_data_read(uint64_t offset, int width, uint32_t value) "data offset:0x%04"PRIx64" value:0x%0*x"
-pflash_data_write(uint64_t offset, int width, uint32_t value, uint64_t counter) "data offset:0x%04"PRIx64" value:0x%0*x counter:0x%016"PRIx64
+pflash_io_read(uint64_t offset, unsigned size, uint32_t value, uint8_t cmd, uint8_t wcycle) "offset:0x%04"PRIx64" size:%u value:0x%04x cmd:0x%02x wcycle:%u"
+pflash_io_write(uint64_t offset, unsigned size, uint32_t value, uint8_t wcycle) "offset:0x%04"PRIx64" size:%u value:0x%04x wcycle:%u"
+pflash_data_read(uint64_t offset, unsigned size, uint32_t value) "data offset:0x%04"PRIx64" size:%u value:0x%04x"
+pflash_data_write(uint64_t offset, unsigned size, uint32_t value, uint64_t counter) "data offset:0x%04"PRIx64" size:%u value:0x%04x counter:0x%016"PRIx64
 pflash_manufacturer_id(uint16_t id) "Read Manufacturer ID: 0x%04x"
 pflash_device_id(uint16_t id) "Read Device ID: 0x%04x"
 pflash_device_info(uint64_t offset) "Read Device Information offset:0x%04"PRIx64
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: Remove dynamic field width from trace events
  2019-11-18 21:04 ` Philippe Mathieu-Daudé
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  -1 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, qemu-block, Aleksandar Markovic, Kevin Wolf,
	Aleksandar Rikalo, qemu-trivial

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), replace by a static field
width instead.

We previously passed to the trace API 'width << 1' as the number
of hex characters to display (the dynamic field width). We don't
need this anymore. Instead, display the size of bytes accessed.

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v2: Do not update qemu_log_mask()
v3: display size (in byte)
---
 hw/mips/gt64xxx_pci.c | 16 ++++++++--------
 hw/mips/trace-events  |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/hw/mips/gt64xxx_pci.c b/hw/mips/gt64xxx_pci.c
index 5cab9c1ee1..f1af840d8e 100644
--- a/hw/mips/gt64xxx_pci.c
+++ b/hw/mips/gt64xxx_pci.c
@@ -642,19 +642,19 @@ static void gt64120_writel(void *opaque, hwaddr addr,
         /* not really implemented */
         s->regs[saddr] = ~(~(s->regs[saddr]) | ~(val & 0xfffffffe));
         s->regs[saddr] |= !!(s->regs[saddr] & 0xfffffffe);
-        trace_gt64120_write("INTRCAUSE", size << 1, val);
+        trace_gt64120_write("INTRCAUSE", size, val);
         break;
     case GT_INTRMASK:
         s->regs[saddr] = val & 0x3c3ffffe;
-        trace_gt64120_write("INTRMASK", size << 1, val);
+        trace_gt64120_write("INTRMASK", size, val);
         break;
     case GT_PCI0_ICMASK:
         s->regs[saddr] = val & 0x03fffffe;
-        trace_gt64120_write("ICMASK", size << 1, val);
+        trace_gt64120_write("ICMASK", size, val);
         break;
     case GT_PCI0_SERR0MASK:
         s->regs[saddr] = val & 0x0000003f;
-        trace_gt64120_write("SERR0MASK", size << 1, val);
+        trace_gt64120_write("SERR0MASK", size, val);
         break;
 
     /* Reserved when only PCI_0 is configured. */
@@ -930,19 +930,19 @@ static uint64_t gt64120_readl(void *opaque,
     /* Interrupts */
     case GT_INTRCAUSE:
         val = s->regs[saddr];
-        trace_gt64120_read("INTRCAUSE", size << 1, val);
+        trace_gt64120_read("INTRCAUSE", size, val);
         break;
     case GT_INTRMASK:
         val = s->regs[saddr];
-        trace_gt64120_read("INTRMASK", size << 1, val);
+        trace_gt64120_read("INTRMASK", size, val);
         break;
     case GT_PCI0_ICMASK:
         val = s->regs[saddr];
-        trace_gt64120_read("ICMASK", size << 1, val);
+        trace_gt64120_read("ICMASK", size, val);
         break;
     case GT_PCI0_SERR0MASK:
         val = s->regs[saddr];
-        trace_gt64120_read("SERR0MASK", size << 1, val);
+        trace_gt64120_read("SERR0MASK", size, val);
         break;
 
     /* Reserved when only PCI_0 is configured. */
diff --git a/hw/mips/trace-events b/hw/mips/trace-events
index 75d4c73f2e..321933283f 100644
--- a/hw/mips/trace-events
+++ b/hw/mips/trace-events
@@ -1,4 +1,4 @@
 # gt64xxx.c
-gt64120_read(const char *regname, int width, uint64_t value) "gt64120 read %s value:0x%0*" PRIx64
-gt64120_write(const char *regname, int width, uint64_t value) "gt64120 write %s value:0x%0*" PRIx64
+gt64120_read(const char *regname, unsigned size, uint64_t value) "gt64120 read %s size:%u value:0x%08" PRIx64
+gt64120_write(const char *regname, unsigned size, uint64_t value) "gt64120 write %s size:%u value:0x%08" PRIx64
 gt64120_isd_remap(uint64_t from_length, uint64_t from_addr, uint64_t to_length, uint64_t to_addr) "ISD: 0x%08" PRIx64 "@0x%08" PRIx64 " -> 0x%08" PRIx64 "@0x%08" PRIx64
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: Remove dynamic field width from trace events
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo,
	Philippe Mathieu-Daudé, Aurelien Jarno

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), replace by a static field
width instead.

We previously passed to the trace API 'width << 1' as the number
of hex characters to display (the dynamic field width). We don't
need this anymore. Instead, display the size of bytes accessed.

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v2: Do not update qemu_log_mask()
v3: display size (in byte)
---
 hw/mips/gt64xxx_pci.c | 16 ++++++++--------
 hw/mips/trace-events  |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/hw/mips/gt64xxx_pci.c b/hw/mips/gt64xxx_pci.c
index 5cab9c1ee1..f1af840d8e 100644
--- a/hw/mips/gt64xxx_pci.c
+++ b/hw/mips/gt64xxx_pci.c
@@ -642,19 +642,19 @@ static void gt64120_writel(void *opaque, hwaddr addr,
         /* not really implemented */
         s->regs[saddr] = ~(~(s->regs[saddr]) | ~(val & 0xfffffffe));
         s->regs[saddr] |= !!(s->regs[saddr] & 0xfffffffe);
-        trace_gt64120_write("INTRCAUSE", size << 1, val);
+        trace_gt64120_write("INTRCAUSE", size, val);
         break;
     case GT_INTRMASK:
         s->regs[saddr] = val & 0x3c3ffffe;
-        trace_gt64120_write("INTRMASK", size << 1, val);
+        trace_gt64120_write("INTRMASK", size, val);
         break;
     case GT_PCI0_ICMASK:
         s->regs[saddr] = val & 0x03fffffe;
-        trace_gt64120_write("ICMASK", size << 1, val);
+        trace_gt64120_write("ICMASK", size, val);
         break;
     case GT_PCI0_SERR0MASK:
         s->regs[saddr] = val & 0x0000003f;
-        trace_gt64120_write("SERR0MASK", size << 1, val);
+        trace_gt64120_write("SERR0MASK", size, val);
         break;
 
     /* Reserved when only PCI_0 is configured. */
@@ -930,19 +930,19 @@ static uint64_t gt64120_readl(void *opaque,
     /* Interrupts */
     case GT_INTRCAUSE:
         val = s->regs[saddr];
-        trace_gt64120_read("INTRCAUSE", size << 1, val);
+        trace_gt64120_read("INTRCAUSE", size, val);
         break;
     case GT_INTRMASK:
         val = s->regs[saddr];
-        trace_gt64120_read("INTRMASK", size << 1, val);
+        trace_gt64120_read("INTRMASK", size, val);
         break;
     case GT_PCI0_ICMASK:
         val = s->regs[saddr];
-        trace_gt64120_read("ICMASK", size << 1, val);
+        trace_gt64120_read("ICMASK", size, val);
         break;
     case GT_PCI0_SERR0MASK:
         val = s->regs[saddr];
-        trace_gt64120_read("SERR0MASK", size << 1, val);
+        trace_gt64120_read("SERR0MASK", size, val);
         break;
 
     /* Reserved when only PCI_0 is configured. */
diff --git a/hw/mips/trace-events b/hw/mips/trace-events
index 75d4c73f2e..321933283f 100644
--- a/hw/mips/trace-events
+++ b/hw/mips/trace-events
@@ -1,4 +1,4 @@
 # gt64xxx.c
-gt64120_read(const char *regname, int width, uint64_t value) "gt64120 read %s value:0x%0*" PRIx64
-gt64120_write(const char *regname, int width, uint64_t value) "gt64120 write %s value:0x%0*" PRIx64
+gt64120_read(const char *regname, unsigned size, uint64_t value) "gt64120 read %s size:%u value:0x%08" PRIx64
+gt64120_write(const char *regname, unsigned size, uint64_t value) "gt64120 write %s size:%u value:0x%08" PRIx64
 gt64120_isd_remap(uint64_t from_length, uint64_t from_addr, uint64_t to_length, uint64_t to_addr) "ISD: 0x%08" PRIx64 "@0x%08" PRIx64 " -> 0x%08" PRIx64 "@0x%08" PRIx64
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
  2019-11-18 21:04 ` Philippe Mathieu-Daudé
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  -1 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, qemu-block, Aleksandar Markovic, Kevin Wolf,
	Aleksandar Rikalo, qemu-trivial

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), forbid them.

Add a check to refuse field width in new formats:

  $ make
  [...]
    GEN     hw/block/trace.h
  Traceback (most recent call last):
    File "scripts/tracetool.py", line 152, in <module>
      main(sys.argv)
    File "scripts/tracetool.py", line 143, in main
      events.extend(tracetool.read_events(fh, arg))
    File "scripts/tracetool/__init__.py", line 371, in read_events
      event = Event.build(line)
    File "scripts/tracetool/__init__.py", line 285, in build
      raise ValueError("Event format must not contain field width '%*'")
  ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3:
- use better regex provided by Eric,
- instead of re.match(), use re.search() which takes unanchored regex,
- added a comment in tracing.txt
---
 docs/devel/tracing.txt        | 3 ++-
 scripts/tracetool/__init__.py | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt
index 8c0376fefa..6c01ce801e 100644
--- a/docs/devel/tracing.txt
+++ b/docs/devel/tracing.txt
@@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
 special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
 respectively.  This ensures portability between 32- and 64-bit platforms.
 Format strings must not end with a newline character.  It is the responsibility
-of backends to adapt line ending for proper logging.
+of backends to adapt line ending for proper logging.  Format strings must not
+use numeric field width dynamic precision (SystemTap does not support them).
 
 Each event declaration will start with the event name, then its arguments,
 finally a format string for pretty-printing. For example:
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 44c118bc2a..ec7fe9fa4a 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -206,6 +206,7 @@ class Event(object):
                       "\s*"
                       "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
                       "\s*")
+    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
 
     _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
 
@@ -280,6 +281,8 @@ class Event(object):
         if fmt.endswith(r'\n"'):
             raise ValueError("Event format must not end with a newline "
                              "character")
+        if Event._DFWRE.search(fmt):
+            raise ValueError("Event format must not contain field width '%*'")
 
         if len(fmt_trans) > 0:
             fmt = [fmt_trans, fmt]
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
@ 2019-11-18 21:04   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:04 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo,
	Philippe Mathieu-Daudé, Aurelien Jarno

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), forbid them.

Add a check to refuse field width in new formats:

  $ make
  [...]
    GEN     hw/block/trace.h
  Traceback (most recent call last):
    File "scripts/tracetool.py", line 152, in <module>
      main(sys.argv)
    File "scripts/tracetool.py", line 143, in main
      events.extend(tracetool.read_events(fh, arg))
    File "scripts/tracetool/__init__.py", line 371, in read_events
      event = Event.build(line)
    File "scripts/tracetool/__init__.py", line 285, in build
      raise ValueError("Event format must not contain field width '%*'")
  ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3:
- use better regex provided by Eric,
- instead of re.match(), use re.search() which takes unanchored regex,
- added a comment in tracing.txt
---
 docs/devel/tracing.txt        | 3 ++-
 scripts/tracetool/__init__.py | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt
index 8c0376fefa..6c01ce801e 100644
--- a/docs/devel/tracing.txt
+++ b/docs/devel/tracing.txt
@@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
 special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
 respectively.  This ensures portability between 32- and 64-bit platforms.
 Format strings must not end with a newline character.  It is the responsibility
-of backends to adapt line ending for proper logging.
+of backends to adapt line ending for proper logging.  Format strings must not
+use numeric field width dynamic precision (SystemTap does not support them).
 
 Each event declaration will start with the event name, then its arguments,
 finally a format string for pretty-printing. For example:
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 44c118bc2a..ec7fe9fa4a 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -206,6 +206,7 @@ class Event(object):
                       "\s*"
                       "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
                       "\s*")
+    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
 
     _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
 
@@ -280,6 +281,8 @@ class Event(object):
         if fmt.endswith(r'\n"'):
             raise ValueError("Event format must not end with a newline "
                              "character")
+        if Event._DFWRE.search(fmt):
+            raise ValueError("Event format must not contain field width '%*'")
 
         if len(fmt_trans) > 0:
             fmt = [fmt_trans, fmt]
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 1/3] hw/block/pflash: Remove dynamic field width from trace events
  2019-11-18 21:04   ` Philippe Mathieu-Daudé
@ 2019-11-18 21:15     ` Eric Blake
  -1 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:15 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Stefan Hajnoczi, qemu-block,
	Aleksandar Markovic, Kevin Wolf, Aleksandar Rikalo, qemu-trivial

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), replace by a static field
> width instead.
> 
> We previously passed to the trace API 'width << 1' as the number
> of hex characters to display (the dynamic field width). We don't
> need this anymore. Instead, display the size of bytes accessed.
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Is it worth a Fixes: XXX calling out the commit that introduced the '*'?

/me goes and searches

Fixes: e8aa2d95ea
Fixes: c1474acd5d

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 1/3] hw/block/pflash: Remove dynamic field width from trace events
@ 2019-11-18 21:15     ` Eric Blake
  0 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:15 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), replace by a static field
> width instead.
> 
> We previously passed to the trace API 'width << 1' as the number
> of hex characters to display (the dynamic field width). We don't
> need this anymore. Instead, display the size of bytes accessed.
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Is it worth a Fixes: XXX calling out the commit that introduced the '*'?

/me goes and searches

Fixes: e8aa2d95ea
Fixes: c1474acd5d

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: Remove dynamic field width from trace events
  2019-11-18 21:04   ` Philippe Mathieu-Daudé
@ 2019-11-18 21:17     ` Eric Blake
  -1 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:17 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Stefan Hajnoczi, qemu-block,
	Aleksandar Markovic, Kevin Wolf, Aleksandar Rikalo, qemu-trivial

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), replace by a static field
> width instead.
> 
> We previously passed to the trace API 'width << 1' as the number
> of hex characters to display (the dynamic field width). We don't
> need this anymore. Instead, display the size of bytes accessed.
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Fixes: ab6bff424f

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: Remove dynamic field width from trace events
@ 2019-11-18 21:17     ` Eric Blake
  0 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:17 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), replace by a static field
> width instead.
> 
> We previously passed to the trace API 'width << 1' as the number
> of hex characters to display (the dynamic field width). We don't
> need this anymore. Instead, display the size of bytes accessed.
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Fixes: ab6bff424f

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 1/3] hw/block/pflash: Remove dynamic field width from trace events
  2019-11-18 21:15     ` Eric Blake
  (?)
@ 2019-11-18 21:20     ` Philippe Mathieu-Daudé
  -1 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:20 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 10:15 PM, Eric Blake wrote:
> On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
>> Since not all trace backends support dynamic field width in
>> format (dtrace via stap does not), replace by a static field
>> width instead.
>>
>> We previously passed to the trace API 'width << 1' as the number
>> of hex characters to display (the dynamic field width). We don't
>> need this anymore. Instead, display the size of bytes accessed.
>>
>> Reported-by: Eric Blake <eblake@redhat.com>
>> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Is it worth a Fixes: XXX calling out the commit that introduced the '*'?

Yes, good idea.

> 
> /me goes and searches
> 
> Fixes: e8aa2d95ea
> Fixes: c1474acd5d

Similarly the next patch (hw/mips/gt64xxx_pci.c) fixes ab6bff424f4.

> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks!



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
  2019-11-18 21:04   ` Philippe Mathieu-Daudé
@ 2019-11-18 21:26     ` Eric Blake
  -1 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:26 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Stefan Hajnoczi, qemu-block,
	Aleksandar Markovic, Kevin Wolf, Aleksandar Rikalo, qemu-trivial

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), forbid them.
> 
> Add a check to refuse field width in new formats:
> 
>    $ make
>    [...]
>      GEN     hw/block/trace.h
>    Traceback (most recent call last):
>      File "scripts/tracetool.py", line 152, in <module>
>        main(sys.argv)
>      File "scripts/tracetool.py", line 143, in main
>        events.extend(tracetool.read_events(fh, arg))
>      File "scripts/tracetool/__init__.py", line 371, in read_events
>        event = Event.build(line)
>      File "scripts/tracetool/__init__.py", line 285, in build
>        raise ValueError("Event format must not contain field width '%*'")
>    ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---

> +++ b/docs/devel/tracing.txt
> @@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
>   special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
>   respectively.  This ensures portability between 32- and 64-bit platforms.
>   Format strings must not end with a newline character.  It is the responsibility
> -of backends to adapt line ending for proper logging.
> +of backends to adapt line ending for proper logging.  Format strings must not
> +use numeric field width dynamic precision (SystemTap does not support them).

Reads awkwardly - a dynamic precision is not numeric in the format 
string (but '*' instead).  Better might be:

Format strings must not use dynamic field width or precision ('*'), as 
at least SystemTap does not support them.

Or even:

Format strings may use numeric field width or precision, but must not 
use dynamic forms ('*') as at least SystemTap does not support that.

>   
>   Each event declaration will start with the event name, then its arguments,
>   finally a format string for pretty-printing. For example:
> diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
> index 44c118bc2a..ec7fe9fa4a 100644
> --- a/scripts/tracetool/__init__.py
> +++ b/scripts/tracetool/__init__.py
> @@ -206,6 +206,7 @@ class Event(object):
>                         "\s*"
>                         "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
>                         "\s*")
> +    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision

The comment is slightly off - this catches both dynamic field width (any 
'*' before '.') and dynamic precision (any '*' after '.'), maybe the fix 
is just s/width/width or/

>   
>       _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
>   
> @@ -280,6 +281,8 @@ class Event(object):
>           if fmt.endswith(r'\n"'):
>               raise ValueError("Event format must not end with a newline "
>                                "character")
> +        if Event._DFWRE.search(fmt):
> +            raise ValueError("Event format must not contain field width '%*'")

and I don't know if you want to tweak the error message, maybe:
  Event format must not use dynamic '*'

If we're trying to get stuff in 4.2-rc2, patch 1 and 2 are actual bug 
fixes and deserve to go in; patch 3 is nice-to-have but doesn't affect 
the build if it is omitted (as there are no other offenders left), so 
slipping it into 5.0 for a v4 to clean it up slightly doesn't hurt.  I 
don't know who would send the pull request, though, and slipping 1 and 2 
into -rc3 just because of 3 is not ideal.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
@ 2019-11-18 21:26     ` Eric Blake
  0 siblings, 0 replies; 18+ messages in thread
From: Eric Blake @ 2019-11-18 21:26 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
> Since not all trace backends support dynamic field width in
> format (dtrace via stap does not), forbid them.
> 
> Add a check to refuse field width in new formats:
> 
>    $ make
>    [...]
>      GEN     hw/block/trace.h
>    Traceback (most recent call last):
>      File "scripts/tracetool.py", line 152, in <module>
>        main(sys.argv)
>      File "scripts/tracetool.py", line 143, in main
>        events.extend(tracetool.read_events(fh, arg))
>      File "scripts/tracetool/__init__.py", line 371, in read_events
>        event = Event.build(line)
>      File "scripts/tracetool/__init__.py", line 285, in build
>        raise ValueError("Event format must not contain field width '%*'")
>    ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'
> 
> Reported-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---

> +++ b/docs/devel/tracing.txt
> @@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
>   special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
>   respectively.  This ensures portability between 32- and 64-bit platforms.
>   Format strings must not end with a newline character.  It is the responsibility
> -of backends to adapt line ending for proper logging.
> +of backends to adapt line ending for proper logging.  Format strings must not
> +use numeric field width dynamic precision (SystemTap does not support them).

Reads awkwardly - a dynamic precision is not numeric in the format 
string (but '*' instead).  Better might be:

Format strings must not use dynamic field width or precision ('*'), as 
at least SystemTap does not support them.

Or even:

Format strings may use numeric field width or precision, but must not 
use dynamic forms ('*') as at least SystemTap does not support that.

>   
>   Each event declaration will start with the event name, then its arguments,
>   finally a format string for pretty-printing. For example:
> diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
> index 44c118bc2a..ec7fe9fa4a 100644
> --- a/scripts/tracetool/__init__.py
> +++ b/scripts/tracetool/__init__.py
> @@ -206,6 +206,7 @@ class Event(object):
>                         "\s*"
>                         "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
>                         "\s*")
> +    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision

The comment is slightly off - this catches both dynamic field width (any 
'*' before '.') and dynamic precision (any '*' after '.'), maybe the fix 
is just s/width/width or/

>   
>       _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
>   
> @@ -280,6 +281,8 @@ class Event(object):
>           if fmt.endswith(r'\n"'):
>               raise ValueError("Event format must not end with a newline "
>                                "character")
> +        if Event._DFWRE.search(fmt):
> +            raise ValueError("Event format must not contain field width '%*'")

and I don't know if you want to tweak the error message, maybe:
  Event format must not use dynamic '*'

If we're trying to get stuff in 4.2-rc2, patch 1 and 2 are actual bug 
fixes and deserve to go in; patch 3 is nice-to-have but doesn't affect 
the build if it is omitted (as there are no other offenders left), so 
slipping it into 5.0 for a v4 to clean it up slightly doesn't hurt.  I 
don't know who would send the pull request, though, and slipping 1 and 2 
into -rc3 just because of 3 is not ideal.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
  2019-11-18 21:26     ` Eric Blake
@ 2019-11-18 21:31       ` Philippe Mathieu-Daudé
  -1 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:31 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Max Reitz, Aurelien Jarno, Stefan Hajnoczi, qemu-block,
	Aleksandar Markovic, Kevin Wolf, Aleksandar Rikalo, qemu-trivial

On 11/18/19 10:26 PM, Eric Blake wrote:
> On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
>> Since not all trace backends support dynamic field width in
>> format (dtrace via stap does not), forbid them.
>>
>> Add a check to refuse field width in new formats:
>>
>>    $ make
>>    [...]
>>      GEN     hw/block/trace.h
>>    Traceback (most recent call last):
>>      File "scripts/tracetool.py", line 152, in <module>
>>        main(sys.argv)
>>      File "scripts/tracetool.py", line 143, in main
>>        events.extend(tracetool.read_events(fh, arg))
>>      File "scripts/tracetool/__init__.py", line 371, in read_events
>>        event = Event.build(line)
>>      File "scripts/tracetool/__init__.py", line 285, in build
>>        raise ValueError("Event format must not contain field width '%*'")
>>    ValueError: Error at hw/block/trace-events:11: Event format must 
>> not contain field width '%*'
>>
>> Reported-by: Eric Blake <eblake@redhat.com>
>> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
> 
>> +++ b/docs/devel/tracing.txt
>> @@ -113,7 +113,8 @@ Format strings should reflect the types defined in 
>> the trace event.  Take
>>   special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
>>   respectively.  This ensures portability between 32- and 64-bit 
>> platforms.
>>   Format strings must not end with a newline character.  It is the 
>> responsibility
>> -of backends to adapt line ending for proper logging.
>> +of backends to adapt line ending for proper logging.  Format strings 
>> must not
>> +use numeric field width dynamic precision (SystemTap does not support 
>> them).
> 
> Reads awkwardly - a dynamic precision is not numeric in the format 
> string (but '*' instead).  Better might be:
> 
> Format strings must not use dynamic field width or precision ('*'), as 
> at least SystemTap does not support them.
> 
> Or even:
> 
> Format strings may use numeric field width or precision, but must not 
> use dynamic forms ('*') as at least SystemTap does not support that.
> 
>>   Each event declaration will start with the event name, then its 
>> arguments,
>>   finally a format string for pretty-printing. For example:
>> diff --git a/scripts/tracetool/__init__.py 
>> b/scripts/tracetool/__init__.py
>> index 44c118bc2a..ec7fe9fa4a 100644
>> --- a/scripts/tracetool/__init__.py
>> +++ b/scripts/tracetool/__init__.py
>> @@ -206,6 +206,7 @@ class Event(object):
>>                         "\s*"
>>                         "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
>>                         "\s*")
>> +    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
> 
> The comment is slightly off - this catches both dynamic field width (any 
> '*' before '.') and dynamic precision (any '*' after '.'), maybe the fix 
> is just s/width/width or/
> 
>>       _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", 
>> "vcpu"])
>> @@ -280,6 +281,8 @@ class Event(object):
>>           if fmt.endswith(r'\n"'):
>>               raise ValueError("Event format must not end with a 
>> newline "
>>                                "character")
>> +        if Event._DFWRE.search(fmt):
>> +            raise ValueError("Event format must not contain field 
>> width '%*'")
> 
> and I don't know if you want to tweak the error message, maybe:
>   Event format must not use dynamic '*'
> 
> If we're trying to get stuff in 4.2-rc2, patch 1 and 2 are actual bug 
> fixes and deserve to go in; patch 3 is nice-to-have but doesn't affect 
> the build if it is omitted (as there are no other offenders left), so 
> slipping it into 5.0 for a v4 to clean it up slightly doesn't hurt.  I 
> don't know who would send the pull request, though, and slipping 1 and 2 
> into -rc3 just because of 3 is not ideal.

Wise thought. I'll respin 1-2 with the Fixes: tag in case qemu-block@ or 
qemu-trivial@ have pending pull-request for tomorrow, they can queue it.
Else they can go via the mips-next tree, since both patch affect the 
Malta board.

Thanks!

Phil.



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
@ 2019-11-18 21:31       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-18 21:31 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 10:26 PM, Eric Blake wrote:
> On 11/18/19 3:04 PM, Philippe Mathieu-Daudé wrote:
>> Since not all trace backends support dynamic field width in
>> format (dtrace via stap does not), forbid them.
>>
>> Add a check to refuse field width in new formats:
>>
>>    $ make
>>    [...]
>>      GEN     hw/block/trace.h
>>    Traceback (most recent call last):
>>      File "scripts/tracetool.py", line 152, in <module>
>>        main(sys.argv)
>>      File "scripts/tracetool.py", line 143, in main
>>        events.extend(tracetool.read_events(fh, arg))
>>      File "scripts/tracetool/__init__.py", line 371, in read_events
>>        event = Event.build(line)
>>      File "scripts/tracetool/__init__.py", line 285, in build
>>        raise ValueError("Event format must not contain field width '%*'")
>>    ValueError: Error at hw/block/trace-events:11: Event format must 
>> not contain field width '%*'
>>
>> Reported-by: Eric Blake <eblake@redhat.com>
>> Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
> 
>> +++ b/docs/devel/tracing.txt
>> @@ -113,7 +113,8 @@ Format strings should reflect the types defined in 
>> the trace event.  Take
>>   special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
>>   respectively.  This ensures portability between 32- and 64-bit 
>> platforms.
>>   Format strings must not end with a newline character.  It is the 
>> responsibility
>> -of backends to adapt line ending for proper logging.
>> +of backends to adapt line ending for proper logging.  Format strings 
>> must not
>> +use numeric field width dynamic precision (SystemTap does not support 
>> them).
> 
> Reads awkwardly - a dynamic precision is not numeric in the format 
> string (but '*' instead).  Better might be:
> 
> Format strings must not use dynamic field width or precision ('*'), as 
> at least SystemTap does not support them.
> 
> Or even:
> 
> Format strings may use numeric field width or precision, but must not 
> use dynamic forms ('*') as at least SystemTap does not support that.
> 
>>   Each event declaration will start with the event name, then its 
>> arguments,
>>   finally a format string for pretty-printing. For example:
>> diff --git a/scripts/tracetool/__init__.py 
>> b/scripts/tracetool/__init__.py
>> index 44c118bc2a..ec7fe9fa4a 100644
>> --- a/scripts/tracetool/__init__.py
>> +++ b/scripts/tracetool/__init__.py
>> @@ -206,6 +206,7 @@ class Event(object):
>>                         "\s*"
>>                         "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
>>                         "\s*")
>> +    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
> 
> The comment is slightly off - this catches both dynamic field width (any 
> '*' before '.') and dynamic precision (any '*' after '.'), maybe the fix 
> is just s/width/width or/
> 
>>       _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", 
>> "vcpu"])
>> @@ -280,6 +281,8 @@ class Event(object):
>>           if fmt.endswith(r'\n"'):
>>               raise ValueError("Event format must not end with a 
>> newline "
>>                                "character")
>> +        if Event._DFWRE.search(fmt):
>> +            raise ValueError("Event format must not contain field 
>> width '%*'")
> 
> and I don't know if you want to tweak the error message, maybe:
>   Event format must not use dynamic '*'
> 
> If we're trying to get stuff in 4.2-rc2, patch 1 and 2 are actual bug 
> fixes and deserve to go in; patch 3 is nice-to-have but doesn't affect 
> the build if it is omitted (as there are no other offenders left), so 
> slipping it into 5.0 for a v4 to clean it up slightly doesn't hurt.  I 
> don't know who would send the pull request, though, and slipping 1 and 2 
> into -rc3 just because of 3 is not ideal.

Wise thought. I'll respin 1-2 with the Fixes: tag in case qemu-block@ or 
qemu-trivial@ have pending pull-request for tomorrow, they can queue it.
Else they can go via the mips-next tree, since both patch affect the 
Malta board.

Thanks!

Phil.



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events
  2019-11-18 21:04 ` Philippe Mathieu-Daudé
                   ` (3 preceding siblings ...)
  (?)
@ 2019-11-19  7:32 ` Richard Henderson
  -1 siblings, 0 replies; 18+ messages in thread
From: Richard Henderson @ 2019-11-19  7:32 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Eric Blake, qemu-devel
  Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block, qemu-trivial, Max Reitz,
	Aleksandar Markovic, Aleksandar Rikalo, Aurelien Jarno

On 11/18/19 10:04 PM, Philippe Mathieu-Daudé wrote:
> Philippe Mathieu-Daudé (3):
>   hw/block/pflash: Remove dynamic field width from trace events
>   hw/mips/gt64xxx: Remove dynamic field width from trace events
>   trace: Forbid dynamic field width in event format

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2019-11-19  7:32 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-11-18 21:04 [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events Philippe Mathieu-Daudé
2019-11-18 21:04 ` Philippe Mathieu-Daudé
2019-11-18 21:04 ` [PATCH-for-4.2 v3 1/3] hw/block/pflash: " Philippe Mathieu-Daudé
2019-11-18 21:04   ` Philippe Mathieu-Daudé
2019-11-18 21:15   ` Eric Blake
2019-11-18 21:15     ` Eric Blake
2019-11-18 21:20     ` Philippe Mathieu-Daudé
2019-11-18 21:04 ` [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: " Philippe Mathieu-Daudé
2019-11-18 21:04   ` Philippe Mathieu-Daudé
2019-11-18 21:17   ` Eric Blake
2019-11-18 21:17     ` Eric Blake
2019-11-18 21:04 ` [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format Philippe Mathieu-Daudé
2019-11-18 21:04   ` Philippe Mathieu-Daudé
2019-11-18 21:26   ` Eric Blake
2019-11-18 21:26     ` Eric Blake
2019-11-18 21:31     ` Philippe Mathieu-Daudé
2019-11-18 21:31       ` Philippe Mathieu-Daudé
2019-11-19  7:32 ` [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events Richard Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.