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=-15.8 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 468E1C433E6 for ; Wed, 24 Feb 2021 06:48:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EED3164D99 for ; Wed, 24 Feb 2021 06:48:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234246AbhBXGsM (ORCPT ); Wed, 24 Feb 2021 01:48:12 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:50340 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234228AbhBXGsH (ORCPT ); Wed, 24 Feb 2021 01:48:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1614149199; 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=SrFMsb94vi7hpDJMqK4fNRwcw8r8Q/1jRcohhOym2YA=; b=UASjuIYZ63oiW4K/YXv1ECivn5p/8xyHVX1+LWVfz0y8TySV8/fngjbM1tZGttcBtqthT/ cqqXKr3Xz5DyuJ7Jb89c38NlPmhE4aPSUAXSdYX7mYWJaXUgbfzlA1eq9VdPm2fzJBF4xM zXD2ygfXxzArjdNJ4YDhmBAMt+dHrzQ= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-161-AJcoi-V8NEOaPx56bLWKIw-1; Wed, 24 Feb 2021 01:46:38 -0500 X-MC-Unique: AJcoi-V8NEOaPx56bLWKIw-1 Received: by mail-wr1-f72.google.com with SMTP id d7so588458wri.23 for ; Tue, 23 Feb 2021 22:46:37 -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=SrFMsb94vi7hpDJMqK4fNRwcw8r8Q/1jRcohhOym2YA=; b=HUo4c81/5gne6rvSJ1OHwcMsouicKEZrmUIzY5m3JwKPIQsQASp9S4kxifqX0KN0aU wbHjVGlZKatx9OQVRw6P4cKhV+ejPdzRZQ0HXcdmh2IO7r36fQjDwx3cS85uHo66N6or B7VywDlULR1/Co7QWLycuBYRaBw3JWYtDZ948n6fShMOlEdU0UxHpq92L/KgMX94VG2s oyheKTYO60pgOC/sXeFwYzWVv1QhiD2IuRXtnOuWIKT3d5zp6ogtiD4GUdmfSMqYxts1 TRtD/Hc5hjYITW9GcVdwJmEYLcRtyckE2cLGNOmVfu4XMMPW1/ozLSzU1LTIH3zWfqD5 oBvA== X-Gm-Message-State: AOAM533RBkW87n49u4pmjtIXvN4ZQNx92dKfNCSd5S7uXKhxJwQQlx4T 8ouxu0JBEpNTFTSLOgn8Bu8dmzAkA4Ck4/5O+GrEaLbkIePPsZ2NoPSm9kp4k8512WSOqZ1+7KB VYFjFvZSzPI5OwqDbOmBTxMdJ X-Received: by 2002:adf:d0c5:: with SMTP id z5mr8150867wrh.289.1614149196913; Tue, 23 Feb 2021 22:46:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJzH56ZjY0BPRYg8d2IZLXaOZCvuJY0zLzqJIHo7nsxt7nkhq54ic8vvmJMjM6bClgLygBvSBA== X-Received: by 2002:adf:d0c5:: with SMTP id z5mr8150856wrh.289.1614149196761; Tue, 23 Feb 2021 22:46:36 -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 i1sm1141060wmq.12.2021.02.23.22.46.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Feb 2021 22:46:36 -0800 (PST) Date: Wed, 24 Feb 2021 01:46:33 -0500 From: "Michael S. Tsirkin" To: Jason Wang Cc: Si-Wei Liu , elic@nvidia.com, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org Subject: Re: [PATCH] vdpa/mlx5: set_features should allow reset to zero Message-ID: <20210224014232-mutt-send-email-mst@kernel.org> References: <1613735698-3328-1-git-send-email-si-wei.liu@oracle.com> <605e7d2d-4f27-9688-17a8-d57191752ee7@redhat.com> <20210222023040-mutt-send-email-mst@kernel.org> <22fe5923-635b-59f0-7643-2fd5876937c2@oracle.com> <20210223082536-mutt-send-email-mst@kernel.org> <3ff5fd23-1db0-2f95-4cf9-711ef403fb62@oracle.com> <20210224000057-mutt-send-email-mst@kernel.org> <0559fd8c-ff44-cb7a-8a74-71976dd2ee33@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <0559fd8c-ff44-cb7a-8a74-71976dd2ee33@redhat.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Feb 24, 2021 at 02:04:36PM +0800, Jason Wang wrote: > > On 2021/2/24 1:04 下午, Michael S. Tsirkin wrote: > > On Tue, Feb 23, 2021 at 11:35:57AM -0800, Si-Wei Liu wrote: > > > > > > On 2/23/2021 5:26 AM, Michael S. Tsirkin wrote: > > > > On Tue, Feb 23, 2021 at 10:03:57AM +0800, Jason Wang wrote: > > > > > On 2021/2/23 9:12 上午, Si-Wei Liu wrote: > > > > > > On 2/21/2021 11:34 PM, Michael S. Tsirkin wrote: > > > > > > > On Mon, Feb 22, 2021 at 12:14:17PM +0800, Jason Wang wrote: > > > > > > > > On 2021/2/19 7:54 下午, Si-Wei Liu wrote: > > > > > > > > > Commit 452639a64ad8 ("vdpa: make sure set_features is invoked > > > > > > > > > for legacy") made an exception for legacy guests to reset > > > > > > > > > features to 0, when config space is accessed before features > > > > > > > > > are set. We should relieve the verify_min_features() check > > > > > > > > > and allow features reset to 0 for this case. > > > > > > > > > > > > > > > > > > It's worth noting that not just legacy guests could access > > > > > > > > > config space before features are set. For instance, when > > > > > > > > > feature VIRTIO_NET_F_MTU is advertised some modern driver > > > > > > > > > will try to access and validate the MTU present in the config > > > > > > > > > space before virtio features are set. > > > > > > > > This looks like a spec violation: > > > > > > > > > > > > > > > > " > > > > > > > > > > > > > > > > The following driver-read-only field, mtu only exists if > > > > > > > > VIRTIO_NET_F_MTU is > > > > > > > > set. > > > > > > > > This field specifies the maximum MTU for the driver to use. > > > > > > > > " > > > > > > > > > > > > > > > > Do we really want to workaround this? > > > > > > > > > > > > > > > > Thanks > > > > > > > And also: > > > > > > > > > > > > > > The driver MUST follow this sequence to initialize a device: > > > > > > > 1. Reset the device. > > > > > > > 2. Set the ACKNOWLEDGE status bit: the guest OS has noticed the device. > > > > > > > 3. Set the DRIVER status bit: the guest OS knows how to drive the > > > > > > > device. > > > > > > > 4. Read device feature bits, and write the subset of feature bits > > > > > > > understood by the OS and driver to the > > > > > > > device. During this step the driver MAY read (but MUST NOT write) > > > > > > > the device-specific configuration > > > > > > > fields to check that it can support the device before accepting it. > > > > > > > 5. Set the FEATURES_OK status bit. The driver MUST NOT accept new > > > > > > > feature bits after this step. > > > > > > > 6. Re-read device status to ensure the FEATURES_OK bit is still set: > > > > > > > otherwise, the device does not > > > > > > > support our subset of features and the device is unusable. > > > > > > > 7. Perform device-specific setup, including discovery of virtqueues > > > > > > > for the device, optional per-bus setup, > > > > > > > reading and possibly writing the device’s virtio configuration > > > > > > > space, and population of virtqueues. > > > > > > > 8. Set the DRIVER_OK status bit. At this point the device is “live”. > > > > > > > > > > > > > > > > > > > > > so accessing config space before FEATURES_OK is a spec violation, right? > > > > > > It is, but it's not relevant to what this commit tries to address. I > > > > > > thought the legacy guest still needs to be supported. > > > > > > > > > > > > Having said, a separate patch has to be posted to fix the guest driver > > > > > > issue where this discrepancy is introduced to virtnet_validate() (since > > > > > > commit fe36cbe067). But it's not technically related to this patch. > > > > > > > > > > > > -Siwei > > > > > I think it's a bug to read config space in validate, we should move it to > > > > > virtnet_probe(). > > > > > > > > > > Thanks > > > > I take it back, reading but not writing seems to be explicitly allowed by spec. > > > > So our way to detect a legacy guest is bogus, need to think what is > > > > the best way to handle this. > > > Then maybe revert commit fe36cbe067 and friends, and have QEMU detect legacy > > > guest? Supposedly only config space write access needs to be guarded before > > > setting FEATURES_OK. > > > > > > -Siwie > > Detecting it isn't enough though, we will need a new ioctl to notify > > the kernel that it's a legacy guest. Ugh :( > > > I'm not sure I get this, how can we know if there's a legacy driver before > set_features()? qemu knows for sure. It does not communicate this information to the kernel right now unfortunately. > And I wonder what will hapeen if we just revert the set_features(0)? > > Thanks > > > > > > > > > > > > > > > Rejecting reset to 0 > > > > > > > > > prematurely causes correct MTU and link status unable to load > > > > > > > > > for the very first config space access, rendering issues like > > > > > > > > > guest showing inaccurate MTU value, or failure to reject > > > > > > > > > out-of-range MTU. > > > > > > > > > > > > > > > > > > Fixes: 1a86b377aa21 ("vdpa/mlx5: Add VDPA driver for > > > > > > > > > supported mlx5 devices") > > > > > > > > > Signed-off-by: Si-Wei Liu > > > > > > > > > --- > > > > > > > > >    drivers/vdpa/mlx5/net/mlx5_vnet.c | 15 +-------------- > > > > > > > > >    1 file changed, 1 insertion(+), 14 deletions(-) > > > > > > > > > > > > > > > > > > diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c > > > > > > > > > b/drivers/vdpa/mlx5/net/mlx5_vnet.c > > > > > > > > > index 7c1f789..540dd67 100644 > > > > > > > > > --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c > > > > > > > > > +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c > > > > > > > > > @@ -1490,14 +1490,6 @@ static u64 > > > > > > > > > mlx5_vdpa_get_features(struct vdpa_device *vdev) > > > > > > > > >        return mvdev->mlx_features; > > > > > > > > >    } > > > > > > > > > -static int verify_min_features(struct mlx5_vdpa_dev *mvdev, > > > > > > > > > u64 features) > > > > > > > > > -{ > > > > > > > > > -    if (!(features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM))) > > > > > > > > > -        return -EOPNOTSUPP; > > > > > > > > > - > > > > > > > > > -    return 0; > > > > > > > > > -} > > > > > > > > > - > > > > > > > > >    static int setup_virtqueues(struct mlx5_vdpa_net *ndev) > > > > > > > > >    { > > > > > > > > >        int err; > > > > > > > > > @@ -1558,18 +1550,13 @@ static int > > > > > > > > > mlx5_vdpa_set_features(struct vdpa_device *vdev, u64 > > > > > > > > > features) > > > > > > > > >    { > > > > > > > > >        struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); > > > > > > > > >        struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev); > > > > > > > > > -    int err; > > > > > > > > >        print_features(mvdev, features, true); > > > > > > > > > -    err = verify_min_features(mvdev, features); > > > > > > > > > -    if (err) > > > > > > > > > -        return err; > > > > > > > > > - > > > > > > > > >        ndev->mvdev.actual_features = features & > > > > > > > > > ndev->mvdev.mlx_features; > > > > > > > > >        ndev->config.mtu = cpu_to_mlx5vdpa16(mvdev, ndev->mtu); > > > > > > > > >        ndev->config.status |= cpu_to_mlx5vdpa16(mvdev, > > > > > > > > > VIRTIO_NET_S_LINK_UP); > > > > > > > > > -    return err; > > > > > > > > > +    return 0; > > > > > > > > >    } > > > > > > > > >    static void mlx5_vdpa_set_config_cb(struct vdpa_device > > > > > > > > > *vdev, struct vdpa_callback *cb) 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.5 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 08F94C433DB for ; Wed, 24 Feb 2021 06:46:46 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 87D1864E2B for ; Wed, 24 Feb 2021 06:46:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 87D1864E2B 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 smtp1.osuosl.org (Postfix) with ESMTP id 276D683BF6; Wed, 24 Feb 2021 06:46:45 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YXPHMJviHx42; Wed, 24 Feb 2021 06:46:44 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTP id 7D29883BAC; Wed, 24 Feb 2021 06:46:43 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5148DC000A; Wed, 24 Feb 2021 06:46:43 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id E5807C0001 for ; Wed, 24 Feb 2021 06:46:42 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id D452883BBB for ; Wed, 24 Feb 2021 06:46:42 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id a1rzxky4TEDD for ; Wed, 24 Feb 2021 06:46:41 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id C217B83BAC for ; Wed, 24 Feb 2021 06:46:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1614149200; 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=SrFMsb94vi7hpDJMqK4fNRwcw8r8Q/1jRcohhOym2YA=; b=C7oiWYmwW4uvlzsGKP/ETsjWj7dWLNafhyWPzfXxOj0rQd2tDC3l4+3vaV470Cx1JleWwR soAeHcCUo1b01K3fF4YkGPJx3P1DiQ1CpxKDDogo4ACAJXCjEexzJLSzJqLCJ6SmWVOA78 llYUEphdEa29xFGN4suxAX4zrKCPwxE= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-171-oiDPHSn2NHGfKK3nsoRwPw-1; Wed, 24 Feb 2021 01:46:38 -0500 X-MC-Unique: oiDPHSn2NHGfKK3nsoRwPw-1 Received: by mail-wr1-f70.google.com with SMTP id v18so603149wrr.8 for ; Tue, 23 Feb 2021 22:46:37 -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=SrFMsb94vi7hpDJMqK4fNRwcw8r8Q/1jRcohhOym2YA=; b=DwdIkRW3sPaYl/+eD8sHpLb8zidyAyWuRd38kaWlUnKw9gqrySZ5fYlLYMC9SEHXjA XDGRRJ3b5+GtrnKFGZYfMu/SC0FM/G1271xqRm3Jm5rw+q82McIG+KxCYvyncdnAbyrz LgqtJzImyolOZd1Pqhmyyig9bnOTPO152tcqIwNeO0Pt3WFbRusY2cm4s9W0SDV+kXlv aJFZhYMcALnIzoH3S7QnkssLwnZfBoYxxbUJPTEmAyaDj4Y52mLZN5vFhcdq7LJh37dw ZRAjD2jwNzNUw9L7j48d7ol9BXs6CjPYCTZ+mOruo0Jx4DKnFxNj+O4aAGlENXB3S+le t5CQ== X-Gm-Message-State: AOAM530rcTSM1YXjjm734juxIq1eiqxCzsJwDjjExWL0VPDhLnez4FmL Ypt+QCGVAWUhI29B0gJubqxrY9D6gCzprogq94P0uOgKFNp5oYvwuoDviHyNm/ki5PJBjBxbZpl KCXH/GbrI0uJTfSpOTIZjLlxqjZOVSvuknsjsQJHkMw== X-Received: by 2002:adf:d0c5:: with SMTP id z5mr8150866wrh.289.1614149196913; Tue, 23 Feb 2021 22:46:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJzH56ZjY0BPRYg8d2IZLXaOZCvuJY0zLzqJIHo7nsxt7nkhq54ic8vvmJMjM6bClgLygBvSBA== X-Received: by 2002:adf:d0c5:: with SMTP id z5mr8150856wrh.289.1614149196761; Tue, 23 Feb 2021 22:46:36 -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 i1sm1141060wmq.12.2021.02.23.22.46.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Feb 2021 22:46:36 -0800 (PST) Date: Wed, 24 Feb 2021 01:46:33 -0500 From: "Michael S. Tsirkin" To: Jason Wang Subject: Re: [PATCH] vdpa/mlx5: set_features should allow reset to zero Message-ID: <20210224014232-mutt-send-email-mst@kernel.org> References: <1613735698-3328-1-git-send-email-si-wei.liu@oracle.com> <605e7d2d-4f27-9688-17a8-d57191752ee7@redhat.com> <20210222023040-mutt-send-email-mst@kernel.org> <22fe5923-635b-59f0-7643-2fd5876937c2@oracle.com> <20210223082536-mutt-send-email-mst@kernel.org> <3ff5fd23-1db0-2f95-4cf9-711ef403fb62@oracle.com> <20210224000057-mutt-send-email-mst@kernel.org> <0559fd8c-ff44-cb7a-8a74-71976dd2ee33@redhat.com> MIME-Version: 1.0 In-Reply-To: <0559fd8c-ff44-cb7a-8a74-71976dd2ee33@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: Si-Wei Liu , netdev@vger.kernel.org, elic@nvidia.com, linux-kernel@vger.kernel.org, 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" T24gV2VkLCBGZWIgMjQsIDIwMjEgYXQgMDI6MDQ6MzZQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiBPbiAyMDIxLzIvMjQgMTowNCDkuIvljYgsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90 ZToKPiA+IE9uIFR1ZSwgRmViIDIzLCAyMDIxIGF0IDExOjM1OjU3QU0gLTA4MDAsIFNpLVdlaSBM aXUgd3JvdGU6Cj4gPiA+IAo+ID4gPiBPbiAyLzIzLzIwMjEgNToyNiBBTSwgTWljaGFlbCBTLiBU c2lya2luIHdyb3RlOgo+ID4gPiA+IE9uIFR1ZSwgRmViIDIzLCAyMDIxIGF0IDEwOjAzOjU3QU0g KzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+ID4gPiBPbiAyMDIxLzIvMjMgOToxMiDkuIrl jYgsIFNpLVdlaSBMaXUgd3JvdGU6Cj4gPiA+ID4gPiA+IE9uIDIvMjEvMjAyMSAxMTozNCBQTSwg TWljaGFlbCBTLiBUc2lya2luIHdyb3RlOgo+ID4gPiA+ID4gPiA+IE9uIE1vbiwgRmViIDIyLCAy MDIxIGF0IDEyOjE0OjE3UE0gKzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+ID4gPiA+ID4g PiBPbiAyMDIxLzIvMTkgNzo1NCDkuIvljYgsIFNpLVdlaSBMaXUgd3JvdGU6Cj4gPiA+ID4gPiA+ ID4gPiA+IENvbW1pdCA0NTI2MzlhNjRhZDggKCJ2ZHBhOiBtYWtlIHN1cmUgc2V0X2ZlYXR1cmVz IGlzIGludm9rZWQKPiA+ID4gPiA+ID4gPiA+ID4gZm9yIGxlZ2FjeSIpIG1hZGUgYW4gZXhjZXB0 aW9uIGZvciBsZWdhY3kgZ3Vlc3RzIHRvIHJlc2V0Cj4gPiA+ID4gPiA+ID4gPiA+IGZlYXR1cmVz IHRvIDAsIHdoZW4gY29uZmlnIHNwYWNlIGlzIGFjY2Vzc2VkIGJlZm9yZSBmZWF0dXJlcwo+ID4g PiA+ID4gPiA+ID4gPiBhcmUgc2V0LiBXZSBzaG91bGQgcmVsaWV2ZSB0aGUgdmVyaWZ5X21pbl9m ZWF0dXJlcygpIGNoZWNrCj4gPiA+ID4gPiA+ID4gPiA+IGFuZCBhbGxvdyBmZWF0dXJlcyByZXNl dCB0byAwIGZvciB0aGlzIGNhc2UuCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4g PiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IG5vdCBqdXN0IGxlZ2FjeSBndWVzdHMgY291bGQgYWNj ZXNzCj4gPiA+ID4gPiA+ID4gPiA+IGNvbmZpZyBzcGFjZSBiZWZvcmUgZmVhdHVyZXMgYXJlIHNl dC4gRm9yIGluc3RhbmNlLCB3aGVuCj4gPiA+ID4gPiA+ID4gPiA+IGZlYXR1cmUgVklSVElPX05F VF9GX01UVSBpcyBhZHZlcnRpc2VkIHNvbWUgbW9kZXJuIGRyaXZlcgo+ID4gPiA+ID4gPiA+ID4g PiB3aWxsIHRyeSB0byBhY2Nlc3MgYW5kIHZhbGlkYXRlIHRoZSBNVFUgcHJlc2VudCBpbiB0aGUg Y29uZmlnCj4gPiA+ID4gPiA+ID4gPiA+IHNwYWNlIGJlZm9yZSB2aXJ0aW8gZmVhdHVyZXMgYXJl IHNldC4KPiA+ID4gPiA+ID4gPiA+IFRoaXMgbG9va3MgbGlrZSBhIHNwZWMgdmlvbGF0aW9uOgo+ ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiAiCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+IFRoZSBmb2xsb3dpbmcgZHJpdmVyLXJlYWQtb25seSBmaWVsZCwgbXR1IG9ubHkg ZXhpc3RzIGlmCj4gPiA+ID4gPiA+ID4gPiBWSVJUSU9fTkVUX0ZfTVRVIGlzCj4gPiA+ID4gPiA+ ID4gPiBzZXQuCj4gPiA+ID4gPiA+ID4gPiBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgbWF4aW11 bSBNVFUgZm9yIHRoZSBkcml2ZXIgdG8gdXNlLgo+ID4gPiA+ID4gPiA+ID4gIgo+ID4gPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBEbyB3ZSByZWFsbHkgd2FudCB0byB3b3JrYXJvdW5kIHRo aXM/Cj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IFRoYW5rcwo+ID4gPiA+ID4gPiA+ IEFuZCBhbHNvOgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFRoZSBkcml2ZXIgTVVTVCBm b2xsb3cgdGhpcyBzZXF1ZW5jZSB0byBpbml0aWFsaXplIGEgZGV2aWNlOgo+ID4gPiA+ID4gPiA+ IDEuIFJlc2V0IHRoZSBkZXZpY2UuCj4gPiA+ID4gPiA+ID4gMi4gU2V0IHRoZSBBQ0tOT1dMRURH RSBzdGF0dXMgYml0OiB0aGUgZ3Vlc3QgT1MgaGFzIG5vdGljZWQgdGhlIGRldmljZS4KPiA+ID4g PiA+ID4gPiAzLiBTZXQgdGhlIERSSVZFUiBzdGF0dXMgYml0OiB0aGUgZ3Vlc3QgT1Mga25vd3Mg aG93IHRvIGRyaXZlIHRoZQo+ID4gPiA+ID4gPiA+IGRldmljZS4KPiA+ID4gPiA+ID4gPiA0LiBS ZWFkIGRldmljZSBmZWF0dXJlIGJpdHMsIGFuZCB3cml0ZSB0aGUgc3Vic2V0IG9mIGZlYXR1cmUg Yml0cwo+ID4gPiA+ID4gPiA+IHVuZGVyc3Rvb2QgYnkgdGhlIE9TIGFuZCBkcml2ZXIgdG8gdGhl Cj4gPiA+ID4gPiA+ID4gZGV2aWNlLiBEdXJpbmcgdGhpcyBzdGVwIHRoZSBkcml2ZXIgTUFZIHJl YWQgKGJ1dCBNVVNUIE5PVCB3cml0ZSkKPiA+ID4gPiA+ID4gPiB0aGUgZGV2aWNlLXNwZWNpZmlj IGNvbmZpZ3VyYXRpb24KPiA+ID4gPiA+ID4gPiBmaWVsZHMgdG8gY2hlY2sgdGhhdCBpdCBjYW4g c3VwcG9ydCB0aGUgZGV2aWNlIGJlZm9yZSBhY2NlcHRpbmcgaXQuCj4gPiA+ID4gPiA+ID4gNS4g U2V0IHRoZSBGRUFUVVJFU19PSyBzdGF0dXMgYml0LiBUaGUgZHJpdmVyIE1VU1QgTk9UIGFjY2Vw dCBuZXcKPiA+ID4gPiA+ID4gPiBmZWF0dXJlIGJpdHMgYWZ0ZXIgdGhpcyBzdGVwLgo+ID4gPiA+ ID4gPiA+IDYuIFJlLXJlYWQgZGV2aWNlIHN0YXR1cyB0byBlbnN1cmUgdGhlIEZFQVRVUkVTX09L IGJpdCBpcyBzdGlsbCBzZXQ6Cj4gPiA+ID4gPiA+ID4gb3RoZXJ3aXNlLCB0aGUgZGV2aWNlIGRv ZXMgbm90Cj4gPiA+ID4gPiA+ID4gc3VwcG9ydCBvdXIgc3Vic2V0IG9mIGZlYXR1cmVzIGFuZCB0 aGUgZGV2aWNlIGlzIHVudXNhYmxlLgo+ID4gPiA+ID4gPiA+IDcuIFBlcmZvcm0gZGV2aWNlLXNw ZWNpZmljIHNldHVwLCBpbmNsdWRpbmcgZGlzY292ZXJ5IG9mIHZpcnRxdWV1ZXMKPiA+ID4gPiA+ ID4gPiBmb3IgdGhlIGRldmljZSwgb3B0aW9uYWwgcGVyLWJ1cyBzZXR1cCwKPiA+ID4gPiA+ID4g PiByZWFkaW5nIGFuZCBwb3NzaWJseSB3cml0aW5nIHRoZSBkZXZpY2XigJlzIHZpcnRpbyBjb25m aWd1cmF0aW9uCj4gPiA+ID4gPiA+ID4gc3BhY2UsIGFuZCBwb3B1bGF0aW9uIG9mIHZpcnRxdWV1 ZXMuCj4gPiA+ID4gPiA+ID4gOC4gU2V0IHRoZSBEUklWRVJfT0sgc3RhdHVzIGJpdC4gQXQgdGhp cyBwb2ludCB0aGUgZGV2aWNlIGlzIOKAnGxpdmXigJ0uCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+ID4gc28gYWNjZXNzaW5nIGNvbmZpZyBzcGFjZSBiZWZvcmUgRkVB VFVSRVNfT0sgaXMgYSBzcGVjIHZpb2xhdGlvbiwgcmlnaHQ/Cj4gPiA+ID4gPiA+IEl0IGlzLCBi dXQgaXQncyBub3QgcmVsZXZhbnQgdG8gd2hhdCB0aGlzIGNvbW1pdCB0cmllcyB0byBhZGRyZXNz LiBJCj4gPiA+ID4gPiA+IHRob3VnaHQgdGhlIGxlZ2FjeSBndWVzdCBzdGlsbCBuZWVkcyB0byBi ZSBzdXBwb3J0ZWQuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBIYXZpbmcgc2FpZCwgYSBzZXBh cmF0ZSBwYXRjaCBoYXMgdG8gYmUgcG9zdGVkIHRvIGZpeCB0aGUgZ3Vlc3QgZHJpdmVyCj4gPiA+ ID4gPiA+IGlzc3VlIHdoZXJlIHRoaXMgZGlzY3JlcGFuY3kgaXMgaW50cm9kdWNlZCB0byB2aXJ0 bmV0X3ZhbGlkYXRlKCkgKHNpbmNlCj4gPiA+ID4gPiA+IGNvbW1pdCBmZTM2Y2JlMDY3KS4gQnV0 IGl0J3Mgbm90IHRlY2huaWNhbGx5IHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4KPiA+ID4gPiA+ID4g Cj4gPiA+ID4gPiA+IC1TaXdlaQo+ID4gPiA+ID4gSSB0aGluayBpdCdzIGEgYnVnIHRvIHJlYWQg Y29uZmlnIHNwYWNlIGluIHZhbGlkYXRlLCB3ZSBzaG91bGQgbW92ZSBpdCB0bwo+ID4gPiA+ID4g dmlydG5ldF9wcm9iZSgpLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGFua3MKPiA+ID4gPiBJIHRh a2UgaXQgYmFjaywgcmVhZGluZyBidXQgbm90IHdyaXRpbmcgc2VlbXMgdG8gYmUgZXhwbGljaXRs eSBhbGxvd2VkIGJ5IHNwZWMuCj4gPiA+ID4gU28gb3VyIHdheSB0byBkZXRlY3QgYSBsZWdhY3kg Z3Vlc3QgaXMgYm9ndXMsIG5lZWQgdG8gdGhpbmsgd2hhdCBpcwo+ID4gPiA+IHRoZSBiZXN0IHdh eSB0byBoYW5kbGUgdGhpcy4KPiA+ID4gVGhlbiBtYXliZSByZXZlcnQgY29tbWl0IGZlMzZjYmUw NjcgYW5kIGZyaWVuZHMsIGFuZCBoYXZlIFFFTVUgZGV0ZWN0IGxlZ2FjeQo+ID4gPiBndWVzdD8g U3VwcG9zZWRseSBvbmx5IGNvbmZpZyBzcGFjZSB3cml0ZSBhY2Nlc3MgbmVlZHMgdG8gYmUgZ3Vh cmRlZCBiZWZvcmUKPiA+ID4gc2V0dGluZyBGRUFUVVJFU19PSy4KPiA+ID4gCj4gPiA+IC1TaXdp ZQo+ID4gRGV0ZWN0aW5nIGl0IGlzbid0IGVub3VnaCB0aG91Z2gsIHdlIHdpbGwgbmVlZCBhIG5l dyBpb2N0bCB0byBub3RpZnkKPiA+IHRoZSBrZXJuZWwgdGhhdCBpdCdzIGEgbGVnYWN5IGd1ZXN0 LiBVZ2ggOigKPiAKPiAKPiBJJ20gbm90IHN1cmUgSSBnZXQgdGhpcywgaG93IGNhbiB3ZSBrbm93 IGlmIHRoZXJlJ3MgYSBsZWdhY3kgZHJpdmVyIGJlZm9yZQo+IHNldF9mZWF0dXJlcygpPwoKcWVt dSBrbm93cyBmb3Igc3VyZS4gSXQgZG9lcyBub3QgY29tbXVuaWNhdGUgdGhpcyBpbmZvcm1hdGlv biB0byB0aGUKa2VybmVsIHJpZ2h0IG5vdyB1bmZvcnR1bmF0ZWx5LgoKPiBBbmQgSSB3b25kZXIg d2hhdCB3aWxsIGhhcGVlbiBpZiB3ZSBqdXN0IHJldmVydCB0aGUgc2V0X2ZlYXR1cmVzKDApPwo+ IAo+IFRoYW5rcwo+IAo+IAo+ID4gCj4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gUmVqZWN0aW5nIHJl c2V0IHRvIDAKPiA+ID4gPiA+ID4gPiA+ID4gcHJlbWF0dXJlbHkgY2F1c2VzIGNvcnJlY3QgTVRV IGFuZCBsaW5rIHN0YXR1cyB1bmFibGUgdG8gbG9hZAo+ID4gPiA+ID4gPiA+ID4gPiBmb3IgdGhl IHZlcnkgZmlyc3QgY29uZmlnIHNwYWNlIGFjY2VzcywgcmVuZGVyaW5nIGlzc3VlcyBsaWtlCj4g PiA+ID4gPiA+ID4gPiA+IGd1ZXN0IHNob3dpbmcgaW5hY2N1cmF0ZSBNVFUgdmFsdWUsIG9yIGZh aWx1cmUgdG8gcmVqZWN0Cj4gPiA+ID4gPiA+ID4gPiA+IG91dC1vZi1yYW5nZSBNVFUuCj4gPiA+ ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiBGaXhlczogMWE4NmIzNzdhYTIxICgidmRw YS9tbHg1OiBBZGQgVkRQQSBkcml2ZXIgZm9yCj4gPiA+ID4gPiA+ID4gPiA+IHN1cHBvcnRlZCBt bHg1IGRldmljZXMiKQo+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBTaS1XZWkgTGl1 IDxzaS13ZWkubGl1QG9yYWNsZS5jb20+Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4g PiA+ID4gPiAgIMKgwqAgZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jIHwgMTUgKy0t LS0tLS0tLS0tLS0tCj4gPiA+ID4gPiA+ID4gPiA+ICAgwqDCoCAxIGZpbGUgY2hhbmdlZCwgMSBp bnNlcnRpb24oKyksIDE0IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYwo+ ID4gPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYwo+ID4g PiA+ID4gPiA+ID4gPiBpbmRleCA3YzFmNzg5Li41NDBkZDY3IDEwMDY0NAo+ID4gPiA+ID4gPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmMKPiA+ID4gPiA+ID4g PiA+ID4gKysrIGIvZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jCj4gPiA+ID4gPiA+ ID4gPiA+IEBAIC0xNDkwLDE0ICsxNDkwLDYgQEAgc3RhdGljIHU2NAo+ID4gPiA+ID4gPiA+ID4g PiBtbHg1X3ZkcGFfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldikKPiA+ID4g PiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqAgcmV0dXJuIG12ZGV2LT5tbHhfZmVhdHVyZXM7Cj4g PiA+ID4gPiA+ID4gPiA+ICAgwqDCoCB9Cj4gPiA+ID4gPiA+ID4gPiA+IC1zdGF0aWMgaW50IHZl cmlmeV9taW5fZmVhdHVyZXMoc3RydWN0IG1seDVfdmRwYV9kZXYgKm12ZGV2LAo+ID4gPiA+ID4g PiA+ID4gPiB1NjQgZmVhdHVyZXMpCj4gPiA+ID4gPiA+ID4gPiA+IC17Cj4gPiA+ID4gPiA+ID4g PiA+IC3CoMKgwqAgaWYgKCEoZmVhdHVyZXMgJiBCSVRfVUxMKFZJUlRJT19GX0FDQ0VTU19QTEFU Rk9STSkpKQo+ID4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RT VVBQOwo+ID4gPiA+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgcmV0dXJu IDA7Cj4gPiA+ID4gPiA+ID4gPiA+IC19Cj4gPiA+ID4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4g PiA+ID4gICDCoMKgIHN0YXRpYyBpbnQgc2V0dXBfdmlydHF1ZXVlcyhzdHJ1Y3QgbWx4NV92ZHBh X25ldCAqbmRldikKPiA+ID4gPiA+ID4gPiA+ID4gICDCoMKgIHsKPiA+ID4gPiA+ID4gPiA+ID4g ICDCoMKgwqDCoMKgwqAgaW50IGVycjsKPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTE1NTgsMTggKzE1 NTAsMTMgQEAgc3RhdGljIGludAo+ID4gPiA+ID4gPiA+ID4gPiBtbHg1X3ZkcGFfc2V0X2ZlYXR1 cmVzKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgdTY0Cj4gPiA+ID4gPiA+ID4gPiA+IGZlYXR1 cmVzKQo+ID4gPiA+ID4gPiA+ID4gPiAgIMKgwqAgewo+ID4gPiA+ID4gPiA+ID4gPiAgIMKgwqDC oMKgwqDCoCBzdHJ1Y3QgbWx4NV92ZHBhX2RldiAqbXZkZXYgPSB0b19tdmRldih2ZGV2KTsKPiA+ ID4gPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqAgc3RydWN0IG1seDVfdmRwYV9uZXQgKm5kZXYg PSB0b19tbHg1X3ZkcGFfbmRldihtdmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgaW50 IGVycjsKPiA+ID4gPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqAgcHJpbnRfZmVhdHVyZXMobXZk ZXYsIGZlYXR1cmVzLCB0cnVlKTsKPiA+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBlcnIgPSB2ZXJp ZnlfbWluX2ZlYXR1cmVzKG12ZGV2LCBmZWF0dXJlcyk7Cj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKg wqAgaWYgKGVycikKPiA+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7 Cj4gPiA+ID4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqAgbmRl di0+bXZkZXYuYWN0dWFsX2ZlYXR1cmVzID0gZmVhdHVyZXMgJgo+ID4gPiA+ID4gPiA+ID4gPiBu ZGV2LT5tdmRldi5tbHhfZmVhdHVyZXM7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgwqDCoMKgwqDCoMKg IG5kZXYtPmNvbmZpZy5tdHUgPSBjcHVfdG9fbWx4NXZkcGExNihtdmRldiwgbmRldi0+bXR1KTsK PiA+ID4gPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqAgbmRldi0+Y29uZmlnLnN0YXR1cyB8PSBj cHVfdG9fbWx4NXZkcGExNihtdmRldiwKPiA+ID4gPiA+ID4gPiA+ID4gVklSVElPX05FVF9TX0xJ TktfVVApOwo+ID4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIHJldHVybiBlcnI7Cj4gPiA+ID4gPiA+ ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgwqDCoCB9Cj4gPiA+ ID4gPiA+ID4gPiA+ICAgwqDCoCBzdGF0aWMgdm9pZCBtbHg1X3ZkcGFfc2V0X2NvbmZpZ19jYihz dHJ1Y3QgdmRwYV9kZXZpY2UKPiA+ID4gPiA+ID4gPiA+ID4gKnZkZXYsIHN0cnVjdCB2ZHBhX2Nh bGxiYWNrICpjYikKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51 eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1h bi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==