Stefan Hajnoczi writes:

> Code that checks dstate is unaware of SystemTap and LTTng UST dstate, so
> the following trace event will not fire when solely enabled by SystemTap
> or LTTng UST:

>   if (trace_event_get_state(TRACE_MY_EVENT)) {
>       str = g_strdup_printf("Expensive string to generate ...",
>                             ...);
>       trace_my_event(str);
>       g_free(str);
>   }

I believe this should be trace_event_get_state_backends(). Same applies to the
cover letter.

Cheers,
  Lluis

> Add trace_event_get_state_backends() to fetch backend dstate.  Those
> backends that use QEMU dstate fetch it as part of
> generate_h_backend_dstate().

> Update existing trace_event_get_state() callers to use
> trace_event_get_state_backends() instead.

> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
> ---
> v2:
>  * Use _backends() postfix to clarify function purpose [Lluís]
> ---
>  docs/devel/tracing.txt |  2 +-
>  trace/control.h        | 18 +++++++++++++++++-
>  hw/usb/hcd-ohci.c      | 13 +++++--------
>  net/colo-compare.c     | 11 ++++++-----
>  net/filter-rewriter.c  |  4 ++--
>  5 files changed, 31 insertions(+), 17 deletions(-)

> diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt
> index 5768a0b7a2..07abbb345c 100644
> --- a/docs/devel/tracing.txt
> +++ b/docs/devel/tracing.txt
> @@ -353,7 +353,7 @@ guard such computations and avoid its compilation when 
> the event is disabled:
>      }
 
>  You can check both if the event has been disabled and is dynamically enabled 
> at
> -the same time using the 'trace_event_get_state' routine (see header
> +the same time using the 'trace_event_get_state_backends' routine (see header
>  "trace/control.h" for more information).
 
>  === "tcg" ===
> diff --git a/trace/control.h b/trace/control.h
> index b931824d60..1903e22975 100644
> --- a/trace/control.h
> +++ b/trace/control.h
> @@ -96,7 +96,7 @@ static const char * trace_event_get_name(TraceEvent *ev);
>   * trace_event_get_state:
>   * @id: Event identifier name.
>   *
> - * Get the tracing state of an event (both static and dynamic).
> + * Get the tracing state of an event, both static and the QEMU dynamic state.
>   *
>   * If the event has the disabled property, the check will have no performance
>   * impact.
> @@ -105,6 +105,22 @@ static const char * trace_event_get_name(TraceEvent *ev);
>      ((id ##_ENABLED) && trace_event_get_state_dynamic_by_id(id))
 
>  /**
> + * trace_event_get_state_backends:
> + * @id: Event identifier name.
> + *
> + * Get the tracing state of an event, both static and dynamic state from all
> + * compiled-in backends.
> + *
> + * If the event has the disabled property, the check will have no performance
> + * impact.
> + *
> + * Returns: true if at least one backend has the event enabled and the event
> + * does not have the disabled property.
> + */
> +#define trace_event_get_state_backends(id)              \
> +    ((id ##_ENABLED) && id ##_BACKEND_DSTATE())
> +
> +/**
>   * trace_event_get_vcpu_state:
>   * @vcpu: Target vCPU.
>   * @id: Event identifier name.
> diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
> index 3ada35e954..267982e160 100644
> --- a/hw/usb/hcd-ohci.c
> +++ b/hw/usb/hcd-ohci.c
> @@ -936,16 +936,18 @@ static int ohci_service_iso_td(OHCIState *ohci, struct 
> ohci_ed *ed,
>      return 1;
>  }
 
> -#ifdef trace_event_get_state
>  static void ohci_td_pkt(const char *msg, const uint8_t *buf, size_t len)
>  {
> -    bool print16 = !!trace_event_get_state(TRACE_USB_OHCI_TD_PKT_SHORT);
> -    bool printall = !!trace_event_get_state(TRACE_USB_OHCI_TD_PKT_FULL);
> +    bool print16;
> +    bool printall;
>      const int width = 16;
>      int i;
>      char tmp[3 * width + 1];
>      char *p = tmp;
 
> +    print16 = !!trace_event_get_state_backends(TRACE_USB_OHCI_TD_PKT_SHORT);
> +    printall = !!trace_event_get_state_backends(TRACE_USB_OHCI_TD_PKT_FULL);
> +
>      if (!printall && !print16) {
>          return;
>      }
> @@ -967,11 +969,6 @@ static void ohci_td_pkt(const char *msg, const uint8_t 
> *buf, size_t len)
>          p += sprintf(p, " %.2x", buf[i]);
>      }
>  }
> -#else
> -static void ohci_td_pkt(const char *msg, const uint8_t *buf, size_t len)
> -{
> -}
> -#endif
 
>  /* Service a transport descriptor.
>     Returns nonzero to terminate processing of this endpoint.  */
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index ca67c68615..5fe8e3fad9 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -188,7 +188,7 @@ static int packet_enqueue(CompareState *s, int mode)
>   */
>  static int colo_packet_compare_common(Packet *ppkt, Packet *spkt, int offset)
>  {
> -    if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
> +    if (trace_event_get_state_backends(TRACE_COLO_COMPARE_MISCOMPARE)) {
>          char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20];
 
>          strcpy(pri_ip_src, inet_ntoa(ppkt->ip->ip_src));
> @@ -274,7 +274,8 @@ static int colo_packet_compare_tcp(Packet *spkt, Packet 
> *ppkt)
>          res = -1;
>      }
 
> -    if (res != 0 && trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
> +    if (res != 0 &&
> +        trace_event_get_state_backends(TRACE_COLO_COMPARE_MISCOMPARE)) {
>          char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20];
 
>          strcpy(pri_ip_src, inet_ntoa(ppkt->ip->ip_src));
> @@ -334,7 +335,7 @@ static int colo_packet_compare_udp(Packet *spkt, Packet 
> *ppkt)
>      if (ret) {
>          trace_colo_compare_udp_miscompare("primary pkt size", ppkt->size);
>          trace_colo_compare_udp_miscompare("Secondary pkt size", spkt->size);
> -        if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
> +        if (trace_event_get_state_backends(TRACE_COLO_COMPARE_MISCOMPARE)) {
>              qemu_hexdump((char *)ppkt->data, stderr, "colo-compare pri pkt",
ppkt-> size);
>              qemu_hexdump((char *)spkt->data, stderr, "colo-compare sec pkt",
> @@ -371,7 +372,7 @@ static int colo_packet_compare_icmp(Packet *spkt, Packet 
> *ppkt)
ppkt-> size);
>          trace_colo_compare_icmp_miscompare("Secondary pkt size",
spkt-> size);
> -        if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
> +        if (trace_event_get_state_backends(TRACE_COLO_COMPARE_MISCOMPARE)) {
>              qemu_hexdump((char *)ppkt->data, stderr, "colo-compare pri pkt",
ppkt-> size);
>              qemu_hexdump((char *)spkt->data, stderr, "colo-compare sec pkt",
> @@ -390,7 +391,7 @@ static int colo_packet_compare_icmp(Packet *spkt, Packet 
> *ppkt)
>  static int colo_packet_compare_other(Packet *spkt, Packet *ppkt)
>  {
>      trace_colo_compare_main("compare other");
> -    if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
> +    if (trace_event_get_state_backends(TRACE_COLO_COMPARE_MISCOMPARE)) {
>          char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20];
 
>          strcpy(pri_ip_src, inet_ntoa(ppkt->ip->ip_src));
> diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
> index 55a6cf56fd..98120095de 100644
> --- a/net/filter-rewriter.c
> +++ b/net/filter-rewriter.c
> @@ -69,7 +69,7 @@ static int handle_primary_tcp_pkt(NetFilterState *nf,
>      struct tcphdr *tcp_pkt;
 
>      tcp_pkt = (struct tcphdr *)pkt->transport_header;
> -    if (trace_event_get_state(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
> +    if (trace_event_get_state_backends(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
>          trace_colo_filter_rewriter_pkt_info(__func__,
>                      inet_ntoa(pkt->ip->ip_src), inet_ntoa(pkt->ip->ip_dst),
>                      ntohl(tcp_pkt->th_seq), ntohl(tcp_pkt->th_ack),
> @@ -115,7 +115,7 @@ static int handle_secondary_tcp_pkt(NetFilterState *nf,
 
>      tcp_pkt = (struct tcphdr *)pkt->transport_header;
 
> -    if (trace_event_get_state(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
> +    if (trace_event_get_state_backends(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
>          trace_colo_filter_rewriter_pkt_info(__func__,
>                      inet_ntoa(pkt->ip->ip_src), inet_ntoa(pkt->ip->ip_dst),
>                      ntohl(tcp_pkt->th_seq), ntohl(tcp_pkt->th_ack),
> -- 
> 2.13.3


Reply via email to