qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>, qemu-devel@nongnu.org
Cc: samuel.thibault@ens-lyon.org, rjones@redhat.com,
	stefanha@redhat.com, renzo@cs.unibo.it
Subject: Re: [Qemu-devel] [PATCH for-3.2 07/41] slirp: add clock_get_ns() callback
Date: Thu, 15 Nov 2018 13:54:02 +0100	[thread overview]
Message-ID: <7bae7a16-4c98-999f-24c1-6db3b24e75d3@redhat.com> (raw)
In-Reply-To: <20181114123643.24091-8-marcandre.lureau@redhat.com>

On 14/11/2018 13:36, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  slirp/libslirp.h |  6 ++++++
>  net/slirp.c      | 19 +++++++++++++++++++
>  slirp/if.c       |  2 +-
>  slirp/ip6_icmp.c |  6 ++++--
>  slirp/slirp.c    | 11 ++++++-----
>  5 files changed, 36 insertions(+), 8 deletions(-)
> 
> diff --git a/slirp/libslirp.h b/slirp/libslirp.h
> index 16ced2aa0f..fcebcd1e58 100644
> --- a/slirp/libslirp.h
> +++ b/slirp/libslirp.h
> @@ -5,9 +5,15 @@
>  
>  typedef struct Slirp Slirp;
>  
> +typedef enum SlirpClockType {
> +    SLIRP_CLOCK_VIRTUAL,
> +    SLIRP_CLOCK_REALTIME,

The more I look at this, the more I think that SLIRP_CLOCK_REALTIME is
wrong and it should also be using SLIRP_CLOCK_VIRTUAL.  It's used to put
a cap on the amount of time the guest has to reply to an ARP request,
and of course the guest cannot process it if it's paused.  So this can
be simpler, because SlirpClockType can disappear completely.

Paolo

> +} SlirpClockType;
> +
>  typedef struct SlirpCb {
>      void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
>      int (*chr_write_all)(void *chr, const void *buf, size_t len);
> +    int64_t (*clock_get_ns)(SlirpClockType type);
>  } SlirpCb;
>  
>  
> diff --git a/net/slirp.c b/net/slirp.c
> index 5c1f676487..af6c643b82 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -145,9 +145,28 @@ static int net_slirp_chr_write_all(void *chr, const void *buf, size_t len)
>      return qemu_chr_fe_write_all(chr, buf, len);
>  }
>  
> +static QEMUClockType slirp_clock_to_qemu(SlirpClockType type)
> +{
> +    switch (type) {
> +    case SLIRP_CLOCK_VIRTUAL:
> +        return QEMU_CLOCK_VIRTUAL;
> +    case SLIRP_CLOCK_REALTIME:
> +        return QEMU_CLOCK_REALTIME;
> +    }
> +
> +    g_warn_if_reached();
> +    return QEMU_CLOCK_REALTIME;
> +}
> +
> +static int64_t net_slirp_clock_get_ns(SlirpClockType type)
> +{
> +    return qemu_clock_get_ns(slirp_clock_to_qemu(type));
> +}
> +
>  static SlirpCb slirp_cb = {
>      .output = net_slirp_output,
>      .chr_write_all = net_slirp_chr_write_all,
> +    .clock_get_ns = net_slirp_clock_get_ns,
>  };
>  
>  static int net_slirp_init(NetClientState *peer, const char *model,
> diff --git a/slirp/if.c b/slirp/if.c
> index 590753c658..1c96869831 100644
> --- a/slirp/if.c
> +++ b/slirp/if.c
> @@ -150,7 +150,7 @@ diddit:
>   */
>  void if_start(Slirp *slirp)
>  {
> -    uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
> +    uint64_t now = slirp->cb->clock_get_ns(SLIRP_CLOCK_REALTIME);
>      bool from_batchq = false;
>      struct mbuf *ifm, *ifm_next, *ifqt;
>  
> diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
> index cd1e0b9fe1..0f80d49ef9 100644
> --- a/slirp/ip6_icmp.c
> +++ b/slirp/ip6_icmp.c
> @@ -17,7 +17,8 @@ static void ra_timer_handler(void *opaque)
>  {
>      Slirp *slirp = opaque;
>      timer_mod(slirp->ra_timer,
> -              qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + NDP_Interval);
> +              slirp->cb->clock_get_ns(SLIRP_CLOCK_VIRTUAL) / SCALE_MS +
> +              NDP_Interval);
>      ndp_send_ra(slirp);
>  }
>  
> @@ -31,7 +32,8 @@ void icmp6_init(Slirp *slirp)
>                                       SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL,
>                                       ra_timer_handler, slirp);
>      timer_mod(slirp->ra_timer,
> -              qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + NDP_Interval);
> +              slirp->cb->clock_get_ns(SLIRP_CLOCK_VIRTUAL) / SCALE_MS +
> +              NDP_Interval);
>  }
>  
>  void icmp6_cleanup(Slirp *slirp)
> diff --git a/slirp/slirp.c b/slirp/slirp.c
> index 4e809e5d7f..979495e88b 100644
> --- a/slirp/slirp.c
> +++ b/slirp/slirp.c
> @@ -571,15 +571,15 @@ void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout)
>  
>  void slirp_pollfds_poll(GArray *pollfds, int select_error)
>  {
> -    Slirp *slirp;
> +    Slirp *slirp = QTAILQ_FIRST(&slirp_instances);
>      struct socket *so, *so_next;
>      int ret;
>  
> -    if (QTAILQ_EMPTY(&slirp_instances)) {
> +    if (!slirp) {
>          return;
>      }
>  
> -    curtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> +    curtime = slirp->cb->clock_get_ns(SLIRP_CLOCK_REALTIME) / SCALE_MS;
>  
>      QTAILQ_FOREACH(slirp, &slirp_instances, entry) {
>          /*
> @@ -947,7 +947,8 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
>              ifm->resolution_requested = true;
>  
>              /* Expire request and drop outgoing packet after 1 second */
> -            ifm->expiration_date = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + 1000000000ULL;
> +            ifm->expiration_date = slirp->cb->clock_get_ns(SLIRP_CLOCK_REALTIME)
> +                + 1000000000ULL;
>          }
>          return 0;
>      } else {
> @@ -974,7 +975,7 @@ static int if_encap6(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
>              ndp_send_ns(slirp, ip6h->ip_dst);
>              ifm->resolution_requested = true;
>              ifm->expiration_date =
> -                qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + 1000000000ULL;
> +                slirp->cb->clock_get_ns(SLIRP_CLOCK_REALTIME) + 1000000000ULL;
>          }
>          return 0;
>      } else {
> 

  reply	other threads:[~2018-11-15 12:54 UTC|newest]

Thread overview: 137+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-14 12:36 [Qemu-devel] [PATCH for-3.2 00/41] RFC: slirp: make it again a standalone project Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 01/41] slirp: move socket pair creation in helper function Marc-André Lureau
2018-11-19 22:46   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 02/41] glib-compat: add g_spawn_async_with_fds() fallback Marc-André Lureau
2018-11-19 22:50   ` Samuel Thibault
2018-11-20  6:11     ` Thomas Huth
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 03/41] slirp: simplify fork_exec() Marc-André Lureau
2018-11-14 14:22   ` Daniel P. Berrangé
2018-11-19 22:59     ` Samuel Thibault
2018-11-19 23:20       ` Eric Blake
2018-11-19 22:56   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 04/41] slirp: remove unused M_TRAILINGSPACE Marc-André Lureau
2018-11-14 13:32   ` Daniel P. Berrangé
2018-11-19 23:01     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 05/41] slirp: use a callback structure to interface with qemu Marc-André Lureau
2018-11-14 13:10   ` Philippe Mathieu-Daudé
2018-11-19 23:09     ` Samuel Thibault
2018-11-14 14:30   ` Stefan Hajnoczi
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 06/41] slirp: add a callback for qemu_chr_fe_write_all() Marc-André Lureau
2018-11-15 13:12   ` Paolo Bonzini
2019-01-15 19:22     ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 07/41] slirp: add clock_get_ns() callback Marc-André Lureau
2018-11-15 12:54   ` Paolo Bonzini [this message]
2018-11-19 23:15     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 08/41] slirp: add callbacks for timer Marc-André Lureau
2018-11-15 12:56   ` Paolo Bonzini
2019-01-15 19:21     ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 09/41] slirp: add a set_nonblock() callback Marc-André Lureau
2018-11-15 13:03   ` Paolo Bonzini
2018-11-21 21:02     ` Marc-André Lureau
2018-11-22 13:09       ` Paolo Bonzini
2019-01-15 19:22     ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 10/41] slirp: remove PROBE_CONN dead-code Marc-André Lureau
2018-11-14 13:12   ` Philippe Mathieu-Daudé
2018-11-19 23:17     ` Samuel Thibault
2018-11-14 13:33   ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 11/41] slirp: remove FULL_BOLT Marc-André Lureau
2018-11-14 13:46   ` Daniel P. Berrangé
2018-11-19 23:18     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 12/41] slirp: remove the disabled readv()/writev() code path Marc-André Lureau
2018-11-14 13:46   ` Daniel P. Berrangé
2018-11-19 23:19     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 13/41] slirp: remove HAVE_SYS_SIGNAL_H Marc-André Lureau
2018-11-14 13:47   ` Daniel P. Berrangé
2018-11-20  0:58     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 14/41] slirp: remove unused HAVE_SYS_BITYPES_H Marc-André Lureau
2018-11-14 13:47   ` Daniel P. Berrangé
2018-11-20  0:59     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 15/41] slirp: remove NO_UNIX_SOCKETS Marc-André Lureau
2018-11-14 13:48   ` Daniel P. Berrangé
2018-11-20  0:59     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 16/41] slirp: remove unused HAVE_SYS_STROPTS_H Marc-André Lureau
2018-11-14 13:49   ` Daniel P. Berrangé
2018-11-20  1:00     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 17/41] slirp: remove unused HAVE_ARPA_INET_H Marc-André Lureau
2018-11-14 13:50   ` Daniel P. Berrangé
2018-11-20  1:01     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 18/41] slirp: remove unused HAVE_SYS_WAIT_H Marc-André Lureau
2018-11-14 13:50   ` Daniel P. Berrangé
2018-11-20  1:01     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 19/41] slirp: remove unused HAVE_SYS_SELECT_H Marc-André Lureau
2018-11-14 13:51   ` Daniel P. Berrangé
2018-11-20  1:02     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 20/41] slirp: remove HAVE_SYS_IOCTL_H Marc-André Lureau
2018-11-14 13:51   ` Daniel P. Berrangé
2018-11-20  1:03     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 21/41] slirp: remove HAVE_SYS_FILIO_H Marc-André Lureau
2018-11-14 13:52   ` Daniel P. Berrangé
2018-11-20  1:04     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 22/41] slirp: remove unused DECLARE_IOVEC Marc-André Lureau
2018-11-14 13:53   ` Daniel P. Berrangé
2018-11-20  1:05     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 23/41] slirp: remove unused HAVE_INET_ATON Marc-André Lureau
2018-11-14 13:54   ` Daniel P. Berrangé
2018-11-20  1:05     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 24/41] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent Marc-André Lureau
2018-11-14 13:14   ` Philippe Mathieu-Daudé
2018-11-20  1:07     ` Samuel Thibault
2018-11-14 13:32   ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 25/41] slirp: replace SIZEOF_CHAR_P " Marc-André Lureau
2018-11-14 13:14   ` Philippe Mathieu-Daudé
2018-11-20  1:08     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 26/41] slirp: replace compile time DO_KEEPALIVE Marc-André Lureau
2018-11-20  1:09   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 27/41] slirp: remove unused global slirp_instance Marc-André Lureau
2018-11-14 13:55   ` Daniel P. Berrangé
2018-11-20  1:10     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 28/41] slirp: replace error_report() with g_critical() Marc-André Lureau
2018-11-20  1:14   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 29/41] slirp: improve a bit the debug macros Marc-André Lureau
2018-11-14 14:04   ` Daniel P. Berrangé
2018-11-14 20:51     ` Marc-André Lureau
2018-11-20  1:19   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 30/41] slirp: replace trace functions with DEBUG calls Marc-André Lureau
2018-11-20  1:21   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 31/41] slirp: add a callback to log guest errors Marc-André Lureau
2018-11-20  1:27   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 32/41] slirp: remove unused sbflush() Marc-André Lureau
2018-11-14 14:05   ` Daniel P. Berrangé
2018-11-20  1:28     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 33/41] slirp: replace qemu_notify_event() with a callback Marc-André Lureau
2018-11-20  1:32   ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 34/41] slirp: remove #if notdef dead code Marc-André Lureau
2018-11-14 14:07   ` Daniel P. Berrangé
2018-11-20  1:28     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 35/41] slirp: NULL is defined by glib (at least) Marc-André Lureau
2018-11-14 14:11   ` Daniel P. Berrangé
2018-11-20  1:33     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 36/41] slirp: remove dead TCP_ACK_HACK code Marc-André Lureau
2018-11-14 14:12   ` Daniel P. Berrangé
2018-11-20  1:34     ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 37/41] slirp: replace ARRAY_SIZE with G_N_ELEMENTS Marc-André Lureau
2018-11-14 13:17   ` Philippe Mathieu-Daudé
2018-11-20  1:35     ` Samuel Thibault
2018-11-14 14:15   ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 38/41] net: do not depend on slirp internals Marc-André Lureau
2018-11-14 13:21   ` Philippe Mathieu-Daudé
2018-11-20  1:37     ` Samuel Thibault
2018-11-15 13:19   ` Paolo Bonzini
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 39/41] slirp: move QEMU state saving to a separate unit Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 40/41] slirp: replace remaining QEMU dependency Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 41/41] build-sys: add a basic meson build Marc-André Lureau
2018-11-14 12:59 ` [Qemu-devel] [PATCH for-3.2 00/41] RFC: slirp: make it again a standalone project Markus Armbruster
2018-11-14 13:20   ` Richard W.M. Jones
2018-11-14 13:33   ` Thomas Huth
2018-11-14 14:46     ` Markus Armbruster
2018-11-14 15:10       ` Dr. David Alan Gilbert
2018-11-14 15:14       ` Richard W.M. Jones
2018-11-14 16:52       ` Thomas Huth
2018-11-14 17:51         ` Markus Armbruster
2018-11-14 18:14           ` Dr. David Alan Gilbert
2018-11-14 13:45 ` Daniel P. Berrangé
2018-11-15 16:49   ` Giuseppe Scrivano
2018-11-16  5:09     ` Akihiro Suda
2018-11-14 14:26 ` Stefan Hajnoczi
2018-11-14 14:30   ` Daniel P. Berrangé
2018-11-14 15:26     ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7bae7a16-4c98-999f-24c1-6db3b24e75d3@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=renzo@cs.unibo.it \
    --cc=rjones@redhat.com \
    --cc=samuel.thibault@ens-lyon.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).