From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5263C4332B for ; Tue, 9 Feb 2021 16:41:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7B84864E50 for ; Tue, 9 Feb 2021 16:41:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232972AbhBIQlQ (ORCPT ); Tue, 9 Feb 2021 11:41:16 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:58705 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232935AbhBIQk3 (ORCPT ); Tue, 9 Feb 2021 11:40:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612888741; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j18aWEf5CADfmqMvOrXJkqA0qqCkiJleoTu3goUeHSM=; b=AjNTNrcJ2Fb1zlzA0SPp1dNydBJfYoax3n20rnBX6SRC4il/BLHHv+3Ds9BkvR2VTqy3/G Y0rKUCmBrRg1jT0PG+AJe2DN8DyCUH0ERc+aJmSs/gDinhm6JRO76SmFkSRTYDlRbMFygb i8S4ONclZvvBt7cUCpVfZgqalMLDxIo= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-140-p6MKepJnOAWSrlzfmMgFOQ-1; Tue, 09 Feb 2021 11:38:59 -0500 X-MC-Unique: p6MKepJnOAWSrlzfmMgFOQ-1 Received: by mail-wm1-f69.google.com with SMTP id o18so2930845wmq.2 for ; Tue, 09 Feb 2021 08:38:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=j18aWEf5CADfmqMvOrXJkqA0qqCkiJleoTu3goUeHSM=; b=qLKauK9RK3kn9LaEOwgmnRkmLKxrf9l3vjSK4riFHsLFtm7WiKcQvwImk6CuasrGK8 lbdoPsjQQiftX7ctpgNF3I2GQ5MDy4L6d1GeC99MwRBkvh+ErmE80ap9VyzLcNFI1DXR Ure6k1hLQPpIFchBxb+ZX3pg381vL5TsJTrhUsu14FXwYyg8ZyYIY93eX1WYHQtxfc11 YPGKqoeGkpL7HZGAOh6IHyGQoH3sbemiY0w+cuhcy0VYi13yyR9cTsFsRSuCjAcRPaM7 lNm9PeOk20iYck/oT9prenCrrZ3l7oyp54dhNSjTre7Spp8vqdBpmNwOd20ymfKhCf39 FMOw== X-Gm-Message-State: AOAM531jlHztvESJhSPlLrFnBZ3lTnEbdBgJdF1bJ4R6f6IkB7UQvrEf JTP2nYDl+7zffk2nGa0A0o+z3PZceKGGxmYQ/Wn9wVJI/+KndQKLyOLwWCFA7WQbvFXqZ3lQ0mq CeH8MUp06UzCtIY3G X-Received: by 2002:a5d:690b:: with SMTP id t11mr26608188wru.12.1612888738146; Tue, 09 Feb 2021 08:38:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJzRKdJBQCdmzziwPcmnK3944oxwc/YSEzg8BUmyrortM8c8BTMwCWv53TxFKLYzqUjxjED4bg== X-Received: by 2002:a5d:690b:: with SMTP id t11mr26608156wru.12.1612888737904; Tue, 09 Feb 2021 08:38:57 -0800 (PST) Received: from redhat.com (bzq-79-180-2-31.red.bezeqint.net. [79.180.2.31]) by smtp.gmail.com with ESMTPSA id v5sm17877825wro.71.2021.02.09.08.38.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Feb 2021 08:38:57 -0800 (PST) Date: Tue, 9 Feb 2021 11:38:54 -0500 From: "Michael S. Tsirkin" To: Jason Wang Cc: Willem de Bruijn , virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, richardcochran@gmail.com, Willem de Bruijn Subject: Re: [PATCH RFC v2 3/4] virtio-net: support transmit timestamp Message-ID: <20210209113643-mutt-send-email-mst@kernel.org> References: <20210208185558.995292-1-willemdebruijn.kernel@gmail.com> <20210208185558.995292-4-willemdebruijn.kernel@gmail.com> <6bfdf48d-c780-bc65-b0b9-24a33f18827b@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6bfdf48d-c780-bc65-b0b9-24a33f18827b@redhat.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, Feb 09, 2021 at 01:45:11PM +0800, Jason Wang wrote: > > On 2021/2/9 上午2:55, Willem de Bruijn wrote: > > From: Willem de Bruijn > > > > Add optional PTP hardware tx timestamp offload for virtio-net. > > > > Accurate RTT measurement requires timestamps close to the wire. > > Introduce virtio feature VIRTIO_NET_F_TX_TSTAMP, the transmit > > equivalent to VIRTIO_NET_F_RX_TSTAMP. > > > > The driver sets VIRTIO_NET_HDR_F_TSTAMP to request a timestamp > > returned on completion. If the feature is negotiated, the device > > either places the timestamp or clears the feature bit. > > > > The timestamp straddles (virtual) hardware domains. Like PTP, use > > international atomic time (CLOCK_TAI) as global clock base. The driver > > must sync with the device, e.g., through kvm-clock. > > > > Modify can_push to ensure that on tx completion the header, and thus > > timestamp, is in a predicatable location at skb_vnet_hdr. > > > > RFC: this implementation relies on the device writing to the buffer. > > That breaks DMA_TO_DEVICE semantics. For now, disable when DMA is on. > > The virtio changes should be a separate patch at the least. > > > > Tested: modified txtimestamp.c to with h/w timestamping: > > - sock_opt = SOF_TIMESTAMPING_SOFTWARE | > > + sock_opt = SOF_TIMESTAMPING_RAW_HARDWARE | > > + do_test(family, SOF_TIMESTAMPING_TX_HARDWARE); > > > > Signed-off-by: Willem de Bruijn > > --- > > drivers/net/virtio_net.c | 61 ++++++++++++++++++++++++++++----- > > drivers/virtio/virtio_ring.c | 3 +- > > include/linux/virtio.h | 1 + > > include/uapi/linux/virtio_net.h | 1 + > > 4 files changed, 56 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index ac44c5efa0bc..fc8ecd3a333a 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -210,6 +210,12 @@ struct virtnet_info { > > /* Device will pass rx timestamp. Requires has_rx_tstamp */ > > bool enable_rx_tstamp; > > + /* Device can pass CLOCK_TAI transmit time to the driver */ > > + bool has_tx_tstamp; > > + > > + /* Device will pass tx timestamp. Requires has_tx_tstamp */ > > + bool enable_tx_tstamp; > > + > > /* Has control virtqueue */ > > bool has_cvq; > > @@ -1401,6 +1407,20 @@ static int virtnet_receive(struct receive_queue *rq, int budget, > > return stats.packets; > > } > > +static void virtnet_record_tx_tstamp(const struct send_queue *sq, > > + struct sk_buff *skb) > > +{ > > + const struct virtio_net_hdr_hash_ts *h = skb_vnet_hdr_ht(skb); > > + const struct virtnet_info *vi = sq->vq->vdev->priv; > > + struct skb_shared_hwtstamps ts; > > + > > + if (h->hdr.flags & VIRTIO_NET_HDR_F_TSTAMP && > > + vi->enable_tx_tstamp) { > > + ts.hwtstamp = ns_to_ktime(le64_to_cpu(h->tstamp)); > > + skb_tstamp_tx(skb, &ts); > > > This probably won't work since the buffer is read-only from the device. (See > virtqueue_add_outbuf()). > > Another issue that I vaguely remember that the virtio spec forbids out > buffer after in buffer. Both Driver Requirements: Message Framing and Driver Requirements: Scatter-Gather Support have this statement: The driver MUST place any device-writable descriptor elements after any device-readable descriptor ele- ments. similarly Device Requirements: The Virtqueue Descriptor Table A device MUST NOT write to a device-readable buffer, and a device SHOULD NOT read a device-writable buffer. > > > + } > > +} > > + > > static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi) > > { > > unsigned int len; > > @@ -1412,6 +1432,7 @@ static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi) > > if (likely(!is_xdp_frame(ptr))) { > > struct sk_buff *skb = ptr; > > + virtnet_record_tx_tstamp(sq, skb); > > pr_debug("Sent skb %p\n", skb); > > bytes += skb->len; > > @@ -1558,7 +1579,7 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb) > > struct virtio_net_hdr_mrg_rxbuf *hdr; > > const unsigned char *dest = ((struct ethhdr *)skb->data)->h_dest; > > struct virtnet_info *vi = sq->vq->vdev->priv; > > - struct virtio_net_hdr_v1_hash *ht; > > + struct virtio_net_hdr_hash_ts *ht; > > int num_sg; > > unsigned hdr_len = vi->hdr_len; > > bool can_push; > > @@ -1567,7 +1588,8 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb) > > can_push = vi->any_header_sg && > > !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) && > > - !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len; > > + !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len && > > + !vi->enable_tx_tstamp; > > /* Even if we can, don't push here yet as this would skew > > * csum_start offset below. */ > > if (can_push) > > @@ -1588,10 +1610,12 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb) > > u16 report = skb->l4_hash ? VIRTIO_NET_HASH_REPORT_L4 : > > VIRTIO_NET_HASH_REPORT_OTHER; > > - ht->hash_value = cpu_to_le32(skb->hash); > > - ht->hash_report = cpu_to_le16(report); > > - ht->hash_state = cpu_to_le16(VIRTIO_NET_HASH_STATE_DEFAULT); > > + ht->hash.value = cpu_to_le32(skb->hash); > > + ht->hash.report = cpu_to_le16(report); > > + ht->hash.flow_state = cpu_to_le16(VIRTIO_NET_HASH_STATE_DEFAULT); > > } > > + if (vi->enable_tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) > > + ht->hdr.flags |= VIRTIO_NET_HDR_F_TSTAMP; > > sg_init_table(sq->sg, skb_shinfo(skb)->nr_frags + (can_push ? 1 : 2)); > > if (can_push) { > > @@ -2307,7 +2331,13 @@ static int virtnet_get_ts_info(struct net_device *dev, > > info->rx_filters = HWTSTAMP_FILTER_NONE; > > } > > - info->tx_types = HWTSTAMP_TX_OFF; > > + if (vi->has_tx_tstamp) { > > + info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE | > > + SOF_TIMESTAMPING_RAW_HARDWARE; > > + info->tx_types = HWTSTAMP_TX_ON; > > + } else { > > + info->tx_types = HWTSTAMP_TX_OFF; > > + } > > return 0; > > } > > @@ -2616,7 +2646,8 @@ static int virtnet_ioctl_set_hwtstamp(struct net_device *dev, struct ifreq *ifr) > > return -EFAULT; > > if (tsconf.flags) > > return -EINVAL; > > - if (tsconf.tx_type != HWTSTAMP_TX_OFF) > > + if (tsconf.tx_type != HWTSTAMP_TX_OFF && > > + tsconf.tx_type != HWTSTAMP_TX_ON) > > return -ERANGE; > > if (tsconf.rx_filter != HWTSTAMP_FILTER_NONE && > > tsconf.rx_filter != HWTSTAMP_FILTER_ALL) > > @@ -2627,6 +2658,11 @@ static int virtnet_ioctl_set_hwtstamp(struct net_device *dev, struct ifreq *ifr) > > else > > vi->enable_rx_tstamp = tsconf.rx_filter == HWTSTAMP_FILTER_ALL; > > + if (!vi->has_tx_tstamp) > > + tsconf.tx_type = HWTSTAMP_TX_OFF; > > + else > > + vi->enable_tx_tstamp = tsconf.tx_type == HWTSTAMP_TX_ON; > > + > > if (copy_to_user(ifr->ifr_data, &tsconf, sizeof(tsconf))) > > return -EFAULT; > > @@ -2641,7 +2677,8 @@ static int virtnet_ioctl_get_hwtstamp(struct net_device *dev, struct ifreq *ifr) > > tsconf.flags = 0; > > tsconf.rx_filter = vi->enable_rx_tstamp ? HWTSTAMP_FILTER_ALL : > > HWTSTAMP_FILTER_NONE; > > - tsconf.tx_type = HWTSTAMP_TX_OFF; > > + tsconf.tx_type = vi->enable_tx_tstamp ? HWTSTAMP_TX_ON : > > + HWTSTAMP_TX_OFF; > > if (copy_to_user(ifr->ifr_data, &tsconf, sizeof(tsconf))) > > return -EFAULT; > > @@ -3178,6 +3215,12 @@ static int virtnet_probe(struct virtio_device *vdev) > > vi->hdr_len = sizeof(struct virtio_net_hdr_hash_ts); > > } > > + if (virtio_has_feature(vdev, VIRTIO_NET_F_TX_TSTAMP) && > > + !vring_use_dma_api(vdev)) { > > + vi->has_tx_tstamp = true; > > + vi->hdr_len = sizeof(struct virtio_net_hdr_hash_ts); > > + } > > + > > if (virtio_has_feature(vdev, VIRTIO_F_ANY_LAYOUT) || > > virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) > > vi->any_header_sg = true; > > @@ -3369,7 +3412,7 @@ static struct virtio_device_id id_table[] = { > > VIRTIO_NET_F_CTRL_MAC_ADDR, \ > > VIRTIO_NET_F_MTU, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS, \ > > VIRTIO_NET_F_SPEED_DUPLEX, VIRTIO_NET_F_STANDBY, \ > > - VIRTIO_NET_F_TX_HASH, VIRTIO_NET_F_RX_TSTAMP > > + VIRTIO_NET_F_TX_HASH, VIRTIO_NET_F_RX_TSTAMP, VIRTIO_NET_F_TX_TSTAMP > > static unsigned int features[] = { > > VIRTNET_FEATURES, > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > > index 71e16b53e9c1..cf5d5d1f9b14 100644 > > --- a/drivers/virtio/virtio_ring.c > > +++ b/drivers/virtio/virtio_ring.c > > @@ -238,7 +238,7 @@ static inline bool virtqueue_use_indirect(struct virtqueue *_vq, > > * unconditionally on data path. > > */ > > -static bool vring_use_dma_api(struct virtio_device *vdev) > > +bool vring_use_dma_api(struct virtio_device *vdev) > > { > > if (!virtio_has_dma_quirk(vdev)) > > return true; > > @@ -257,6 +257,7 @@ static bool vring_use_dma_api(struct virtio_device *vdev) > > return false; > > } > > +EXPORT_SYMBOL_GPL(vring_use_dma_api); > > size_t virtio_max_dma_size(struct virtio_device *vdev) > > { > > diff --git a/include/linux/virtio.h b/include/linux/virtio.h > > index 55ea329fe72a..5289e2812e95 100644 > > --- a/include/linux/virtio.h > > +++ b/include/linux/virtio.h > > @@ -140,6 +140,7 @@ int virtio_device_freeze(struct virtio_device *dev); > > int virtio_device_restore(struct virtio_device *dev); > > #endif > > +bool vring_use_dma_api(struct virtio_device *vdev); > > size_t virtio_max_dma_size(struct virtio_device *vdev); > > #define virtio_device_for_each_vq(vdev, vq) \ > > diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h > > index a5c84410cf92..b5d6f0c6cead 100644 > > --- a/include/uapi/linux/virtio_net.h > > +++ b/include/uapi/linux/virtio_net.h > > @@ -57,6 +57,7 @@ > > * Steering */ > > #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ > > +#define VIRTIO_NET_F_TX_TSTAMP 54 /* Device sends TAI transmit time */ > > #define VIRTIO_NET_F_RX_TSTAMP 55 /* Device sends TAI receive time */ > > > I wonder how much value to split into two features. > > Thanks > > > > #define VIRTIO_NET_F_TX_HASH 56 /* Driver sends hash report */ > > #define VIRTIO_NET_F_HASH_REPORT 57 /* Supports hash report */ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3DCACC433DB for ; Tue, 9 Feb 2021 16:39:09 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A0A2464D9D for ; Tue, 9 Feb 2021 16:39:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A0A2464D9D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 463DA87103; Tue, 9 Feb 2021 16:39:08 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4t8NxiP7ZOOw; Tue, 9 Feb 2021 16:39:07 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 3EBCA86F82; Tue, 9 Feb 2021 16:39:07 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 28D2AC0174; Tue, 9 Feb 2021 16:39:07 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8B6FEC013A for ; Tue, 9 Feb 2021 16:39:05 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 7FA8B86144 for ; Tue, 9 Feb 2021 16:39:05 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iD-9l-nP6DIw for ; Tue, 9 Feb 2021 16:39:02 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 901D68613E for ; Tue, 9 Feb 2021 16:39:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612888741; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j18aWEf5CADfmqMvOrXJkqA0qqCkiJleoTu3goUeHSM=; b=AjNTNrcJ2Fb1zlzA0SPp1dNydBJfYoax3n20rnBX6SRC4il/BLHHv+3Ds9BkvR2VTqy3/G Y0rKUCmBrRg1jT0PG+AJe2DN8DyCUH0ERc+aJmSs/gDinhm6JRO76SmFkSRTYDlRbMFygb i8S4ONclZvvBt7cUCpVfZgqalMLDxIo= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-343-3zHlsT7xPM-4NPMl8PSV7g-1; Tue, 09 Feb 2021 11:38:59 -0500 X-MC-Unique: 3zHlsT7xPM-4NPMl8PSV7g-1 Received: by mail-wr1-f69.google.com with SMTP id j8so17577931wrx.17 for ; Tue, 09 Feb 2021 08:38:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=j18aWEf5CADfmqMvOrXJkqA0qqCkiJleoTu3goUeHSM=; b=aqjudqlhqaHTLTIDpZYVHFH/O0lTkn407dQb83O21fZAxT3Mr0w79GJJ67h8ky8/d4 20GyqtmeySqkRBYZGNSwKbhA4lKceAO6zzMlpOZIYNnUstG7FKInXIh1+0Ucxx5NFzU4 igBqxwmUDtXIykO/kFR/gTRG90eHUo+aTKNthEUxmEBFzwvhB2TzOSBa+B+cNV058iZp dtYuWA439PigM3ojezhqIaxD3GcFZYshVgVVpE8iJSAeImvQ9tOW8n6p18B1orRgmrQb rd9xullqQspBGFr+WyQiB7nYBOB2GT1J5BOyLqjwpAu9HaIFGYMU4OwxG9Kj4u/p6P3R 9+Nw== X-Gm-Message-State: AOAM533uQBLGiAPupdjfKfEEzncePioggV4Tjs4rQY8isR4BxEGzo4wb gdn7LyH28PGECzOl7kIW9fPebnDvA1thFCJ2Bi7zExCOOxmPlw6kps33XHa6bT8shlBq9U0PeX/ VOFPIKO9mVh79lO57iJsvAPBBJS0adAbfdL1/pUG0uw== X-Received: by 2002:a5d:690b:: with SMTP id t11mr26608186wru.12.1612888738146; Tue, 09 Feb 2021 08:38:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJzRKdJBQCdmzziwPcmnK3944oxwc/YSEzg8BUmyrortM8c8BTMwCWv53TxFKLYzqUjxjED4bg== X-Received: by 2002:a5d:690b:: with SMTP id t11mr26608156wru.12.1612888737904; Tue, 09 Feb 2021 08:38:57 -0800 (PST) Received: from redhat.com (bzq-79-180-2-31.red.bezeqint.net. [79.180.2.31]) by smtp.gmail.com with ESMTPSA id v5sm17877825wro.71.2021.02.09.08.38.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Feb 2021 08:38:57 -0800 (PST) Date: Tue, 9 Feb 2021 11:38:54 -0500 From: "Michael S. Tsirkin" To: Jason Wang Subject: Re: [PATCH RFC v2 3/4] virtio-net: support transmit timestamp Message-ID: <20210209113643-mutt-send-email-mst@kernel.org> References: <20210208185558.995292-1-willemdebruijn.kernel@gmail.com> <20210208185558.995292-4-willemdebruijn.kernel@gmail.com> <6bfdf48d-c780-bc65-b0b9-24a33f18827b@redhat.com> MIME-Version: 1.0 In-Reply-To: <6bfdf48d-c780-bc65-b0b9-24a33f18827b@redhat.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mst@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline Cc: Willem de Bruijn , netdev@vger.kernel.org, Willem de Bruijn , richardcochran@gmail.com, virtualization@lists.linux-foundation.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gVHVlLCBGZWIgMDksIDIwMjEgYXQgMDE6NDU6MTFQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiBPbiAyMDIxLzIvOSDkuIrljYgyOjU1LCBXaWxsZW0gZGUgQnJ1aWpuIHdyb3RlOgo+ ID4gRnJvbTogV2lsbGVtIGRlIEJydWlqbiA8d2lsbGVtYkBnb29nbGUuY29tPgo+ID4gCj4gPiBB ZGQgb3B0aW9uYWwgUFRQIGhhcmR3YXJlIHR4IHRpbWVzdGFtcCBvZmZsb2FkIGZvciB2aXJ0aW8t bmV0Lgo+ID4gCj4gPiBBY2N1cmF0ZSBSVFQgbWVhc3VyZW1lbnQgcmVxdWlyZXMgdGltZXN0YW1w cyBjbG9zZSB0byB0aGUgd2lyZS4KPiA+IEludHJvZHVjZSB2aXJ0aW8gZmVhdHVyZSBWSVJUSU9f TkVUX0ZfVFhfVFNUQU1QLCB0aGUgdHJhbnNtaXQKPiA+IGVxdWl2YWxlbnQgdG8gVklSVElPX05F VF9GX1JYX1RTVEFNUC4KPiA+IAo+ID4gVGhlIGRyaXZlciBzZXRzIFZJUlRJT19ORVRfSERSX0Zf VFNUQU1QIHRvIHJlcXVlc3QgYSB0aW1lc3RhbXAKPiA+IHJldHVybmVkIG9uIGNvbXBsZXRpb24u IElmIHRoZSBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsIHRoZSBkZXZpY2UKPiA+IGVpdGhlciBwbGFj ZXMgdGhlIHRpbWVzdGFtcCBvciBjbGVhcnMgdGhlIGZlYXR1cmUgYml0Lgo+ID4gCj4gPiBUaGUg dGltZXN0YW1wIHN0cmFkZGxlcyAodmlydHVhbCkgaGFyZHdhcmUgZG9tYWlucy4gTGlrZSBQVFAs IHVzZQo+ID4gaW50ZXJuYXRpb25hbCBhdG9taWMgdGltZSAoQ0xPQ0tfVEFJKSBhcyBnbG9iYWwg Y2xvY2sgYmFzZS4gVGhlIGRyaXZlcgo+ID4gbXVzdCBzeW5jIHdpdGggdGhlIGRldmljZSwgZS5n LiwgdGhyb3VnaCBrdm0tY2xvY2suCj4gPiAKPiA+IE1vZGlmeSBjYW5fcHVzaCB0byBlbnN1cmUg dGhhdCBvbiB0eCBjb21wbGV0aW9uIHRoZSBoZWFkZXIsIGFuZCB0aHVzCj4gPiB0aW1lc3RhbXAs IGlzIGluIGEgcHJlZGljYXRhYmxlIGxvY2F0aW9uIGF0IHNrYl92bmV0X2hkci4KPiA+IAo+ID4g UkZDOiB0aGlzIGltcGxlbWVudGF0aW9uIHJlbGllcyBvbiB0aGUgZGV2aWNlIHdyaXRpbmcgdG8g dGhlIGJ1ZmZlci4KPiA+IFRoYXQgYnJlYWtzIERNQV9UT19ERVZJQ0Ugc2VtYW50aWNzLiBGb3Ig bm93LCBkaXNhYmxlIHdoZW4gRE1BIGlzIG9uLgo+ID4gVGhlIHZpcnRpbyBjaGFuZ2VzIHNob3Vs ZCBiZSBhIHNlcGFyYXRlIHBhdGNoIGF0IHRoZSBsZWFzdC4KPiA+IAo+ID4gVGVzdGVkOiBtb2Rp ZmllZCB0eHRpbWVzdGFtcC5jIHRvIHdpdGggaC93IHRpbWVzdGFtcGluZzoKPiA+ICAgIC0gICAg ICAgc29ja19vcHQgPSBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIHwKPiA+ICAgICsgICAgICAg c29ja19vcHQgPSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSB8Cj4gPiAgICArIGRvX3Rl c3QoZmFtaWx5LCBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKTsKPiA+IAo+ID4gU2lnbmVk LW9mZi1ieTogV2lsbGVtIGRlIEJydWlqbiA8d2lsbGVtYkBnb29nbGUuY29tPgo+ID4gLS0tCj4g PiAgIGRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyAgICAgICAgfCA2MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0KPiA+ICAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyAgICB8 ICAzICstCj4gPiAgIGluY2x1ZGUvbGludXgvdmlydGlvLmggICAgICAgICAgfCAgMSArCj4gPiAg IGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fbmV0LmggfCAgMSArCj4gPiAgIDQgZmlsZXMgY2hh bmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMK PiA+IGluZGV4IGFjNDRjNWVmYTBiYy4uZmM4ZWNkM2EzMzNhIDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiArKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMK PiA+IEBAIC0yMTAsNiArMjEwLDEyIEBAIHN0cnVjdCB2aXJ0bmV0X2luZm8gewo+ID4gICAJLyog RGV2aWNlIHdpbGwgcGFzcyByeCB0aW1lc3RhbXAuIFJlcXVpcmVzIGhhc19yeF90c3RhbXAgKi8K PiA+ICAgCWJvb2wgZW5hYmxlX3J4X3RzdGFtcDsKPiA+ICsJLyogRGV2aWNlIGNhbiBwYXNzIENM T0NLX1RBSSB0cmFuc21pdCB0aW1lIHRvIHRoZSBkcml2ZXIgKi8KPiA+ICsJYm9vbCBoYXNfdHhf dHN0YW1wOwo+ID4gKwo+ID4gKwkvKiBEZXZpY2Ugd2lsbCBwYXNzIHR4IHRpbWVzdGFtcC4gUmVx dWlyZXMgaGFzX3R4X3RzdGFtcCAqLwo+ID4gKwlib29sIGVuYWJsZV90eF90c3RhbXA7Cj4gPiAr Cj4gPiAgIAkvKiBIYXMgY29udHJvbCB2aXJ0cXVldWUgKi8KPiA+ICAgCWJvb2wgaGFzX2N2cTsK PiA+IEBAIC0xNDAxLDYgKzE0MDcsMjAgQEAgc3RhdGljIGludCB2aXJ0bmV0X3JlY2VpdmUoc3Ry dWN0IHJlY2VpdmVfcXVldWUgKnJxLCBpbnQgYnVkZ2V0LAo+ID4gICAJcmV0dXJuIHN0YXRzLnBh Y2tldHM7Cj4gPiAgIH0KPiA+ICtzdGF0aWMgdm9pZCB2aXJ0bmV0X3JlY29yZF90eF90c3RhbXAo Y29uc3Qgc3RydWN0IHNlbmRfcXVldWUgKnNxLAo+ID4gKwkJCQkgICAgIHN0cnVjdCBza19idWZm ICpza2IpCj4gPiArewo+ID4gKwljb25zdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHJfaGFzaF90cyAq aCA9IHNrYl92bmV0X2hkcl9odChza2IpOwo+ID4gKwljb25zdCBzdHJ1Y3QgdmlydG5ldF9pbmZv ICp2aSA9IHNxLT52cS0+dmRldi0+cHJpdjsKPiA+ICsJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3Rh bXBzIHRzOwo+ID4gKwo+ID4gKwlpZiAoaC0+aGRyLmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9U U1RBTVAgJiYKPiA+ICsJICAgIHZpLT5lbmFibGVfdHhfdHN0YW1wKSB7Cj4gPiArCQl0cy5od3Rz dGFtcCA9IG5zX3RvX2t0aW1lKGxlNjRfdG9fY3B1KGgtPnRzdGFtcCkpOwo+ID4gKwkJc2tiX3Rz dGFtcF90eChza2IsICZ0cyk7Cj4gCj4gCj4gVGhpcyBwcm9iYWJseSB3b24ndCB3b3JrIHNpbmNl IHRoZSBidWZmZXIgaXMgcmVhZC1vbmx5IGZyb20gdGhlIGRldmljZS4gKFNlZQo+IHZpcnRxdWV1 ZV9hZGRfb3V0YnVmKCkpLgo+IAo+IEFub3RoZXIgaXNzdWUgdGhhdCBJIHZhZ3VlbHkgcmVtZW1i ZXIgdGhhdCB0aGUgdmlydGlvIHNwZWMgZm9yYmlkcyBvdXQKPiBidWZmZXIgYWZ0ZXIgaW4gYnVm ZmVyLgoKQm90aCBEcml2ZXIgUmVxdWlyZW1lbnRzOiBNZXNzYWdlIEZyYW1pbmcgYW5kIERyaXZl ciBSZXF1aXJlbWVudHM6IFNjYXR0ZXItR2F0aGVyIFN1cHBvcnQKaGF2ZSB0aGlzIHN0YXRlbWVu dDoKCglUaGUgZHJpdmVyIE1VU1QgcGxhY2UgYW55IGRldmljZS13cml0YWJsZSBkZXNjcmlwdG9y IGVsZW1lbnRzIGFmdGVyIGFueSBkZXZpY2UtcmVhZGFibGUgZGVzY3JpcHRvciBlbGUtCgltZW50 cy4KCgpzaW1pbGFybHkKCkRldmljZSBSZXF1aXJlbWVudHM6IFRoZSBWaXJ0cXVldWUgRGVzY3Jp cHRvciBUYWJsZQoJQSBkZXZpY2UgTVVTVCBOT1Qgd3JpdGUgdG8gYSBkZXZpY2UtcmVhZGFibGUg YnVmZmVyLCBhbmQgYSBkZXZpY2UgU0hPVUxEIE5PVCByZWFkIGEgZGV2aWNlLXdyaXRhYmxlCgli dWZmZXIuCgoKCj4gCj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiAgIHN0YXRpYyB2b2lkIGZyZWVf b2xkX3htaXRfc2ticyhzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EsIGJvb2wgaW5fbmFwaSkKPiA+ICAg ewo+ID4gICAJdW5zaWduZWQgaW50IGxlbjsKPiA+IEBAIC0xNDEyLDYgKzE0MzIsNyBAQCBzdGF0 aWMgdm9pZCBmcmVlX29sZF94bWl0X3NrYnMoc3RydWN0IHNlbmRfcXVldWUgKnNxLCBib29sIGlu X25hcGkpCj4gPiAgIAkJaWYgKGxpa2VseSghaXNfeGRwX2ZyYW1lKHB0cikpKSB7Cj4gPiAgIAkJ CXN0cnVjdCBza19idWZmICpza2IgPSBwdHI7Cj4gPiArCQkJdmlydG5ldF9yZWNvcmRfdHhfdHN0 YW1wKHNxLCBza2IpOwo+ID4gICAJCQlwcl9kZWJ1ZygiU2VudCBza2IgJXBcbiIsIHNrYik7Cj4g PiAgIAkJCWJ5dGVzICs9IHNrYi0+bGVuOwo+ID4gQEAgLTE1NTgsNyArMTU3OSw3IEBAIHN0YXRp YyBpbnQgeG1pdF9za2Ioc3RydWN0IHNlbmRfcXVldWUgKnNxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQo+ID4gICAJc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1ZiAqaGRyOwo+ID4gICAJY29u c3QgdW5zaWduZWQgY2hhciAqZGVzdCA9ICgoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YSktPmhf ZGVzdDsKPiA+ICAgCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gc3EtPnZxLT52ZGV2LT5wcml2 Owo+ID4gLQlzdHJ1Y3QgdmlydGlvX25ldF9oZHJfdjFfaGFzaCAqaHQ7Cj4gPiArCXN0cnVjdCB2 aXJ0aW9fbmV0X2hkcl9oYXNoX3RzICpodDsKPiA+ICAgCWludCBudW1fc2c7Cj4gPiAgIAl1bnNp Z25lZCBoZHJfbGVuID0gdmktPmhkcl9sZW47Cj4gPiAgIAlib29sIGNhbl9wdXNoOwo+ID4gQEAg LTE1NjcsNyArMTU4OCw4IEBAIHN0YXRpYyBpbnQgeG1pdF9za2Ioc3RydWN0IHNlbmRfcXVldWUg KnNxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQo+ID4gICAJY2FuX3B1c2ggPSB2aS0+YW55X2hlYWRl cl9zZyAmJgo+ID4gICAJCSEoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgKF9fYWxpZ25vZl9f KCpoZHIpIC0gMSkpICYmCj4gPiAtCQkhc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSAmJiBza2JfaGVh ZHJvb20oc2tiKSA+PSBoZHJfbGVuOwo+ID4gKwkJIXNrYl9oZWFkZXJfY2xvbmVkKHNrYikgJiYg c2tiX2hlYWRyb29tKHNrYikgPj0gaGRyX2xlbiAmJgo+ID4gKwkJIXZpLT5lbmFibGVfdHhfdHN0 YW1wOwo+ID4gICAJLyogRXZlbiBpZiB3ZSBjYW4sIGRvbid0IHB1c2ggaGVyZSB5ZXQgYXMgdGhp cyB3b3VsZCBza2V3Cj4gPiAgIAkgKiBjc3VtX3N0YXJ0IG9mZnNldCBiZWxvdy4gKi8KPiA+ICAg CWlmIChjYW5fcHVzaCkKPiA+IEBAIC0xNTg4LDEwICsxNjEwLDEyIEBAIHN0YXRpYyBpbnQgeG1p dF9za2Ioc3RydWN0IHNlbmRfcXVldWUgKnNxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQo+ID4gICAJ CXUxNiByZXBvcnQgPSBza2ItPmw0X2hhc2ggPyBWSVJUSU9fTkVUX0hBU0hfUkVQT1JUX0w0IDoK PiA+ICAgCQkJCQkgICAgVklSVElPX05FVF9IQVNIX1JFUE9SVF9PVEhFUjsKPiA+IC0JCWh0LT5o YXNoX3ZhbHVlID0gY3B1X3RvX2xlMzIoc2tiLT5oYXNoKTsKPiA+IC0JCWh0LT5oYXNoX3JlcG9y dCA9IGNwdV90b19sZTE2KHJlcG9ydCk7Cj4gPiAtCQlodC0+aGFzaF9zdGF0ZSA9IGNwdV90b19s ZTE2KFZJUlRJT19ORVRfSEFTSF9TVEFURV9ERUZBVUxUKTsKPiA+ICsJCWh0LT5oYXNoLnZhbHVl ID0gY3B1X3RvX2xlMzIoc2tiLT5oYXNoKTsKPiA+ICsJCWh0LT5oYXNoLnJlcG9ydCA9IGNwdV90 b19sZTE2KHJlcG9ydCk7Cj4gPiArCQlodC0+aGFzaC5mbG93X3N0YXRlID0gY3B1X3RvX2xlMTYo VklSVElPX05FVF9IQVNIX1NUQVRFX0RFRkFVTFQpOwo+ID4gICAJfQo+ID4gKwlpZiAodmktPmVu YWJsZV90eF90c3RhbXAgJiYgc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyAmIFNLQlRYX0hXX1RT VEFNUCkKPiA+ICsJCWh0LT5oZHIuZmxhZ3MgfD0gVklSVElPX05FVF9IRFJfRl9UU1RBTVA7Cj4g PiAgIAlzZ19pbml0X3RhYmxlKHNxLT5zZywgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIChj YW5fcHVzaCA/IDEgOiAyKSk7Cj4gPiAgIAlpZiAoY2FuX3B1c2gpIHsKPiA+IEBAIC0yMzA3LDcg KzIzMzEsMTMgQEAgc3RhdGljIGludCB2aXJ0bmV0X2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsCj4gPiAgIAkJaW5mby0+cnhfZmlsdGVycyA9IEhXVFNUQU1QX0ZJTFRFUl9OT05F Owo+ID4gICAJfQo+ID4gLQlpbmZvLT50eF90eXBlcyA9IEhXVFNUQU1QX1RYX09GRjsKPiA+ICsJ aWYgKHZpLT5oYXNfdHhfdHN0YW1wKSB7Cj4gPiArCQlpbmZvLT5zb190aW1lc3RhbXBpbmcgfD0g U09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8Cj4gPiArCQkJCQkgU09GX1RJTUVTVEFNUElO R19SQVdfSEFSRFdBUkU7Cj4gPiArCQlpbmZvLT50eF90eXBlcyA9IEhXVFNUQU1QX1RYX09OOwo+ ID4gKwl9IGVsc2Ugewo+ID4gKwkJaW5mby0+dHhfdHlwZXMgPSBIV1RTVEFNUF9UWF9PRkY7Cj4g PiArCX0KPiA+ICAgCXJldHVybiAwOwo+ID4gICB9Cj4gPiBAQCAtMjYxNiw3ICsyNjQ2LDggQEAg c3RhdGljIGludCB2aXJ0bmV0X2lvY3RsX3NldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcikKPiA+ICAgCQlyZXR1cm4gLUVGQVVMVDsKPiA+ICAgCWlm ICh0c2NvbmYuZmxhZ3MpCj4gPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCWlmICh0c2NvbmYu dHhfdHlwZSAhPSBIV1RTVEFNUF9UWF9PRkYpCj4gPiArCWlmICh0c2NvbmYudHhfdHlwZSAhPSBI V1RTVEFNUF9UWF9PRkYgJiYKPiA+ICsJICAgIHRzY29uZi50eF90eXBlICE9IEhXVFNUQU1QX1RY X09OKQo+ID4gICAJCXJldHVybiAtRVJBTkdFOwo+ID4gICAJaWYgKHRzY29uZi5yeF9maWx0ZXIg IT0gSFdUU1RBTVBfRklMVEVSX05PTkUgJiYKPiA+ICAgCSAgICB0c2NvbmYucnhfZmlsdGVyICE9 IEhXVFNUQU1QX0ZJTFRFUl9BTEwpCj4gPiBAQCAtMjYyNyw2ICsyNjU4LDExIEBAIHN0YXRpYyBp bnQgdmlydG5ldF9pb2N0bF9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3Ry dWN0IGlmcmVxICppZnIpCj4gPiAgIAllbHNlCj4gPiAgIAkJdmktPmVuYWJsZV9yeF90c3RhbXAg PSB0c2NvbmYucnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9BTEw7Cj4gPiArCWlmICghdmkt Pmhhc190eF90c3RhbXApCj4gPiArCQl0c2NvbmYudHhfdHlwZSA9IEhXVFNUQU1QX1RYX09GRjsK PiA+ICsJZWxzZQo+ID4gKwkJdmktPmVuYWJsZV90eF90c3RhbXAgPSB0c2NvbmYudHhfdHlwZSA9 PSBIV1RTVEFNUF9UWF9PTjsKPiA+ICsKPiA+ICAgCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJf ZGF0YSwgJnRzY29uZiwgc2l6ZW9mKHRzY29uZikpKQo+ID4gICAJCXJldHVybiAtRUZBVUxUOwo+ ID4gQEAgLTI2NDEsNyArMjY3Nyw4IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9pb2N0bF9nZXRfaHd0 c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCj4gPiAgIAl0 c2NvbmYuZmxhZ3MgPSAwOwo+ID4gICAJdHNjb25mLnJ4X2ZpbHRlciA9IHZpLT5lbmFibGVfcnhf dHN0YW1wID8gSFdUU1RBTVBfRklMVEVSX0FMTCA6Cj4gPiAgIAkJCQkJCSAgSFdUU1RBTVBfRklM VEVSX05PTkU7Cj4gPiAtCXRzY29uZi50eF90eXBlID0gSFdUU1RBTVBfVFhfT0ZGOwo+ID4gKwl0 c2NvbmYudHhfdHlwZSA9IHZpLT5lbmFibGVfdHhfdHN0YW1wID8gSFdUU1RBTVBfVFhfT04gOgo+ ID4gKwkJCQkJCUhXVFNUQU1QX1RYX09GRjsKPiA+ICAgCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5p ZnJfZGF0YSwgJnRzY29uZiwgc2l6ZW9mKHRzY29uZikpKQo+ID4gICAJCXJldHVybiAtRUZBVUxU Owo+ID4gQEAgLTMxNzgsNiArMzIxNSwxMiBAQCBzdGF0aWMgaW50IHZpcnRuZXRfcHJvYmUoc3Ry dWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiAgIAkJdmktPmhkcl9sZW4gPSBzaXplb2Yoc3Ry dWN0IHZpcnRpb19uZXRfaGRyX2hhc2hfdHMpOwo+ID4gICAJfQo+ID4gKwlpZiAodmlydGlvX2hh c19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9UWF9UU1RBTVApICYmCj4gPiArCSAgICAhdnJp bmdfdXNlX2RtYV9hcGkodmRldikpIHsKPiA+ICsJCXZpLT5oYXNfdHhfdHN0YW1wID0gdHJ1ZTsK PiA+ICsJCXZpLT5oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9oYXNoX3Rz KTsKPiA+ICsJfQo+ID4gKwo+ID4gICAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJU SU9fRl9BTllfTEFZT1VUKSB8fAo+ID4gICAJICAgIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBW SVJUSU9fRl9WRVJTSU9OXzEpKQo+ID4gICAJCXZpLT5hbnlfaGVhZGVyX3NnID0gdHJ1ZTsKPiA+ IEBAIC0zMzY5LDcgKzM0MTIsNyBAQCBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRf dGFibGVbXSA9IHsKPiA+ICAgCVZJUlRJT19ORVRfRl9DVFJMX01BQ19BRERSLCBcCj4gPiAgIAlW SVJUSU9fTkVUX0ZfTVRVLCBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUywgXAo+ID4g ICAJVklSVElPX05FVF9GX1NQRUVEX0RVUExFWCwgVklSVElPX05FVF9GX1NUQU5EQlksIFwKPiA+ IC0JVklSVElPX05FVF9GX1RYX0hBU0gsIFZJUlRJT19ORVRfRl9SWF9UU1RBTVAKPiA+ICsJVklS VElPX05FVF9GX1RYX0hBU0gsIFZJUlRJT19ORVRfRl9SWF9UU1RBTVAsIFZJUlRJT19ORVRfRl9U WF9UU1RBTVAKPiA+ICAgc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewo+ID4gICAJ VklSVE5FVF9GRUFUVVJFUywKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f cmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gaW5kZXggNzFlMTZiNTNl OWMxLi5jZjVkNWQxZjliMTQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f cmluZy5jCj4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gPiBAQCAtMjM4 LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2aXJ0cXVldWVfdXNlX2luZGlyZWN0KHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiA+ICAgICogdW5jb25kaXRpb25hbGx5IG9uIGRhdGEgcGF0 aC4KPiA+ICAgICovCj4gPiAtc3RhdGljIGJvb2wgdnJpbmdfdXNlX2RtYV9hcGkoc3RydWN0IHZp cnRpb19kZXZpY2UgKnZkZXYpCj4gPiArYm9vbCB2cmluZ191c2VfZG1hX2FwaShzdHJ1Y3Qgdmly dGlvX2RldmljZSAqdmRldikKPiA+ICAgewo+ID4gICAJaWYgKCF2aXJ0aW9faGFzX2RtYV9xdWly ayh2ZGV2KSkKPiA+ICAgCQlyZXR1cm4gdHJ1ZTsKPiA+IEBAIC0yNTcsNiArMjU3LDcgQEAgc3Rh dGljIGJvb2wgdnJpbmdfdXNlX2RtYV9hcGkoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4g PiAgIAlyZXR1cm4gZmFsc2U7Cj4gPiAgIH0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTCh2cmluZ191 c2VfZG1hX2FwaSk7Cj4gPiAgIHNpemVfdCB2aXJ0aW9fbWF4X2RtYV9zaXplKHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICp2ZGV2KQo+ID4gICB7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92 aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKPiA+IGluZGV4IDU1ZWEzMjlmZTcyYS4u NTI4OWUyODEyZTk1IDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAo+ID4g KysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaAo+ID4gQEAgLTE0MCw2ICsxNDAsNyBAQCBpbnQg dmlydGlvX2RldmljZV9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7Cj4gPiAgIGlu dCB2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7Cj4gPiAg ICNlbmRpZgo+ID4gK2Jvb2wgdnJpbmdfdXNlX2RtYV9hcGkoc3RydWN0IHZpcnRpb19kZXZpY2Ug KnZkZXYpOwo+ID4gICBzaXplX3QgdmlydGlvX21heF9kbWFfc2l6ZShzdHJ1Y3QgdmlydGlvX2Rl dmljZSAqdmRldik7Cj4gPiAgICNkZWZpbmUgdmlydGlvX2RldmljZV9mb3JfZWFjaF92cSh2ZGV2 LCB2cSkgXAo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fbmV0Lmgg Yi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX25ldC5oCj4gPiBpbmRleCBhNWM4NDQxMGNmOTIu LmI1ZDZmMGM2Y2VhZCAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9f bmV0LmgKPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fbmV0LmgKPiA+IEBAIC01 Nyw2ICs1Nyw3IEBACj4gPiAgIAkJCQkJICogU3RlZXJpbmcgKi8KPiA+ICAgI2RlZmluZSBWSVJU SU9fTkVUX0ZfQ1RSTF9NQUNfQUREUiAyMwkvKiBTZXQgTUFDIGFkZHJlc3MgKi8KPiA+ICsjZGVm aW5lIFZJUlRJT19ORVRfRl9UWF9UU1RBTVAJICA1NAkvKiBEZXZpY2Ugc2VuZHMgVEFJIHRyYW5z bWl0IHRpbWUgKi8KPiA+ICAgI2RlZmluZSBWSVJUSU9fTkVUX0ZfUlhfVFNUQU1QCSAgNTUJLyog RGV2aWNlIHNlbmRzIFRBSSByZWNlaXZlIHRpbWUgKi8KPiAKPiAKPiBJIHdvbmRlciBob3cgbXVj aCB2YWx1ZSB0byBzcGxpdCBpbnRvIHR3byBmZWF0dXJlcy4KPiAKPiBUaGFua3MKPiAKPiAKPiA+ ICAgI2RlZmluZSBWSVJUSU9fTkVUX0ZfVFhfSEFTSAkgIDU2CS8qIERyaXZlciBzZW5kcyBoYXNo IHJlcG9ydCAqLwo+ID4gICAjZGVmaW5lIFZJUlRJT19ORVRfRl9IQVNIX1JFUE9SVCAgNTcJLyog U3VwcG9ydHMgaGFzaCByZXBvcnQgKi8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlv bkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlv bi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==