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=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 1ECECC4332E for ; Fri, 20 Mar 2020 09:30:11 +0000 (UTC) Received: from silver.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 DB38B20753 for ; Fri, 20 Mar 2020 09:30:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="IVUyvy+o" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB38B20753 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id B28ED2734A; Fri, 20 Mar 2020 09:30:10 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zfSyH+4cJXTX; Fri, 20 Mar 2020 09:30:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 71613220CA; Fri, 20 Mar 2020 09:30:08 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4BAA2C089E; Fri, 20 Mar 2020 09:30:08 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 11F30C07FF for ; Fri, 20 Mar 2020 09:30:07 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id F0197873AF for ; Fri, 20 Mar 2020 09:30:06 +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 M9JB7Jc6dbpf for ; Fri, 20 Mar 2020 09:30:05 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 3B4C086CA6 for ; Fri, 20 Mar 2020 09:30:05 +0000 (UTC) Received: by mail-wr1-f67.google.com with SMTP id h6so6518399wrs.6 for ; Fri, 20 Mar 2020 02:30:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=JxG/QcU8BYh1je+IYf0dPYt0Kp0NCxYkM9Y1GUc0Yms=; b=IVUyvy+oaqFLf4CCcBfJFMeIWdhxwLR+dZsE5P+rqxX7FAzlc7MxJA9Ah7WGFnFmrr yQr8QWvg0MD/H36uIvZ2M4Jp7pllDWR6Rf8suagSZbg7l2DqB9F/KxO9/DccdCh6U1dR MrGItRw2DYbNXBN4OdeXb96fnYbyBvWM6D+2prc/vUA1LJ7SywW1vHQbE3fZlYl8TKIk iXOXMe79a96lnX1nIE1MYi/PGG3zR2+BIRLg8bDn9J6rWaVwm9CRfE6rH/FozeFyrjGu LmxAfxdaJvZ7bHnZSk1lJIUHlJvwtLa3VGAkhy49Vw/lmDCyL9bOPBZUxFOGcfq9MiAT yysA== 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=JxG/QcU8BYh1je+IYf0dPYt0Kp0NCxYkM9Y1GUc0Yms=; b=E7T+z6OhOA0eGQc+OcJOCwK3/9lIQeVFEfsJgJv9kAkqbZCD/XjPgkHXdqUgjmHbMU IpVubAuGsP+CJ4pZF1Aro6kWPWwyqfTxU5BhHNhCdb/c19k2py4abm8atHrwzr6N+cpH XsfBHlfcwxja0fU0GBb+Q/ViKIuDmUIXMw/Y01Y4BXr/kzDA+605lvwkEFFs2mr6BYms GF/dFc9tWYLdEa6HHDiK4p2/DqB0vF6/6inc271V6l0hhaHupyPRsovG+rB1n9uVb/ya RhWziZUlv8FnUmSAbxmPX4V3SAQ5aMxPQw8QrSr7uyiYPCAJv3fbCJGVin3nZZMVHJcx P4/A== X-Gm-Message-State: ANhLgQ3h4cvb9pSLYffk8abbkrwkVu7afE31Ftls3MNW9OMsyThwK/LN tD7y5KvEVy1FVnhjrANKsJAApw== X-Google-Smtp-Source: ADFU+vtUPOB3bsVCa3WQtvlKdHBBkMWRTBUSeQ+dTyUQ18lahqWszXP6AOpoDapERGXA0/Fchav/5Q== X-Received: by 2002:a5d:440a:: with SMTP id z10mr9905611wrq.177.1584696603428; Fri, 20 Mar 2020 02:30:03 -0700 (PDT) Received: from myrica ([2001:171b:226b:54a0:116c:c27a:3e7f:5eaf]) by smtp.gmail.com with ESMTPSA id k126sm7117254wme.4.2020.03.20.02.30.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2020 02:30:02 -0700 (PDT) Date: Fri, 20 Mar 2020 10:29:55 +0100 From: Jean-Philippe Brucker To: Jacob Pan Subject: Re: [PATCH 2/2] iommu/vt-d: Replace intel SVM APIs with generic SVA APIs Message-ID: <20200320092955.GA1702630@myrica> References: <1582586797-61697-1-git-send-email-jacob.jun.pan@linux.intel.com> <1582586797-61697-4-git-send-email-jacob.jun.pan@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1582586797-61697-4-git-send-email-jacob.jun.pan@linux.intel.com> Cc: "Tian, Kevin" , Dave Jiang , Raj Ashok , Jean-Philippe Brucker , LKML , iommu@lists.linux-foundation.org, David Woodhouse X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" SGkgSmFjb2IsCgpJIHRoaW5rIHRoaXMgc3RlcCBpcyByZWFsbHkgdXNlZnVsIGFuZCB0aGUgcGF0 Y2ggbG9va3MgZ29vZCBvdmVyYWxsLAp0aGFua3MgZm9yIGRvaW5nIHRoaXMuIFNvbWUgY29tbW1l bnRzIGlubGluZQoKT24gTW9uLCBGZWIgMjQsIDIwMjAgYXQgMDM6MjY6MzdQTSAtMDgwMCwgSmFj b2IgUGFuIHdyb3RlOgo+IFRoaXMgcGF0Y2ggaXMgYW4gaW5pdGlhbCBzdGVwIHRvIHJlcGxhY2Ug SW50ZWwgU1ZNIGNvZGUgd2l0aCB0aGUKPiBmb2xsb3dpbmcgSU9NTVUgU1ZBIG9wczoKPiBpbnRl bF9zdm1fYmluZF9tbSgpID0+IGlvbW11X3N2YV9iaW5kX2RldmljZSgpCj4gaW50ZWxfc3ZtX3Vu YmluZF9tbSgpID0+IGlvbW11X3N2YV91bmJpbmRfZGV2aWNlKCkKPiBpbnRlbF9zdm1faXNfcGFz aWRfdmFsaWQoKSA9PiBpb21tdV9zdmFfZ2V0X3Bhc2lkKCkKPiAKPiBUaGUgZmVhdHVyZXMgYmVs b3cgd2lsbCBjb250aW51ZSB0byB3b3JrIGJ1dCBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgcGF0 Y2gKPiBpbiB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgbW9zdGx5IHdpdGhpbiB0aGUgSU9NTVUgc3Vi c3lzdGVtLgo+IC0gSU8gcGFnZSBmYXVsdAo+IC0gbW11IG5vdGlmaWVyCj4gCj4gQ29uc29saWRh dGlvbiBvZiB0aGUgYWJvdmUgd2lsbCBjb21lIGFmdGVyIG1lcmdpbmcgZ2VuZXJpYyBJT01NVSBz dmEKPiBjb2RlWzFdLiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSBjaGFuZ2VzIG5lZWRlZCBmb3Ig U1ZBIHVzZXJzIHN1Y2ggYXMKPiBhY2NlbGVyYXRvciBkZXZpY2UgZHJpdmVycyBkdXJpbmcgdGhp cyB0aW1lLgo+IAo+IFsxXSBodHRwOi8vanBicnVja2VyLm5ldC9zdmEvCj4gCj4gU2lnbmVkLW9m Zi1ieTogSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAg ZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jIHwgICAzICsrCj4gIGRyaXZlcnMvaW9tbXUvaW50 ZWwtc3ZtLmMgICB8IDEyMyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLQo+ICBpbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmggfCAgIDcgKysrCj4gIGluY2x1ZGUv bGludXgvaW50ZWwtc3ZtLmggICB8ICA4NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiAgNCBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAxNDAgZGVsZXRpb25zKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9t bXUvaW50ZWwtaW9tbXUuYwo+IGluZGV4IDVlY2E2ZTEwZDJhNC4uY2NmYTVhZGZkMDZkIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwo+ICsrKyBiL2RyaXZlcnMvaW9t bXUvaW50ZWwtaW9tbXUuYwo+IEBAIC02NDc1LDYgKzY0NzUsOSBAQCBjb25zdCBzdHJ1Y3QgaW9t bXVfb3BzIGludGVsX2lvbW11X29wcyA9IHsKPiAgCS5jYWNoZV9pbnZhbGlkYXRlCT0gaW50ZWxf aW9tbXVfc3ZhX2ludmFsaWRhdGUsCj4gIAkuc3ZhX2JpbmRfZ3Bhc2lkCT0gaW50ZWxfc3ZtX2Jp bmRfZ3Bhc2lkLAo+ICAJLnN2YV91bmJpbmRfZ3Bhc2lkCT0gaW50ZWxfc3ZtX3VuYmluZF9ncGFz aWQsCj4gKwkuc3ZhX2JpbmQJCT0gaW50ZWxfc3ZtX2JpbmQsCj4gKwkuc3ZhX3VuYmluZAkJPSBp bnRlbF9zdm1fdW5iaW5kLAo+ICsJLnN2YV9nZXRfcGFzaWQJCT0gaW50ZWxfc3ZtX2dldF9wYXNp ZCwKPiAgI2VuZGlmCj4gIH07Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVs LXN2bS5jIGIvZHJpdmVycy9pb21tdS9pbnRlbC1zdm0uYwo+IGluZGV4IDFkN2E5NTM3MmY4Yy4u MzVkOTQ5NTEzNzI4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtc3ZtLmMKPiAr KysgYi9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jCj4gQEAgLTUxNiwxMyArNTE2LDE0IEBAIGlu dCBpbnRlbF9zdm1fdW5iaW5kX2dwYXNpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwYXNpZCkK PiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLWludCBpbnRlbF9zdm1fYmluZF9tbShzdHJ1Y3Qg ZGV2aWNlICpkZXYsIGludCAqcGFzaWQsIGludCBmbGFncywgc3RydWN0IHN2bV9kZXZfb3BzICpv cHMpCj4gKy8qIENhbGxlciBtdXN0IGhvbGQgcGFzaWRfbXV0ZXgsIG1tIHJlZmVyZW5jZSAqLwo+ ICtzdGF0aWMgaW50IGludGVsX3N2bV9iaW5kX21tKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGZs YWdzLCBzdHJ1Y3Qgc3ZtX2Rldl9vcHMgKm9wcywKPiArCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSwgc3RydWN0IGludGVsX3N2bV9kZXYgKipzZCkKPiAgewo+ICAJc3RydWN0IGludGVsX2lv bW11ICppb21tdSA9IGludGVsX3N2bV9kZXZpY2VfdG9faW9tbXUoZGV2KTsKPiAgCXN0cnVjdCBk ZXZpY2VfZG9tYWluX2luZm8gKmluZm87Cj4gIAlzdHJ1Y3QgaW50ZWxfc3ZtX2RldiAqc2RldjsK PiAgCXN0cnVjdCBpbnRlbF9zdm0gKnN2bSA9IE5VTEw7Cj4gLQlzdHJ1Y3QgbW1fc3RydWN0ICpt bSA9IE5VTEw7Cj4gIAlpbnQgcGFzaWRfbWF4Owo+ICAJaW50IHJldDsKPiAgCj4gQEAgLTUzOSwx NiArNTQwLDE1IEBAIGludCBpbnRlbF9zdm1fYmluZF9tbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGlu dCAqcGFzaWQsIGludCBmbGFncywgc3RydWN0IHN2bV9kZXZfCj4gIAl9IGVsc2UKPiAgCQlwYXNp ZF9tYXggPSAxIDw8IDIwOwo+ICAKPiArCS8qIEJpbmQgc3VwZXJ2aXNvciBQQVNJRCBzaHVsZCBo YXZlIG1tID0gTlVMTCAqLwoKc2hvdWxkCgo+ICAJaWYgKGZsYWdzICYgU1ZNX0ZMQUdfU1VQRVJW SVNPUl9NT0RFKSB7Cj4gLQkJaWYgKCFlY2FwX3Nycyhpb21tdS0+ZWNhcCkpCj4gKwkJaWYgKCFl Y2FwX3Nycyhpb21tdS0+ZWNhcCkgfHwgbW0pIHsKPiArCQkJcHJfZXJyKCJTdXBlcnZpc29yIFBB U0lEIHdpdGggdXNlciBwcm92aWRlZCBtbS5cbiIpOwo+ICAJCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0gZWxzZSBpZiAocGFzaWQpIHsKPiAtCQltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwo+IC0J CUJVR19PTighbW0pOwo+ICsJCX0KPiAgCX0KPiAgCj4gLQltdXRleF9sb2NrKCZwYXNpZF9tdXRl eCk7Cj4gLQlpZiAocGFzaWQgJiYgIShmbGFncyAmIFNWTV9GTEFHX1BSSVZBVEVfUEFTSUQpKSB7 Cj4gKwlpZiAoIShmbGFncyAmIFNWTV9GTEFHX1BSSVZBVEVfUEFTSUQpKSB7Cj4gIAkJc3RydWN0 IGludGVsX3N2bSAqdDsKPiAgCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmZ2xvYmFsX3N2 bV9saXN0LCBsaXN0KSB7Cj4gQEAgLTU4Niw5ICs1ODYsNyBAQCBpbnQgaW50ZWxfc3ZtX2JpbmRf bW0oc3RydWN0IGRldmljZSAqZGV2LCBpbnQgKnBhc2lkLCBpbnQgZmxhZ3MsIHN0cnVjdCBzdm1f ZGV2Xwo+ICAJc2Rldi0+ZGV2ID0gZGV2Owo+ICAKPiAgCXJldCA9IGludGVsX2lvbW11X2VuYWJs ZV9wYXNpZChpb21tdSwgZGV2KTsKPiAtCWlmIChyZXQgfHwgIXBhc2lkKSB7Cj4gLQkJLyogSWYg dGhleSBkb24ndCBhY3R1YWxseSB3YW50IHRvIGFzc2lnbiBhIFBBU0lELCB0aGlzIGlzCj4gLQkJ ICoganVzdCBhbiBlbmFibGluZyBjaGVjay9wcmVwYXJhdGlvbi4gKi8KPiArCWlmIChyZXQpIHsK PiAgCQlrZnJlZShzZGV2KTsKPiAgCQlnb3RvIG91dDsKPiAgCX0KPiBAQCAtNjg4LDE4ICs2ODYs MTcgQEAgaW50IGludGVsX3N2bV9iaW5kX21tKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICpwYXNp ZCwgaW50IGZsYWdzLCBzdHJ1Y3Qgc3ZtX2Rldl8KPiAgCQl9Cj4gIAl9Cj4gIAlsaXN0X2FkZF9y Y3UoJnNkZXYtPmxpc3QsICZzdm0tPmRldnMpOwo+IC0KPiAtIHN1Y2Nlc3M6Cj4gLQkqcGFzaWQg PSBzdm0tPnBhc2lkOwo+ICtzdWNjZXNzOgo+ICsJc2Rldi0+cGFzaWQgPSBzdm0tPnBhc2lkOwo+ ICsJc2Rldi0+c3ZhLmRldiA9IGRldjsKPiArCWlmIChzZCkKPiArCQkqc2QgPSBzZGV2OwoKT25l IHRoaW5nIHRoYXQgbWlnaHQgYmUgbWlzc2luZzogY2FsbGluZyBiaW5kKCkgbXVsdGlwbGUgdGlt ZXMgd2l0aCB0aGUKc2FtZSAoZGV2LCBtbSkgcGFpciBzaG91bGQgdGFrZSByZWZlcmVuY2VzIHRv IHRoZSBzdm0gc3RydWN0LCBzbyBkZXZpY2UKZHJpdmVycyBjYW4gY2FsbCB1bmJpbmQoKSBvbiBp dCB0aGF0IG1hbnkgdGltZXMuCgo+ICAJcmV0ID0gMDsKPiAgIG91dDoKPiAtCW11dGV4X3VubG9j aygmcGFzaWRfbXV0ZXgpOwo+IC0JaWYgKG1tKQo+IC0JCW1tcHV0KG1tKTsKPiAgCXJldHVybiBy ZXQ7Cj4gIH0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfc3ZtX2JpbmRfbW0pOwo+ICAKPiAr LyogQ2FsbGVyIG11c3QgaG9sZCBwYXNpZF9tdXRleCAqLwo+ICBpbnQgaW50ZWxfc3ZtX3VuYmlu ZF9tbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwYXNpZCkKPiAgewo+ICAJc3RydWN0IGludGVs X3N2bV9kZXYgKnNkZXY7Cj4gQEAgLTcwNyw3ICs3MDQsNiBAQCBpbnQgaW50ZWxfc3ZtX3VuYmlu ZF9tbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwYXNpZCkKPiAgCXN0cnVjdCBpbnRlbF9zdm0g KnN2bTsKPiAgCWludCByZXQgPSAtRUlOVkFMOwo+ICAKPiAtCW11dGV4X2xvY2soJnBhc2lkX211 dGV4KTsKPiAgCWlvbW11ID0gaW50ZWxfc3ZtX2RldmljZV90b19pb21tdShkZXYpOwo+ICAJaWYg KCFpb21tdSkKPiAgCQlnb3RvIG91dDsKPiBAQCAtNzUzLDQ1ICs3NDksOSBAQCBpbnQgaW50ZWxf c3ZtX3VuYmluZF9tbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwYXNpZCkKPiAgCQlicmVhazsK PiAgCX0KPiAgIG91dDoKPiAtCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOwo+ICAKPiAgCXJl dHVybiByZXQ7Cj4gIH0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfc3ZtX3VuYmluZF9tbSk7 Cj4gLQo+IC1pbnQgaW50ZWxfc3ZtX2lzX3Bhc2lkX3ZhbGlkKHN0cnVjdCBkZXZpY2UgKmRldiwg aW50IHBhc2lkKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11Owo+IC0Jc3RydWN0 IGludGVsX3N2bSAqc3ZtOwo+IC0JaW50IHJldCA9IC1FSU5WQUw7Cj4gLQo+IC0JbXV0ZXhfbG9j aygmcGFzaWRfbXV0ZXgpOwo+IC0JaW9tbXUgPSBpbnRlbF9zdm1fZGV2aWNlX3RvX2lvbW11KGRl dik7Cj4gLQlpZiAoIWlvbW11KQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCXN2bSA9IGlvYXNpZF9m aW5kKE5VTEwsIHBhc2lkLCBOVUxMKTsKPiAtCWlmICghc3ZtKQo+IC0JCWdvdG8gb3V0Owo+IC0K PiAtCWlmIChJU19FUlIoc3ZtKSkgewo+IC0JCXJldCA9IFBUUl9FUlIoc3ZtKTsKPiAtCQlnb3Rv IG91dDsKPiAtCX0KPiAtCS8qIGluaXRfbW0gaXMgdXNlZCBpbiB0aGlzIGNhc2UgKi8KPiAtCWlm ICghc3ZtLT5tbSkKPiAtCQlyZXQgPSAxOwo+IC0JZWxzZSBpZiAoYXRvbWljX3JlYWQoJnN2bS0+ bW0tPm1tX3VzZXJzKSA+IDApCj4gLQkJcmV0ID0gMTsKPiAtCWVsc2UKPiAtCQlyZXQgPSAwOwo+ IC0KPiAtIG91dDoKPiAtCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOwo+IC0KPiAtCXJldHVy biByZXQ7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfc3ZtX2lzX3Bhc2lkX3ZhbGlk KTsKPiAgCj4gIC8qIFBhZ2UgcmVxdWVzdCBxdWV1ZSBkZXNjcmlwdG9yICovCj4gIHN0cnVjdCBw YWdlX3JlcV9kc2Mgewo+IEBAIC05ODQsMyArOTQ0LDU2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBw cnFfZXZlbnRfdGhyZWFkKGludCBpcnEsIHZvaWQgKmQpCj4gIAo+ICAJcmV0dXJuIElSUV9SRVRW QUwoaGFuZGxlZCk7Cj4gIH0KPiArCj4gKyNkZWZpbmUgdG9faW50ZWxfc3ZtX2RldihoYW5kbGUp IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBpbnRlbF9zdm1fZGV2LCBzdmEpCj4gK3N0cnVj dCBpb21tdV9zdmEgKgo+ICtpbnRlbF9zdm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCB2b2lkICpkcnZkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgaW9tbXVfc3Zh ICpzdmEgPSBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJc3RydWN0IGludGVsX3N2bV9kZXYgKnNkZXYg PSBOVUxMOwo+ICsJaW50IGZsYWdzID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAq IFRPRE86IENvbnNvbGlkYXRlIHdpdGggZ2VuZXJpYyBpb21tdS1zdmEgYmluZCBhZnRlciBpdCBp cyBtZXJnZWQuCj4gKwkgKiBJdCB3aWxsIHJlcXVpcmUgc2hhcmVkIFNWTSBkYXRhIHN0cnVjdHVy ZXMsIGkuZS4gY29tYmluZSBpb19tbQo+ICsJICogYW5kIGludGVsX3N2bSBldGMuCj4gKwkgKi8K PiArCWlmIChkcnZkYXRhKQo+ICsJCWZsYWdzID0gKihpbnQgKilkcnZkYXRhOwoKZHJ2ZGF0YSBp cyBtb3JlIGZvciBzdG9yaW5nIGRldmljZSBkcml2ZXIgY29udGV4dHMgdGhhdCBjYW4gYmUgcGFz c2VkIHRvCmlvbW11X3N2YV9vcHMsIGJ1dCBJIGdldCB0aGF0IHRoaXMgaXMgdGVtcG9yYXJ5LgoK QXMgdXN1YWwgSSdtIGRyZWFkaW5nIHN1cGVydmlzb3IgbW9kZSBtYWtpbmcgaXQgaW50byB0aGUg Y29tbW9uIEFQSS4gV2hhdAphcmUgeW91ciBwbGFucyByZWdhcmRpbmcgU1VQRVJWSVNPUl9NT0RF IGFuZCBQUklWQVRFX1BBU0lEIGZsYWdzPyAgVGhlCnByZXZpb3VzIGRpc2N1c3Npb24gb24gdGhl IHN1YmplY3QgWzFdIGhhZCBtZSBob3BpbmcgdGhhdCB5b3UgY291bGQKcmVwbGFjZSBzdXBlcnZp c29yIG1vZGUgd2l0aCBub3JtYWwgbWFwcGluZ3MgKGF1eGlsaWFyeSBkb21haW5zPykKSSdtIGxl c3Mgd29ycmllZCBhYm91dCBQUklWQVRFX1BBU0lELCBpdCB3b3VsZCBqdXN0IGFkZCBjb21wbGV4 aXR5IGludG8KdGhlIEFQSSBhbmQgaW9tbXUtc3ZhIGltcGxlbWVudGF0aW9uLCBidXQgZG9lc24n dCByZWFsbHkgaGF2ZSBzZWN1cml0eQppbXBsaWNhdGlvbnMuCgpbMV0gaHR0cHM6Ly9sb3JlLmtl cm5lbC5vcmcvbGludXgtaW9tbXUvMjAxOTAyMjgyMjA0NDkuR0ExMjY4MkBhcmFqLW1vYmwxLmpm LmludGVsLmNvbS8KCj4gKwltdXRleF9sb2NrKCZwYXNpZF9tdXRleCk7Cj4gKwlyZXQgPSBpbnRl bF9zdm1fYmluZF9tbShkZXYsIGZsYWdzLCBOVUxMLCBtbSwgJnNkZXYpOwo+ICsJaWYgKHJldCkK PiArCQlzdmEgPSBFUlJfUFRSKHJldCk7Cj4gKwllbHNlIGlmIChzZGV2KQo+ICsJCXN2YSA9ICZz ZGV2LT5zdmE7Cj4gKwllbHNlCj4gKwkJV0FSTighc2RldiwgIlNWTSBiaW5kIHN1Y2NlZWRlZCB3 aXRoIG5vIHNkZXYhXG4iKTsKPiArCj4gKwltdXRleF91bmxvY2soJnBhc2lkX211dGV4KTsKPiAr Cj4gKwlyZXR1cm4gc3ZhOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3N2bV91bmJpbmQoc3RydWN0 IGlvbW11X3N2YSAqc3ZhKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfc3ZtX2RldiAqc2RldjsKPiAr Cj4gKwltdXRleF9sb2NrKCZwYXNpZF9tdXRleCk7Cj4gKwlzZGV2ID0gdG9faW50ZWxfc3ZtX2Rl dihzdmEpOwo+ICsJaW50ZWxfc3ZtX3VuYmluZF9tbShzZGV2LT5kZXYsIHNkZXYtPnBhc2lkKTsK PiArCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOwo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfc3Zt X2dldF9wYXNpZChzdHJ1Y3QgaW9tbXVfc3ZhICpzdmEpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9z dm1fZGV2ICpzZGV2Owo+ICsJaW50IHBhc2lkOwo+ICsKPiArCW11dGV4X2xvY2soJnBhc2lkX211 dGV4KTsKPiArCXNkZXYgPSB0b19pbnRlbF9zdm1fZGV2KHN2YSk7Cj4gKwlwYXNpZCA9IHNkZXYt PnBhc2lkOwo+ICsJbXV0ZXhfdW5sb2NrKCZwYXNpZF9tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIHBh c2lkOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaCBiL2lu Y2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAo+IGluZGV4IDM3Y2ZkMzViN2NjZi4uMDQ0NDkzYTEx ZGNlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAo+ICsrKyBiL2lu Y2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAo+IEBAIC03MDIsNiArNzAyLDExIEBAIGV4dGVybiBp bnQgaW50ZWxfc3ZtX2ZpbmlzaF9wcnEoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7Cj4gIGV4 dGVybiBpbnQgaW50ZWxfc3ZtX2JpbmRfZ3Bhc2lkKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFp biwKPiAgCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV9ncGFzaWRfYmluZF9kYXRh ICpkYXRhKTsKPiAgZXh0ZXJuIGludCBpbnRlbF9zdm1fdW5iaW5kX2dwYXNpZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIGludCBwYXNpZCk7Cj4gK2V4dGVybiBzdHJ1Y3QgaW9tbXVfc3ZhICoKPiAraW50 ZWxfc3ZtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9p ZCAqZHJ2ZGF0YSk7Cj4gK2V4dGVybiB2b2lkIGludGVsX3N2bV91bmJpbmQoc3RydWN0IGlvbW11 X3N2YSAqaGFuZGxlKTsKPiArZXh0ZXJuIGludCBpbnRlbF9zdm1fZ2V0X3Bhc2lkKHN0cnVjdCBp b21tdV9zdmEgKmhhbmRsZSk7Cj4gKwo+ICBzdHJ1Y3Qgc3ZtX2Rldl9vcHM7Cj4gIAo+ICBzdHJ1 Y3QgaW50ZWxfc3ZtX2RldiB7Cj4gQEAgLTcwOSw2ICs3MTQsOCBAQCBzdHJ1Y3QgaW50ZWxfc3Zt X2RldiB7Cj4gIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1Owo+ICAJc3RydWN0IGRldmljZSAqZGV2Owo+ ICAJc3RydWN0IHN2bV9kZXZfb3BzICpvcHM7Cj4gKwlzdHJ1Y3QgaW9tbXVfc3ZhIHN2YTsKPiAr CWludCBwYXNpZDsKPiAgCWludCB1c2VyczsKPiAgCXUxNiBkaWQ7Cj4gIAl1MTYgZGV2X2lvdGxi OjE7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtc3ZtLmggYi9pbmNsdWRlL2xp bnV4L2ludGVsLXN2bS5oCj4gaW5kZXggYTJjMTg5YWQwYjAxLi5mYjdlNzg2ZDg4NzcgMTAwNjQ0 Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1zdm0uaAo+ICsrKyBiL2luY2x1ZGUvbGludXgv aW50ZWwtc3ZtLmgKPiBAQCAtNjIsODkgKzYyLDQgQEAgc3RydWN0IHN2bV9kZXZfb3BzIHsKPiAg ICovCj4gICNkZWZpbmUgU1ZNX0ZMQUdfR1VFU1RfUEFTSUQJKDE8PDMpCj4gIAo+IC0jaWZkZWYg Q09ORklHX0lOVEVMX0lPTU1VX1NWTQo+IC0KPiAtLyoqCj4gLSAqIGludGVsX3N2bV9iaW5kX21t KCkgLSBCaW5kIHRoZSBjdXJyZW50IHByb2Nlc3MgdG8gYSBQQVNJRAo+IC0gKiBAZGV2OglEZXZp Y2UgdG8gYmUgZ3JhbnRlZCBhY2Nlc3MKPiAtICogQHBhc2lkOglBZGRyZXNzIGZvciBhbGxvY2F0 ZWQgUEFTSUQKPiAtICogQGZsYWdzOglGbGFncy4gTGF0ZXIgZm9yIHJlcXVlc3Rpbmcgc3VwZXJ2 aXNvciBtb2RlLCBldGMuCj4gLSAqIEBvcHM6CUNhbGxiYWNrcyB0byBkZXZpY2UgZHJpdmVyCj4g LSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gZW5hYmxlIFBBU0lEIHN1cHBvcnQg Zm9yIHRoZSBnaXZlbiBkZXZpY2UuCj4gLSAqIElmIHRoZSBAcGFzaWQgYXJndW1lbnQgaXMgbm9u LSVOVUxMLCBhIFBBU0lEIGlzIGFsbG9jYXRlZCBmb3IgYWNjZXNzCj4gLSAqIHRvIHRoZSBNTSBv ZiB0aGUgY3VycmVudCBwcm9jZXNzLgo+IC0gKgo+IC0gKiBCeSB1c2luZyBhICVOVUxMIHZhbHVl IGZvciB0aGUgQHBhc2lkIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIGNhbgo+IC0gKiBiZSB1c2Vk IHRvIHNpbXBseSB2YWxpZGF0ZSB0aGF0IFBBU0lEIHN1cHBvcnQgaXMgYXZhaWxhYmxlIGZvciB0 aGUKPiAtICogZ2l2ZW4gZGV2aWNlIOKAlCBpLmUuIHRoYXQgaXQgaXMgYmVoaW5kIGFuIElPTU1V IHdoaWNoIGhhcyB0aGUKPiAtICogcmVxdWlzaXRlIHN1cHBvcnQsIGFuZCBpcyBlbmFibGVkLgo+ IC0gKgo+IC0gKiBQYWdlIGZhdWx0cyBhcmUgaGFuZGxlZCB0cmFuc3BhcmVudGx5IGJ5IHRoZSBJ T01NVSBjb2RlLCBhbmQgdGhlcmUKPiAtICogc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoZSBkZXZp Y2UgZHJpdmVyIHRvIGJlIGludm9sdmVkLiBJZiBhIHBhZ2UKPiAtICogZmF1bHQgY2Fubm90IGJl IGhhbmRsZWQgKGkuZS4gaXMgYW4gaW52YWxpZCBhZGRyZXNzIHJhdGhlciB0aGFuCj4gLSAqIGp1 c3QgbmVlZHMgcGFnaW5nIGluKSwgdGhlbiB0aGUgcGFnZSByZXF1ZXN0IHdpbGwgYmUgY29tcGxl dGVkIGJ5Cj4gLSAqIHRoZSBjb3JlIElPTU1VIGNvZGUgd2l0aCBhcHByb3ByaWF0ZSBzdGF0dXMs IGFuZCB0aGUgZGV2aWNlIGl0c2VsZgo+IC0gKiBjYW4gdGhlbiByZXBvcnQgdGhlIHJlc3VsdGlu ZyBmYXVsdCB0byBpdHMgZHJpdmVyIHZpYSB3aGF0ZXZlcgo+IC0gKiBtZWNoYW5pc20gaXMgYXBw cm9wcmlhdGUuCj4gLSAqCj4gLSAqIE11bHRpcGxlIGNhbGxzIGZyb20gdGhlIHNhbWUgcHJvY2Vz cyBtYXkgcmVzdWx0IGluIHRoZSBzYW1lIFBBU0lECj4gLSAqIGJlaW5nIHJlLXVzZWQuIEEgcmVm ZXJlbmNlIGNvdW50IGlzIGtlcHQuCj4gLSAqLwo+IC1leHRlcm4gaW50IGludGVsX3N2bV9iaW5k X21tKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICpwYXNpZCwgaW50IGZsYWdzLAo+IC0JCQkgICAg IHN0cnVjdCBzdm1fZGV2X29wcyAqb3BzKTsKCkkgbm90aWNlIHN2bV9kZXZfb3BzIGlzbid0IHVz ZWQgYW55bW9yZS4gV2lsbCB5b3UgcmVtb3ZlIGl0IGVudGlyZWx5LCBvcgpkbyB5b3UgdGhpbmsg d2Ugc2hvdWxkIG1vdmUgc3ZtX2Rldl9vcHM6OmZhdWx0X2NiKCkgdG8gaW9tbXVfc3ZhX29wcz8K CmlvbW11X3N2YV9vcHM6Om1tX2V4aXQoKSBpcyBhbHNvIG1pc3NpbmcsIGJ1dCBJIHBsYW4gdG8g c2VuZCBhIFJGQyB0bwpyZW1vdmUgaXQgc2hvcnRseSwgc28gZG9uJ3QgYm90aGVyIDopCgpUaGFu a3MsCkplYW4KCj4gLQo+IC0vKioKPiAtICogaW50ZWxfc3ZtX3VuYmluZF9tbSgpIC0gVW5iaW5k IGEgc3BlY2lmaWVkIFBBU0lECj4gLSAqIEBkZXY6CURldmljZSBmb3Igd2hpY2ggUEFTSUQgd2Fz IGFsbG9jYXRlZAo+IC0gKiBAcGFzaWQ6CVBBU0lEIHZhbHVlIHRvIGJlIHVuYm91bmQKPiAtICoK PiAtICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBQQVNJRCB0byBiZSByZXRpcmVkIHdoZW4gdGhl IGRldmljZSBubwo+IC0gKiBsb25nZXIgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZSBhZGRyZXNzIHNw YWNlIG9mIGEgZ2l2ZW4gcHJvY2Vzcy4KPiAtICoKPiAtICogSWYgdGhlIHVzZSBjb3VudCBmb3Ig dGhlIFBBU0lEIGluIHF1ZXN0aW9uIHJlYWNoZXMgemVybywgdGhlCj4gLSAqIFBBU0lEIGlzIHJl dm9rZWQgYW5kIG1heSBubyBsb25nZXIgYmUgdXNlZCBieSBoYXJkd2FyZS4KPiAtICoKPiAtICog RGV2aWNlIGRyaXZlcnMgYXJlIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGF0IG5vIGFjY2VzcyAoaW5j bHVkaW5nCj4gLSAqIHBhZ2UgcmVxdWVzdHMpIGlzIGN1cnJlbnRseSBvdXRzdGFuZGluZyBmb3Ig dGhlIFBBU0lEIGluIHF1ZXN0aW9uLAo+IC0gKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9u Lgo+IC0gKi8KPiAtZXh0ZXJuIGludCBpbnRlbF9zdm1fdW5iaW5kX21tKHN0cnVjdCBkZXZpY2Ug KmRldiwgaW50IHBhc2lkKTsKPiAtCj4gLS8qKgo+IC0gKiBpbnRlbF9zdm1faXNfcGFzaWRfdmFs aWQoKSAtIGNoZWNrIGlmIHBhc2lkIGlzIHZhbGlkCj4gLSAqIEBkZXY6CURldmljZSBmb3Igd2hp Y2ggUEFTSUQgd2FzIGFsbG9jYXRlZAo+IC0gKiBAcGFzaWQ6CVBBU0lEIHZhbHVlIHRvIGJlIGNo ZWNrZWQKPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHNwZWNpZmllZCBw YXNpZCBpcyBzdGlsbCB2YWxpZC4gQQo+IC0gKiB2YWxpZCBwYXNpZCBtZWFucyB0aGUgYmFja2lu ZyBtbSBpcyBzdGlsbCBoYXZpbmcgYSB2YWxpZCB1c2VyLgo+IC0gKiBGb3Iga2VybmVsIGNhbGxl cnMgaW5pdF9tbSBpcyBhbHdheXMgdmFsaWQuIGZvciBvdGhlciBtbSwgaWYgbW0tPm1tX3VzZXJz Cj4gLSAqIGlzIG5vbi16ZXJvLCBpdCBpcyB2YWxpZC4KPiAtICoKPiAtICogcmV0dXJucyAtRUlO VkFMIGlmIGludmFsaWQgcGFzaWQsIDAgaWYgcGFzaWQgcmVmIGNvdW50IGlzIGludmFsaWQKPiAt ICogMSBpZiBwYXNpZCBpcyB2YWxpZC4KPiAtICovCj4gLWV4dGVybiBpbnQgaW50ZWxfc3ZtX2lz X3Bhc2lkX3ZhbGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBhc2lkKTsKPiAtCj4gLSNlbHNl IC8qIENPTkZJR19JTlRFTF9JT01NVV9TVk0gKi8KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IGlu dGVsX3N2bV9iaW5kX21tKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICpwYXNpZCwKPiAtCQkJCSAg ICBpbnQgZmxhZ3MsIHN0cnVjdCBzdm1fZGV2X29wcyAqb3BzKQo+IC17Cj4gLQlyZXR1cm4gLUVO T1NZUzsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgaW50ZWxfc3ZtX3VuYmluZF9tbShz dHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwYXNpZCkKPiAtewo+IC0JQlVHKCk7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgaW50ZWxfc3ZtX2lzX3Bhc2lkX3ZhbGlkKHN0cnVjdCBkZXZpY2UgKmRldiwg aW50IHBhc2lkKQo+IC17Cj4gLQlyZXR1cm4gLUVJTlZBTDsKPiAtfQo+IC0jZW5kaWYgLyogQ09O RklHX0lOVEVMX0lPTU1VX1NWTSAqLwo+IC0KPiAtI2RlZmluZSBpbnRlbF9zdm1fYXZhaWxhYmxl KGRldikgKCFpbnRlbF9zdm1fYmluZF9tbSgoZGV2KSwgTlVMTCwgMCwgTlVMTCkpCj4gLQo+ICAj ZW5kaWYgLyogX19JTlRFTF9TVk1fSF9fICovCj4gLS0gCj4gMi43LjQKPiAKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaW9tbXUgbWFpbGluZyBsaXN0Cmlv bW11QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0 aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lvbW11 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=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 676E4C4332B for ; Fri, 20 Mar 2020 09:30:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 21E4320409 for ; Fri, 20 Mar 2020 09:30:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="IVUyvy+o" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726814AbgCTJaJ (ORCPT ); Fri, 20 Mar 2020 05:30:09 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:34912 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726602AbgCTJaI (ORCPT ); Fri, 20 Mar 2020 05:30:08 -0400 Received: by mail-wr1-f66.google.com with SMTP id h4so6574655wru.2 for ; Fri, 20 Mar 2020 02:30:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=JxG/QcU8BYh1je+IYf0dPYt0Kp0NCxYkM9Y1GUc0Yms=; b=IVUyvy+oaqFLf4CCcBfJFMeIWdhxwLR+dZsE5P+rqxX7FAzlc7MxJA9Ah7WGFnFmrr yQr8QWvg0MD/H36uIvZ2M4Jp7pllDWR6Rf8suagSZbg7l2DqB9F/KxO9/DccdCh6U1dR MrGItRw2DYbNXBN4OdeXb96fnYbyBvWM6D+2prc/vUA1LJ7SywW1vHQbE3fZlYl8TKIk iXOXMe79a96lnX1nIE1MYi/PGG3zR2+BIRLg8bDn9J6rWaVwm9CRfE6rH/FozeFyrjGu LmxAfxdaJvZ7bHnZSk1lJIUHlJvwtLa3VGAkhy49Vw/lmDCyL9bOPBZUxFOGcfq9MiAT yysA== 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=JxG/QcU8BYh1je+IYf0dPYt0Kp0NCxYkM9Y1GUc0Yms=; b=lJoCG4W9LYc6k/F69zlMCOsyx+xyDvnLd2CxgJUkTdD0oO0vCT8BcTloojmcXYJSGZ 9b2LCyAfp3np1jQz+P1mk7iElEebA9+IZ1a01wJUjyv4cppTXLPdg36I/iCxUClKRC5/ hQCbOC3SaeOHpHEG2zM7/B70U3oTjgLDA1Z8h3S6dP4cfFHSHIIgQrpjBbOeKE68cZYs W62KXTM/yUOMivIhOFO7gJCt3eHwVsZ1AlbQYrqaiclOKk4Hrc14CdKM56qblDML2iqp EvPP1iMTt9VbO4NJftNYyIRKKgs2+rHM9ogjQyISuMJqF2ImCxdAnt2q9l/YfJgxLEQy iV9Q== X-Gm-Message-State: ANhLgQ0bVk9GU4E3SfBcwUiZSw7kKNmRe5nOxg8+2r/MxXv0F2oJk9/a qUORQg7+BrdnhmaHNViE2Nw2ig== X-Google-Smtp-Source: ADFU+vtUPOB3bsVCa3WQtvlKdHBBkMWRTBUSeQ+dTyUQ18lahqWszXP6AOpoDapERGXA0/Fchav/5Q== X-Received: by 2002:a5d:440a:: with SMTP id z10mr9905611wrq.177.1584696603428; Fri, 20 Mar 2020 02:30:03 -0700 (PDT) Received: from myrica ([2001:171b:226b:54a0:116c:c27a:3e7f:5eaf]) by smtp.gmail.com with ESMTPSA id k126sm7117254wme.4.2020.03.20.02.30.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2020 02:30:02 -0700 (PDT) Date: Fri, 20 Mar 2020 10:29:55 +0100 From: Jean-Philippe Brucker To: Jacob Pan Cc: iommu@lists.linux-foundation.org, LKML , Lu Baolu , Joerg Roedel , David Woodhouse , Yi Liu , "Tian, Kevin" , Raj Ashok , Jean-Philippe Brucker , Eric Auger , Dave Jiang Subject: Re: [PATCH 2/2] iommu/vt-d: Replace intel SVM APIs with generic SVA APIs Message-ID: <20200320092955.GA1702630@myrica> References: <1582586797-61697-1-git-send-email-jacob.jun.pan@linux.intel.com> <1582586797-61697-4-git-send-email-jacob.jun.pan@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1582586797-61697-4-git-send-email-jacob.jun.pan@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jacob, I think this step is really useful and the patch looks good overall, thanks for doing this. Some commments inline On Mon, Feb 24, 2020 at 03:26:37PM -0800, Jacob Pan wrote: > This patch is an initial step to replace Intel SVM code with the > following IOMMU SVA ops: > intel_svm_bind_mm() => iommu_sva_bind_device() > intel_svm_unbind_mm() => iommu_sva_unbind_device() > intel_svm_is_pasid_valid() => iommu_sva_get_pasid() > > The features below will continue to work but are not included in this patch > in that they are handled mostly within the IOMMU subsystem. > - IO page fault > - mmu notifier > > Consolidation of the above will come after merging generic IOMMU sva > code[1]. There should not be any changes needed for SVA users such as > accelerator device drivers during this time. > > [1] http://jpbrucker.net/sva/ > > Signed-off-by: Jacob Pan > --- > drivers/iommu/intel-iommu.c | 3 ++ > drivers/iommu/intel-svm.c | 123 ++++++++++++++++++++++++-------------------- > include/linux/intel-iommu.h | 7 +++ > include/linux/intel-svm.h | 85 ------------------------------ > 4 files changed, 78 insertions(+), 140 deletions(-) > > diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c > index 5eca6e10d2a4..ccfa5adfd06d 100644 > --- a/drivers/iommu/intel-iommu.c > +++ b/drivers/iommu/intel-iommu.c > @@ -6475,6 +6475,9 @@ const struct iommu_ops intel_iommu_ops = { > .cache_invalidate = intel_iommu_sva_invalidate, > .sva_bind_gpasid = intel_svm_bind_gpasid, > .sva_unbind_gpasid = intel_svm_unbind_gpasid, > + .sva_bind = intel_svm_bind, > + .sva_unbind = intel_svm_unbind, > + .sva_get_pasid = intel_svm_get_pasid, > #endif > }; > > diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c > index 1d7a95372f8c..35d949513728 100644 > --- a/drivers/iommu/intel-svm.c > +++ b/drivers/iommu/intel-svm.c > @@ -516,13 +516,14 @@ int intel_svm_unbind_gpasid(struct device *dev, int pasid) > return ret; > } > > -int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, struct svm_dev_ops *ops) > +/* Caller must hold pasid_mutex, mm reference */ > +static int intel_svm_bind_mm(struct device *dev, int flags, struct svm_dev_ops *ops, > + struct mm_struct *mm, struct intel_svm_dev **sd) > { > struct intel_iommu *iommu = intel_svm_device_to_iommu(dev); > struct device_domain_info *info; > struct intel_svm_dev *sdev; > struct intel_svm *svm = NULL; > - struct mm_struct *mm = NULL; > int pasid_max; > int ret; > > @@ -539,16 +540,15 @@ int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, struct svm_dev_ > } else > pasid_max = 1 << 20; > > + /* Bind supervisor PASID shuld have mm = NULL */ should > if (flags & SVM_FLAG_SUPERVISOR_MODE) { > - if (!ecap_srs(iommu->ecap)) > + if (!ecap_srs(iommu->ecap) || mm) { > + pr_err("Supervisor PASID with user provided mm.\n"); > return -EINVAL; > - } else if (pasid) { > - mm = get_task_mm(current); > - BUG_ON(!mm); > + } > } > > - mutex_lock(&pasid_mutex); > - if (pasid && !(flags & SVM_FLAG_PRIVATE_PASID)) { > + if (!(flags & SVM_FLAG_PRIVATE_PASID)) { > struct intel_svm *t; > > list_for_each_entry(t, &global_svm_list, list) { > @@ -586,9 +586,7 @@ int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, struct svm_dev_ > sdev->dev = dev; > > ret = intel_iommu_enable_pasid(iommu, dev); > - if (ret || !pasid) { > - /* If they don't actually want to assign a PASID, this is > - * just an enabling check/preparation. */ > + if (ret) { > kfree(sdev); > goto out; > } > @@ -688,18 +686,17 @@ int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, struct svm_dev_ > } > } > list_add_rcu(&sdev->list, &svm->devs); > - > - success: > - *pasid = svm->pasid; > +success: > + sdev->pasid = svm->pasid; > + sdev->sva.dev = dev; > + if (sd) > + *sd = sdev; One thing that might be missing: calling bind() multiple times with the same (dev, mm) pair should take references to the svm struct, so device drivers can call unbind() on it that many times. > ret = 0; > out: > - mutex_unlock(&pasid_mutex); > - if (mm) > - mmput(mm); > return ret; > } > -EXPORT_SYMBOL_GPL(intel_svm_bind_mm); > > +/* Caller must hold pasid_mutex */ > int intel_svm_unbind_mm(struct device *dev, int pasid) > { > struct intel_svm_dev *sdev; > @@ -707,7 +704,6 @@ int intel_svm_unbind_mm(struct device *dev, int pasid) > struct intel_svm *svm; > int ret = -EINVAL; > > - mutex_lock(&pasid_mutex); > iommu = intel_svm_device_to_iommu(dev); > if (!iommu) > goto out; > @@ -753,45 +749,9 @@ int intel_svm_unbind_mm(struct device *dev, int pasid) > break; > } > out: > - mutex_unlock(&pasid_mutex); > > return ret; > } > -EXPORT_SYMBOL_GPL(intel_svm_unbind_mm); > - > -int intel_svm_is_pasid_valid(struct device *dev, int pasid) > -{ > - struct intel_iommu *iommu; > - struct intel_svm *svm; > - int ret = -EINVAL; > - > - mutex_lock(&pasid_mutex); > - iommu = intel_svm_device_to_iommu(dev); > - if (!iommu) > - goto out; > - > - svm = ioasid_find(NULL, pasid, NULL); > - if (!svm) > - goto out; > - > - if (IS_ERR(svm)) { > - ret = PTR_ERR(svm); > - goto out; > - } > - /* init_mm is used in this case */ > - if (!svm->mm) > - ret = 1; > - else if (atomic_read(&svm->mm->mm_users) > 0) > - ret = 1; > - else > - ret = 0; > - > - out: > - mutex_unlock(&pasid_mutex); > - > - return ret; > -} > -EXPORT_SYMBOL_GPL(intel_svm_is_pasid_valid); > > /* Page request queue descriptor */ > struct page_req_dsc { > @@ -984,3 +944,56 @@ static irqreturn_t prq_event_thread(int irq, void *d) > > return IRQ_RETVAL(handled); > } > + > +#define to_intel_svm_dev(handle) container_of(handle, struct intel_svm_dev, sva) > +struct iommu_sva * > +intel_svm_bind(struct device *dev, struct mm_struct *mm, void *drvdata) > +{ > + struct iommu_sva *sva = ERR_PTR(-EINVAL); > + struct intel_svm_dev *sdev = NULL; > + int flags = 0; > + int ret; > + > + /* > + * TODO: Consolidate with generic iommu-sva bind after it is merged. > + * It will require shared SVM data structures, i.e. combine io_mm > + * and intel_svm etc. > + */ > + if (drvdata) > + flags = *(int *)drvdata; drvdata is more for storing device driver contexts that can be passed to iommu_sva_ops, but I get that this is temporary. As usual I'm dreading supervisor mode making it into the common API. What are your plans regarding SUPERVISOR_MODE and PRIVATE_PASID flags? The previous discussion on the subject [1] had me hoping that you could replace supervisor mode with normal mappings (auxiliary domains?) I'm less worried about PRIVATE_PASID, it would just add complexity into the API and iommu-sva implementation, but doesn't really have security implications. [1] https://lore.kernel.org/linux-iommu/20190228220449.GA12682@araj-mobl1.jf.intel.com/ > + mutex_lock(&pasid_mutex); > + ret = intel_svm_bind_mm(dev, flags, NULL, mm, &sdev); > + if (ret) > + sva = ERR_PTR(ret); > + else if (sdev) > + sva = &sdev->sva; > + else > + WARN(!sdev, "SVM bind succeeded with no sdev!\n"); > + > + mutex_unlock(&pasid_mutex); > + > + return sva; > +} > + > +void intel_svm_unbind(struct iommu_sva *sva) > +{ > + struct intel_svm_dev *sdev; > + > + mutex_lock(&pasid_mutex); > + sdev = to_intel_svm_dev(sva); > + intel_svm_unbind_mm(sdev->dev, sdev->pasid); > + mutex_unlock(&pasid_mutex); > +} > + > +int intel_svm_get_pasid(struct iommu_sva *sva) > +{ > + struct intel_svm_dev *sdev; > + int pasid; > + > + mutex_lock(&pasid_mutex); > + sdev = to_intel_svm_dev(sva); > + pasid = sdev->pasid; > + mutex_unlock(&pasid_mutex); > + > + return pasid; > +} > diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h > index 37cfd35b7ccf..044493a11dce 100644 > --- a/include/linux/intel-iommu.h > +++ b/include/linux/intel-iommu.h > @@ -702,6 +702,11 @@ extern int intel_svm_finish_prq(struct intel_iommu *iommu); > extern int intel_svm_bind_gpasid(struct iommu_domain *domain, > struct device *dev, struct iommu_gpasid_bind_data *data); > extern int intel_svm_unbind_gpasid(struct device *dev, int pasid); > +extern struct iommu_sva * > +intel_svm_bind(struct device *dev, struct mm_struct *mm, void *drvdata); > +extern void intel_svm_unbind(struct iommu_sva *handle); > +extern int intel_svm_get_pasid(struct iommu_sva *handle); > + > struct svm_dev_ops; > > struct intel_svm_dev { > @@ -709,6 +714,8 @@ struct intel_svm_dev { > struct rcu_head rcu; > struct device *dev; > struct svm_dev_ops *ops; > + struct iommu_sva sva; > + int pasid; > int users; > u16 did; > u16 dev_iotlb:1; > diff --git a/include/linux/intel-svm.h b/include/linux/intel-svm.h > index a2c189ad0b01..fb7e786d8877 100644 > --- a/include/linux/intel-svm.h > +++ b/include/linux/intel-svm.h > @@ -62,89 +62,4 @@ struct svm_dev_ops { > */ > #define SVM_FLAG_GUEST_PASID (1<<3) > > -#ifdef CONFIG_INTEL_IOMMU_SVM > - > -/** > - * intel_svm_bind_mm() - Bind the current process to a PASID > - * @dev: Device to be granted access > - * @pasid: Address for allocated PASID > - * @flags: Flags. Later for requesting supervisor mode, etc. > - * @ops: Callbacks to device driver > - * > - * This function attempts to enable PASID support for the given device. > - * If the @pasid argument is non-%NULL, a PASID is allocated for access > - * to the MM of the current process. > - * > - * By using a %NULL value for the @pasid argument, this function can > - * be used to simply validate that PASID support is available for the > - * given device — i.e. that it is behind an IOMMU which has the > - * requisite support, and is enabled. > - * > - * Page faults are handled transparently by the IOMMU code, and there > - * should be no need for the device driver to be involved. If a page > - * fault cannot be handled (i.e. is an invalid address rather than > - * just needs paging in), then the page request will be completed by > - * the core IOMMU code with appropriate status, and the device itself > - * can then report the resulting fault to its driver via whatever > - * mechanism is appropriate. > - * > - * Multiple calls from the same process may result in the same PASID > - * being re-used. A reference count is kept. > - */ > -extern int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, > - struct svm_dev_ops *ops); I notice svm_dev_ops isn't used anymore. Will you remove it entirely, or do you think we should move svm_dev_ops::fault_cb() to iommu_sva_ops? iommu_sva_ops::mm_exit() is also missing, but I plan to send a RFC to remove it shortly, so don't bother :) Thanks, Jean > - > -/** > - * intel_svm_unbind_mm() - Unbind a specified PASID > - * @dev: Device for which PASID was allocated > - * @pasid: PASID value to be unbound > - * > - * This function allows a PASID to be retired when the device no > - * longer requires access to the address space of a given process. > - * > - * If the use count for the PASID in question reaches zero, the > - * PASID is revoked and may no longer be used by hardware. > - * > - * Device drivers are required to ensure that no access (including > - * page requests) is currently outstanding for the PASID in question, > - * before calling this function. > - */ > -extern int intel_svm_unbind_mm(struct device *dev, int pasid); > - > -/** > - * intel_svm_is_pasid_valid() - check if pasid is valid > - * @dev: Device for which PASID was allocated > - * @pasid: PASID value to be checked > - * > - * This function checks if the specified pasid is still valid. A > - * valid pasid means the backing mm is still having a valid user. > - * For kernel callers init_mm is always valid. for other mm, if mm->mm_users > - * is non-zero, it is valid. > - * > - * returns -EINVAL if invalid pasid, 0 if pasid ref count is invalid > - * 1 if pasid is valid. > - */ > -extern int intel_svm_is_pasid_valid(struct device *dev, int pasid); > - > -#else /* CONFIG_INTEL_IOMMU_SVM */ > - > -static inline int intel_svm_bind_mm(struct device *dev, int *pasid, > - int flags, struct svm_dev_ops *ops) > -{ > - return -ENOSYS; > -} > - > -static inline int intel_svm_unbind_mm(struct device *dev, int pasid) > -{ > - BUG(); > -} > - > -static int intel_svm_is_pasid_valid(struct device *dev, int pasid) > -{ > - return -EINVAL; > -} > -#endif /* CONFIG_INTEL_IOMMU_SVM */ > - > -#define intel_svm_available(dev) (!intel_svm_bind_mm((dev), NULL, 0, NULL)) > - > #endif /* __INTEL_SVM_H__ */ > -- > 2.7.4 >