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=-18.7 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,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable 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 2C259C07E98 for ; Mon, 5 Jul 2021 05:04:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 08D74613DA for ; Mon, 5 Jul 2021 05:04:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229774AbhGEFHB (ORCPT ); Mon, 5 Jul 2021 01:07:01 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:32067 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229716AbhGEFHA (ORCPT ); Mon, 5 Jul 2021 01:07:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1625461462; 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=CDMmAEK+dhpeMI8ETaJVArjrnaSTT4gcPjmGTBH0vjo=; b=UXf0mJBJH9UFzJiJN14sQrgTkjKQI0URhN4Wo0AqflbtPhFZ0lbJs0R4RTO/9EVmgZn+8x RloCFoA30Fj2SOFiNavKyQOYaGZBtcSwlmrmKW6LVX8zrXSlBXgZNXsqp5mZD2B9Wb13qC T2tdGrH/74CmlKbU3gcBGwUxVlUoN/g= Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-481-zBw49C6gMGySH3TtX0emvQ-1; Mon, 05 Jul 2021 01:04:21 -0400 X-MC-Unique: zBw49C6gMGySH3TtX0emvQ-1 Received: by mail-pj1-f72.google.com with SMTP id x2-20020a17090ab002b029016e8b858193so9124930pjq.3 for ; Sun, 04 Jul 2021 22:04:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=CDMmAEK+dhpeMI8ETaJVArjrnaSTT4gcPjmGTBH0vjo=; b=sEcPMKYk7cv+46B7OV7fjUzrRml//m/3PoFcylbImriIilaTitV8u3/rW7IYKCSzLD /hXZxF4bvaBndMh6tcjSSM3+M/WrwHgjNlETSwlfiOCX3sTpspQhk45O1un64H0mmuMv CYdJB/+hMMTIOISeZ33A0DveM9g7zK9ONwHR0z5ekoZUUmcMAbFUqTNIBMXQiteUT+aL kOrF/gajPfDK3QjfnnNzzykcsXn7fMTqbab1RYa1DFNoNm3dcOFBE3Gz/Pj2G7FjiR8M aYzCKxwNA69Qxt9Yo1N16TM3mzV2ZrmnAvVCiUuTTfxdQDKr4CbyBuhrSeYu5mZ74/dv iolw== X-Gm-Message-State: AOAM531BcuRlt++F/sXHT9ewcuq/C4kWJs/aWLb01KcNCfjhxUP2Nswu ppLyg8eHc2LGJcafABZ9VoE/nGkVprx8zCXC5pKeY3ay7BAD5knla1CQQTN434Wd43DDD9t0WB2 RoDWr2Mlem+99R9r1 X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr11114440pln.28.1625461460342; Sun, 04 Jul 2021 22:04:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8V/lTNcXrByvwpOEoWgzbOd4v9xn8O/vXDHb/0Gp3pEzjnM+iXbmKBKvZ/cgl1NOIJw2Imw== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr11114389pln.28.1625461459558; Sun, 04 Jul 2021 22:04:19 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id j15sm6159983pjl.15.2021.07.04.22.04.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 04 Jul 2021 22:04:19 -0700 (PDT) Subject: Re: [PATCH 2/3] vDPA/ifcvf: implement management netlink framework for ifcvf To: Zhu Lingshan , mst@redhat.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, kvm@vger.kernel.org References: <20210630082145.5729-1-lingshan.zhu@intel.com> <20210630082145.5729-3-lingshan.zhu@intel.com> From: Jason Wang Message-ID: <1ebb3dc8-5416-f718-2837-8371e78dd3d0@redhat.com> Date: Mon, 5 Jul 2021 13:04:11 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210630082145.5729-3-lingshan.zhu@intel.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ÔÚ 2021/6/30 ÏÂÎç4:21, Zhu Lingshan дµÀ: > This commit implments the management netlink framework for ifcvf, > including register and add / remove a device > > It works with iprouter2: > [root@localhost lszhu]# vdpa mgmtdev show -jp > { > "mgmtdev": { > "pci/0000:01:00.5": { > "supported_classes": [ "net" ] > }, > "pci/0000:01:00.6": { > "supported_classes": [ "net" ] > } > } > } > > [root@localhost lszhu]# vdpa dev add mgmtdev pci/0000:01:00.5 name vdpa0 > [root@localhost lszhu]# vdpa dev add mgmtdev pci/0000:01:00.6 name vdpa1 > > Signed-off-by: Zhu Lingshan > --- > drivers/vdpa/ifcvf/ifcvf_base.h | 6 ++ > drivers/vdpa/ifcvf/ifcvf_main.c | 156 ++++++++++++++++++++++++-------- > 2 files changed, 126 insertions(+), 36 deletions(-) > > diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h > index ded1b1b5fb13..e5251fcbb200 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_base.h > +++ b/drivers/vdpa/ifcvf/ifcvf_base.h > @@ -104,6 +104,12 @@ struct ifcvf_lm_cfg { > struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUE_PAIRS]; > }; > > +struct ifcvf_vdpa_mgmt_dev { > + struct vdpa_mgmt_dev mdev; > + struct ifcvf_adapter *adapter; > + struct pci_dev *pdev; > +}; > + > int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *dev); > int ifcvf_start_hw(struct ifcvf_hw *hw); > void ifcvf_stop_hw(struct ifcvf_hw *hw); > diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c > index 5f70ab1283a0..7c2f64ca2163 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_main.c > +++ b/drivers/vdpa/ifcvf/ifcvf_main.c > @@ -442,6 +442,16 @@ static const struct vdpa_config_ops ifc_vdpa_ops = { > .set_config_cb = ifcvf_vdpa_set_config_cb, > }; > > +static struct virtio_device_id id_table_net[] = { > + {VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID}, > + {0}, > +}; > + > +static struct virtio_device_id id_table_blk[] = { > + {VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID}, > + {0}, > +}; > + > static u32 get_dev_type(struct pci_dev *pdev) > { > u32 dev_type; > @@ -462,48 +472,30 @@ static u32 get_dev_type(struct pci_dev *pdev) > return dev_type; > } > > -static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) > +static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name) > { > - struct device *dev = &pdev->dev; > + struct ifcvf_vdpa_mgmt_dev *ifcvf_mgmt_dev; > struct ifcvf_adapter *adapter; > + struct pci_dev *pdev; > struct ifcvf_hw *vf; > + struct device *dev; > int ret, i; > > - ret = pcim_enable_device(pdev); > - if (ret) { > - IFCVF_ERR(pdev, "Failed to enable device\n"); > - return ret; > - } > - > - ret = pcim_iomap_regions(pdev, BIT(0) | BIT(2) | BIT(4), > - IFCVF_DRIVER_NAME); > - if (ret) { > - IFCVF_ERR(pdev, "Failed to request MMIO region\n"); > - return ret; > - } > - > - ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)); > - if (ret) { > - IFCVF_ERR(pdev, "No usable DMA configuration\n"); > - return ret; > - } > - > - ret = devm_add_action_or_reset(dev, ifcvf_free_irq_vectors, pdev); > - if (ret) { > - IFCVF_ERR(pdev, > - "Failed for adding devres for freeing irq vectors\n"); > - return ret; > - } > + ifcvf_mgmt_dev = container_of(mdev, struct ifcvf_vdpa_mgmt_dev, mdev); > + if (ifcvf_mgmt_dev->adapter) > + return -EOPNOTSUPP; > > + pdev = ifcvf_mgmt_dev->pdev; > + dev = &pdev->dev; > adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa, > - dev, &ifc_vdpa_ops, NULL); > - if (adapter == NULL) { > + dev, &ifc_vdpa_ops, name); > + if (!adapter) { > IFCVF_ERR(pdev, "Failed to allocate vDPA structure"); > return -ENOMEM; > } > > - pci_set_master(pdev); > - pci_set_drvdata(pdev, adapter); > + ifcvf_mgmt_dev->adapter = adapter; > + pci_set_drvdata(pdev, ifcvf_mgmt_dev); > > vf = &adapter->vf; > vf->dev_type = get_dev_type(pdev); > @@ -515,7 +507,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) > ret = ifcvf_init_hw(vf, pdev); > if (ret) { > IFCVF_ERR(pdev, "Failed to init IFCVF hw\n"); > - goto err; > + return ret; > } > > for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) > @@ -523,9 +515,94 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) > > vf->hw_features = ifcvf_get_hw_features(vf); > > - ret = vdpa_register_device(&adapter->vdpa, IFCVF_MAX_QUEUE_PAIRS * 2); > + adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev; > + ret = _vdpa_register_device(&adapter->vdpa, IFCVF_MAX_QUEUE_PAIRS * 2); > if (ret) { > - IFCVF_ERR(pdev, "Failed to register ifcvf to vdpa bus"); > + IFCVF_ERR(pdev, "Failed to register to vDPA bus"); > + return ret; > + } > + > + return 0; > +} > + > +static void ifcvf_vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev) > +{ > + struct ifcvf_vdpa_mgmt_dev *ifcvf_mgmt_dev; > + > + ifcvf_mgmt_dev = container_of(mdev, struct ifcvf_vdpa_mgmt_dev, mdev); > + _vdpa_unregister_device(dev); > + ifcvf_mgmt_dev->adapter = NULL; > +} > + > +static const struct vdpa_mgmtdev_ops ifcvf_vdpa_mgmt_dev_ops = { > + .dev_add = ifcvf_vdpa_dev_add, > + .dev_del = ifcvf_vdpa_dev_del > +}; > + > +static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) > +{ > + struct ifcvf_vdpa_mgmt_dev *ifcvf_mgmt_dev; > + struct device *dev = &pdev->dev; > + struct ifcvf_adapter *adapter; adapter is not used. > + u32 dev_type; > + int ret; > + > + ifcvf_mgmt_dev = kzalloc(sizeof(struct ifcvf_vdpa_mgmt_dev), GFP_KERNEL); > + if (!ifcvf_mgmt_dev) { > + IFCVF_ERR(pdev, "Failed to alloc memory for the vDPA management device\n"); > + return -ENOMEM; > + } > + > + dev_type = get_dev_type(pdev); > + switch (dev_type) { > + case VIRTIO_ID_NET: > + ifcvf_mgmt_dev->mdev.id_table = id_table_net; > + break; > + case VIRTIO_ID_BLOCK: > + ifcvf_mgmt_dev->mdev.id_table = id_table_blk; > + break; > + default: > + IFCVF_ERR(pdev, "VIRTIO ID %u not supported\n", dev_type); > + ret = -EOPNOTSUPP; > + goto err; > + } > + > + ifcvf_mgmt_dev->mdev.ops = &ifcvf_vdpa_mgmt_dev_ops; > + ifcvf_mgmt_dev->mdev.device = dev; > + ifcvf_mgmt_dev->pdev = pdev; > + > + ret = pcim_enable_device(pdev); > + if (ret) { > + IFCVF_ERR(pdev, "Failed to enable device\n"); > + goto err; > + } > + > + ret = pcim_iomap_regions(pdev, BIT(0) | BIT(2) | BIT(4), > + IFCVF_DRIVER_NAME); > + if (ret) { > + IFCVF_ERR(pdev, "Failed to request MMIO region\n"); > + goto err; > + } > + > + ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)); > + if (ret) { > + IFCVF_ERR(pdev, "No usable DMA configuration\n"); > + goto err; > + } > + > + ret = devm_add_action_or_reset(dev, ifcvf_free_irq_vectors, pdev); > + if (ret) { > + IFCVF_ERR(pdev, > + "Failed for adding devres for freeing irq vectors\n"); > + goto err; > + } > + > + pci_set_master(pdev); > + > + ret = vdpa_mgmtdev_register(&ifcvf_mgmt_dev->mdev); > + if (ret) { > + IFCVF_ERR(pdev, > + "Failed to initialize the management interfaces\n"); > goto err; > } > > @@ -533,14 +610,21 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) > > err: > put_device(&adapter->vdpa.dev); > + kfree(ifcvf_mgmt_dev); > return ret; > } > > static void ifcvf_remove(struct pci_dev *pdev) > { > - struct ifcvf_adapter *adapter = pci_get_drvdata(pdev); > + struct ifcvf_vdpa_mgmt_dev *ifcvf_mgmt_dev; > + struct ifcvf_adapter *adapter; > + > + ifcvf_mgmt_dev = pci_get_drvdata(pdev); > + adapter = ifcvf_mgmt_dev->adapter; > + if (adapter) > + vdpa_unregister_device(&adapter->vdpa); > > - vdpa_unregister_device(&adapter->vdpa); > + kfree(ifcvf_mgmt_dev); > } Let's use vdpa_mgmtdev_register() to be more safe. Thanks > > static struct pci_device_id ifcvf_pci_ids[] = { 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.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 7DB0DC07E9A for ; Mon, 5 Jul 2021 05:04:29 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 1DEFC613C8 for ; Mon, 5 Jul 2021 05:04:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1DEFC613C8 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 smtp3.osuosl.org (Postfix) with ESMTP id C868E60590; Mon, 5 Jul 2021 05:04:28 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id p224u4bcSjIk; Mon, 5 Jul 2021 05:04:27 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 3AEF66006A; Mon, 5 Jul 2021 05:04:27 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EF5D1C0010; Mon, 5 Jul 2021 05:04:26 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2F6CBC000E for ; Mon, 5 Jul 2021 05:04:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2BABE839DD for ; Mon, 5 Jul 2021 05:04:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com 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 Av0DYsGlv3yO for ; Mon, 5 Jul 2021 05:04:24 +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 [170.10.133.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id E1496839B4 for ; Mon, 5 Jul 2021 05:04:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1625461462; 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=CDMmAEK+dhpeMI8ETaJVArjrnaSTT4gcPjmGTBH0vjo=; b=UXf0mJBJH9UFzJiJN14sQrgTkjKQI0URhN4Wo0AqflbtPhFZ0lbJs0R4RTO/9EVmgZn+8x RloCFoA30Fj2SOFiNavKyQOYaGZBtcSwlmrmKW6LVX8zrXSlBXgZNXsqp5mZD2B9Wb13qC T2tdGrH/74CmlKbU3gcBGwUxVlUoN/g= Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-296-VT_20DkkNtygDzEpcY0YwQ-1; Mon, 05 Jul 2021 01:04:20 -0400 X-MC-Unique: VT_20DkkNtygDzEpcY0YwQ-1 Received: by mail-pj1-f69.google.com with SMTP id b3-20020a17090a8c83b02901703601b0afso12987261pjo.9 for ; Sun, 04 Jul 2021 22:04:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=CDMmAEK+dhpeMI8ETaJVArjrnaSTT4gcPjmGTBH0vjo=; b=pxl5g/LxdMfzTTZJ02OBnC2dqWGggO9ZSJJEPeCVq+milgVw+h+APDkFo5AJW+0WuW X7ikPmffvvfg83A9xhnWCceBLR+OC6ck/j/yzsiKRHbv+QzFi4snXxBXi1jU3lDPJNF1 EtebvJbW3T+OvY/CFznArcv8XURxA5sZlrGkEyLOkaEX3NX4VsNOShG3tqtg58BfG/g9 qD983HAiZhcbASEPa0LD+Fs2K9+lxTwWt4INpzUqIwc2+pNiwXvaZjrOpsnmpKzMOlTz aF7km88T0FtEp6bGcScmFeoUi/2s1mj+zwg/6ob1oET7f/Ysx1vLsrLoYvIT2hWHrASt hteA== X-Gm-Message-State: AOAM532wiaEPjTCOSX7ldnJgQ1eKUnVmxz+U/Ti/dG+8rnDAI+9COTj8 /pHo6UbesREIMGha7RJePVJGlUsFnteUXxhgRFY5+o27VfIMqqwct7Jk6wZ1yzCuBTtp+IF0qS8 Gyr3GWT8ek9mjWYSjSdfAWzIx9kKXh+euHDluoq18eQ== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr11114404pln.28.1625461459803; Sun, 04 Jul 2021 22:04:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8V/lTNcXrByvwpOEoWgzbOd4v9xn8O/vXDHb/0Gp3pEzjnM+iXbmKBKvZ/cgl1NOIJw2Imw== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr11114389pln.28.1625461459558; Sun, 04 Jul 2021 22:04:19 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id j15sm6159983pjl.15.2021.07.04.22.04.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 04 Jul 2021 22:04:19 -0700 (PDT) Subject: Re: [PATCH 2/3] vDPA/ifcvf: implement management netlink framework for ifcvf To: Zhu Lingshan , mst@redhat.com References: <20210630082145.5729-1-lingshan.zhu@intel.com> <20210630082145.5729-3-lingshan.zhu@intel.com> From: Jason Wang Message-ID: <1ebb3dc8-5416-f718-2837-8371e78dd3d0@redhat.com> Date: Mon, 5 Jul 2021 13:04:11 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210630082145.5729-3-lingshan.zhu@intel.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: netdev@vger.kernel.org, kvm@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-Transfer-Encoding: base64 Content-Type: text/plain; charset="gbk"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CtTaIDIwMjEvNi8zMCDPws7nNDoyMSwgWmh1IExpbmdzaGFuINC0tcA6Cj4gVGhpcyBjb21taXQg aW1wbG1lbnRzIHRoZSBtYW5hZ2VtZW50IG5ldGxpbmsgZnJhbWV3b3JrIGZvciBpZmN2ZiwKPiBp bmNsdWRpbmcgcmVnaXN0ZXIgYW5kIGFkZCAvIHJlbW92ZSBhIGRldmljZQo+Cj4gSXQgd29ya3Mg d2l0aCBpcHJvdXRlcjI6Cj4gW3Jvb3RAbG9jYWxob3N0IGxzemh1XSMgdmRwYSBtZ210ZGV2IHNo b3cgLWpwCj4gewo+ICAgICAgIm1nbXRkZXYiOiB7Cj4gICAgICAgICAgInBjaS8wMDAwOjAxOjAw LjUiOiB7Cj4gICAgICAgICAgICAgICJzdXBwb3J0ZWRfY2xhc3NlcyI6IFsgIm5ldCIgXQo+ICAg ICAgICAgIH0sCj4gICAgICAgICAgInBjaS8wMDAwOjAxOjAwLjYiOiB7Cj4gICAgICAgICAgICAg ICJzdXBwb3J0ZWRfY2xhc3NlcyI6IFsgIm5ldCIgXQo+ICAgICAgICAgIH0KPiAgICAgIH0KPiB9 Cj4KPiBbcm9vdEBsb2NhbGhvc3QgbHN6aHVdIyB2ZHBhIGRldiBhZGQgbWdtdGRldiBwY2kvMDAw MDowMTowMC41IG5hbWUgdmRwYTAKPiBbcm9vdEBsb2NhbGhvc3QgbHN6aHVdIyB2ZHBhIGRldiBh ZGQgbWdtdGRldiBwY2kvMDAwMDowMTowMC42IG5hbWUgdmRwYTEKPgo+IFNpZ25lZC1vZmYtYnk6 IFpodSBMaW5nc2hhbiA8bGluZ3NoYW4uemh1QGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMv dmRwYS9pZmN2Zi9pZmN2Zl9iYXNlLmggfCAgIDYgKysKPiAgIGRyaXZlcnMvdmRwYS9pZmN2Zi9p ZmN2Zl9tYWluLmMgfCAxNTYgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KPiAgIDIg ZmlsZXMgY2hhbmdlZCwgMTI2IGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQo+Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmRwYS9pZmN2Zi9pZmN2Zl9iYXNlLmggYi9kcml2ZXJzL3ZkcGEv aWZjdmYvaWZjdmZfYmFzZS5oCj4gaW5kZXggZGVkMWIxYjVmYjEzLi5lNTI1MWZjYmIyMDAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy92ZHBhL2lmY3ZmL2lmY3ZmX2Jhc2UuaAo+ICsrKyBiL2RyaXZl cnMvdmRwYS9pZmN2Zi9pZmN2Zl9iYXNlLmgKPiBAQCAtMTA0LDYgKzEwNCwxMiBAQCBzdHJ1Y3Qg aWZjdmZfbG1fY2ZnIHsKPiAgIAlzdHJ1Y3QgaWZjdmZfdnJpbmdfbG1fY2ZnIHZyaW5nX2xtX2Nm Z1tJRkNWRl9NQVhfUVVFVUVfUEFJUlNdOwo+ICAgfTsKPiAgIAo+ICtzdHJ1Y3QgaWZjdmZfdmRw YV9tZ210X2RldiB7Cj4gKwlzdHJ1Y3QgdmRwYV9tZ210X2RldiBtZGV2Owo+ICsJc3RydWN0IGlm Y3ZmX2FkYXB0ZXIgKmFkYXB0ZXI7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPiArfTsKPiAr Cj4gICBpbnQgaWZjdmZfaW5pdF9odyhzdHJ1Y3QgaWZjdmZfaHcgKmh3LCBzdHJ1Y3QgcGNpX2Rl diAqZGV2KTsKPiAgIGludCBpZmN2Zl9zdGFydF9odyhzdHJ1Y3QgaWZjdmZfaHcgKmh3KTsKPiAg IHZvaWQgaWZjdmZfc3RvcF9odyhzdHJ1Y3QgaWZjdmZfaHcgKmh3KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZHBhL2lmY3ZmL2lmY3ZmX21haW4uYyBiL2RyaXZlcnMvdmRwYS9pZmN2Zi9pZmN2 Zl9tYWluLmMKPiBpbmRleCA1ZjcwYWIxMjgzYTAuLjdjMmY2NGNhMjE2MyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3ZkcGEvaWZjdmYvaWZjdmZfbWFpbi5jCj4gKysrIGIvZHJpdmVycy92ZHBhL2lm Y3ZmL2lmY3ZmX21haW4uYwo+IEBAIC00NDIsNiArNDQyLDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgdmRwYV9jb25maWdfb3BzIGlmY192ZHBhX29wcyA9IHsKPiAgIAkuc2V0X2NvbmZpZ19jYiAg PSBpZmN2Zl92ZHBhX3NldF9jb25maWdfY2IsCj4gICB9Owo+ICAgCj4gK3N0YXRpYyBzdHJ1Y3Qg dmlydGlvX2RldmljZV9pZCBpZF90YWJsZV9uZXRbXSA9IHsKPiArCXtWSVJUSU9fSURfTkVULCBW SVJUSU9fREVWX0FOWV9JRH0sCj4gKwl7MH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZp cnRpb19kZXZpY2VfaWQgaWRfdGFibGVfYmxrW10gPSB7Cj4gKwl7VklSVElPX0lEX0JMT0NLLCBW SVJUSU9fREVWX0FOWV9JRH0sCj4gKwl7MH0sCj4gK307Cj4gKwo+ICAgc3RhdGljIHUzMiBnZXRf ZGV2X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gICB7Cj4gICAJdTMyIGRldl90eXBlOwo+ IEBAIC00NjIsNDggKzQ3MiwzMCBAQCBzdGF0aWMgdTMyIGdldF9kZXZfdHlwZShzdHJ1Y3QgcGNp X2RldiAqcGRldikKPiAgIAlyZXR1cm4gZGV2X3R5cGU7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlu dCBpZmN2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZp Y2VfaWQgKmlkKQo+ICtzdGF0aWMgaW50IGlmY3ZmX3ZkcGFfZGV2X2FkZChzdHJ1Y3QgdmRwYV9t Z210X2RldiAqbWRldiwgY29uc3QgY2hhciAqbmFtZSkKPiAgIHsKPiAtCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgaWZjdmZfdmRwYV9tZ210X2RldiAqaWZjdmZf bWdtdF9kZXY7Cj4gICAJc3RydWN0IGlmY3ZmX2FkYXB0ZXIgKmFkYXB0ZXI7Cj4gKwlzdHJ1Y3Qg cGNpX2RldiAqcGRldjsKPiAgIAlzdHJ1Y3QgaWZjdmZfaHcgKnZmOwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2Owo+ICAgCWludCByZXQsIGk7Cj4gICAKPiAtCXJldCA9IHBjaW1fZW5hYmxlX2Rldmlj ZShwZGV2KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlJRkNWRl9FUlIocGRldiwgIkZhaWxlZCB0byBl bmFibGUgZGV2aWNlXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXJldCA9IHBj aW1faW9tYXBfcmVnaW9ucyhwZGV2LCBCSVQoMCkgfCBCSVQoMikgfCBCSVQoNCksCj4gLQkJCQkg SUZDVkZfRFJJVkVSX05BTUUpOwo+IC0JaWYgKHJldCkgewo+IC0JCUlGQ1ZGX0VSUihwZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3QgTU1JTyByZWdpb25cbiIpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9 Cj4gLQo+IC0JcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFT Syg2NCkpOwo+IC0JaWYgKHJldCkgewo+IC0JCUlGQ1ZGX0VSUihwZGV2LCAiTm8gdXNhYmxlIERN QSBjb25maWd1cmF0aW9uXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXJldCA9 IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGlmY3ZmX2ZyZWVfaXJxX3ZlY3RvcnMsIHBk ZXYpOwo+IC0JaWYgKHJldCkgewo+IC0JCUlGQ1ZGX0VSUihwZGV2LAo+IC0JCQkgICJGYWlsZWQg Zm9yIGFkZGluZyBkZXZyZXMgZm9yIGZyZWVpbmcgaXJxIHZlY3RvcnNcbiIpOwo+IC0JCXJldHVy biByZXQ7Cj4gLQl9Cj4gKwlpZmN2Zl9tZ210X2RldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1 Y3QgaWZjdmZfdmRwYV9tZ210X2RldiwgbWRldik7Cj4gKwlpZiAoaWZjdmZfbWdtdF9kZXYtPmFk YXB0ZXIpCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gKwlwZGV2ID0gaWZjdmZfbWdt dF9kZXYtPnBkZXY7Cj4gKwlkZXYgPSAmcGRldi0+ZGV2Owo+ICAgCWFkYXB0ZXIgPSB2ZHBhX2Fs bG9jX2RldmljZShzdHJ1Y3QgaWZjdmZfYWRhcHRlciwgdmRwYSwKPiAtCQkJCSAgICBkZXYsICZp ZmNfdmRwYV9vcHMsIE5VTEwpOwo+IC0JaWYgKGFkYXB0ZXIgPT0gTlVMTCkgewo+ICsJCQkJICAg IGRldiwgJmlmY192ZHBhX29wcywgbmFtZSk7Cj4gKwlpZiAoIWFkYXB0ZXIpIHsKPiAgIAkJSUZD VkZfRVJSKHBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdkRQQSBzdHJ1Y3R1cmUiKTsKPiAgIAkJ cmV0dXJuIC1FTk9NRU07Cj4gICAJfQo+ICAgCj4gLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKPiAt CXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTsKPiArCWlmY3ZmX21nbXRfZGV2LT5hZGFw dGVyID0gYWRhcHRlcjsKPiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpZmN2Zl9tZ210X2Rldik7 Cj4gICAKPiAgIAl2ZiA9ICZhZGFwdGVyLT52ZjsKPiAgIAl2Zi0+ZGV2X3R5cGUgPSBnZXRfZGV2 X3R5cGUocGRldik7Cj4gQEAgLTUxNSw3ICs1MDcsNyBAQCBzdGF0aWMgaW50IGlmY3ZmX3Byb2Jl KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCj4g ICAJcmV0ID0gaWZjdmZfaW5pdF9odyh2ZiwgcGRldik7Cj4gICAJaWYgKHJldCkgewo+ICAgCQlJ RkNWRl9FUlIocGRldiwgIkZhaWxlZCB0byBpbml0IElGQ1ZGIGh3XG4iKTsKPiAtCQlnb3RvIGVy cjsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBJRkNW Rl9NQVhfUVVFVUVfUEFJUlMgKiAyOyBpKyspCj4gQEAgLTUyMyw5ICs1MTUsOTQgQEAgc3RhdGlj IGludCBpZmN2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9k ZXZpY2VfaWQgKmlkKQo+ICAgCj4gICAJdmYtPmh3X2ZlYXR1cmVzID0gaWZjdmZfZ2V0X2h3X2Zl YXR1cmVzKHZmKTsKPiAgIAo+IC0JcmV0ID0gdmRwYV9yZWdpc3Rlcl9kZXZpY2UoJmFkYXB0ZXIt PnZkcGEsIElGQ1ZGX01BWF9RVUVVRV9QQUlSUyAqIDIpOwo+ICsJYWRhcHRlci0+dmRwYS5tZGV2 ID0gJmlmY3ZmX21nbXRfZGV2LT5tZGV2Owo+ICsJcmV0ID0gX3ZkcGFfcmVnaXN0ZXJfZGV2aWNl KCZhZGFwdGVyLT52ZHBhLCBJRkNWRl9NQVhfUVVFVUVfUEFJUlMgKiAyKTsKPiAgIAlpZiAocmV0 KSB7Cj4gLQkJSUZDVkZfRVJSKHBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaWZjdmYgdG8gdmRw YSBidXMiKTsKPiArCQlJRkNWRl9FUlIocGRldiwgIkZhaWxlZCB0byByZWdpc3RlciB0byB2RFBB IGJ1cyIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGlmY3ZmX3ZkcGFfZGV2X2RlbChzdHJ1Y3QgdmRwYV9tZ210X2RldiAq bWRldiwgc3RydWN0IHZkcGFfZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBpZmN2Zl92ZHBh X21nbXRfZGV2ICppZmN2Zl9tZ210X2RldjsKPiArCj4gKwlpZmN2Zl9tZ210X2RldiA9IGNvbnRh aW5lcl9vZihtZGV2LCBzdHJ1Y3QgaWZjdmZfdmRwYV9tZ210X2RldiwgbWRldik7Cj4gKwlfdmRw YV91bnJlZ2lzdGVyX2RldmljZShkZXYpOwo+ICsJaWZjdmZfbWdtdF9kZXYtPmFkYXB0ZXIgPSBO VUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZkcGFfbWdtdGRldl9vcHMgaWZj dmZfdmRwYV9tZ210X2Rldl9vcHMgPSB7Cj4gKwkuZGV2X2FkZCA9IGlmY3ZmX3ZkcGFfZGV2X2Fk ZCwKPiArCS5kZXZfZGVsID0gaWZjdmZfdmRwYV9kZXZfZGVsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IGlmY3ZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2Rl dmljZV9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCBpZmN2Zl92ZHBhX21nbXRfZGV2ICppZmN2Zl9t Z210X2RldjsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3Qg aWZjdmZfYWRhcHRlciAqYWRhcHRlcjsKCgphZGFwdGVyIGlzIG5vdCB1c2VkLgoKCj4gKwl1MzIg ZGV2X3R5cGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmY3ZmX21nbXRfZGV2ID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IGlmY3ZmX3ZkcGFfbWdtdF9kZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh aWZjdmZfbWdtdF9kZXYpIHsKPiArCQlJRkNWRl9FUlIocGRldiwgIkZhaWxlZCB0byBhbGxvYyBt ZW1vcnkgZm9yIHRoZSB2RFBBIG1hbmFnZW1lbnQgZGV2aWNlXG4iKTsKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCX0KPiArCj4gKwlkZXZfdHlwZSA9IGdldF9kZXZfdHlwZShwZGV2KTsKPiArCXN3 aXRjaCAoZGV2X3R5cGUpIHsKPiArCWNhc2UgVklSVElPX0lEX05FVDoKPiArCQlpZmN2Zl9tZ210 X2Rldi0+bWRldi5pZF90YWJsZSA9IGlkX3RhYmxlX25ldDsKPiArCQlicmVhazsKPiArCWNhc2Ug VklSVElPX0lEX0JMT0NLOgo+ICsJCWlmY3ZmX21nbXRfZGV2LT5tZGV2LmlkX3RhYmxlID0gaWRf dGFibGVfYmxrOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlJRkNWRl9FUlIocGRldiwg IlZJUlRJTyBJRCAldSBub3Qgc3VwcG9ydGVkXG4iLCBkZXZfdHlwZSk7Cj4gKwkJcmV0ID0gLUVP UE5PVFNVUFA7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJaWZjdmZfbWdtdF9kZXYtPm1k ZXYub3BzID0gJmlmY3ZmX3ZkcGFfbWdtdF9kZXZfb3BzOwo+ICsJaWZjdmZfbWdtdF9kZXYtPm1k ZXYuZGV2aWNlID0gZGV2Owo+ICsJaWZjdmZfbWdtdF9kZXYtPnBkZXYgPSBwZGV2Owo+ICsKPiAr CXJldCA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlJRkNW Rl9FUlIocGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4iKTsKPiArCQlnb3RvIGVycjsK PiArCX0KPiArCj4gKwlyZXQgPSBwY2ltX2lvbWFwX3JlZ2lvbnMocGRldiwgQklUKDApIHwgQklU KDIpIHwgQklUKDQpLAo+ICsJCQkJIElGQ1ZGX0RSSVZFUl9OQU1FKTsKPiArCWlmIChyZXQpIHsK PiArCQlJRkNWRl9FUlIocGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IE1NSU8gcmVnaW9uXG4iKTsK PiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVy ZW50KGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJSUZDVkZfRVJS KHBkZXYsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwo+ICsJCWdvdG8gZXJyOwo+ ICsJfQo+ICsKPiArCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGlmY3ZmX2Zy ZWVfaXJxX3ZlY3RvcnMsIHBkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCUlGQ1ZGX0VSUihwZGV2 LAo+ICsJCQkgICJGYWlsZWQgZm9yIGFkZGluZyBkZXZyZXMgZm9yIGZyZWVpbmcgaXJxIHZlY3Rv cnNcbiIpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXBjaV9zZXRfbWFzdGVyKHBkZXYp Owo+ICsKPiArCXJldCA9IHZkcGFfbWdtdGRldl9yZWdpc3RlcigmaWZjdmZfbWdtdF9kZXYtPm1k ZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCUlGQ1ZGX0VSUihwZGV2LAo+ICsJCQkgICJGYWlsZWQg dG8gaW5pdGlhbGl6ZSB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2VzXG4iKTsKPiAgIAkJZ290byBl cnI7Cj4gICAJfQo+ICAgCj4gQEAgLTUzMywxNCArNjEwLDIxIEBAIHN0YXRpYyBpbnQgaWZjdmZf cHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpp ZCkKPiAgIAo+ICAgZXJyOgo+ICAgCXB1dF9kZXZpY2UoJmFkYXB0ZXItPnZkcGEuZGV2KTsKPiAr CWtmcmVlKGlmY3ZmX21nbXRfZGV2KTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBz dGF0aWMgdm9pZCBpZmN2Zl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gICB7Cj4gLQlz dHJ1Y3QgaWZjdmZfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAr CXN0cnVjdCBpZmN2Zl92ZHBhX21nbXRfZGV2ICppZmN2Zl9tZ210X2RldjsKPiArCXN0cnVjdCBp ZmN2Zl9hZGFwdGVyICphZGFwdGVyOwo+ICsKPiArCWlmY3ZmX21nbXRfZGV2ID0gcGNpX2dldF9k cnZkYXRhKHBkZXYpOwo+ICsJYWRhcHRlciA9IGlmY3ZmX21nbXRfZGV2LT5hZGFwdGVyOwo+ICsJ aWYgKGFkYXB0ZXIpCj4gKwkJdmRwYV91bnJlZ2lzdGVyX2RldmljZSgmYWRhcHRlci0+dmRwYSk7 Cj4gICAKPiAtCXZkcGFfdW5yZWdpc3Rlcl9kZXZpY2UoJmFkYXB0ZXItPnZkcGEpOwo+ICsJa2Zy ZWUoaWZjdmZfbWdtdF9kZXYpOwo+ICAgfQoKCkxldCdzIHVzZSB2ZHBhX21nbXRkZXZfcmVnaXN0 ZXIoKSB0byBiZSBtb3JlIHNhZmUuCgpUaGFua3MKCgo+ICAgCj4gICBzdGF0aWMgc3RydWN0IHBj aV9kZXZpY2VfaWQgaWZjdmZfcGNpX2lkc1tdID0gewoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1 YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhm b3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u