From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 487EE15D5AC for ; Thu, 1 Feb 2024 12:16:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706789762; cv=none; b=AtgtWn+d329lCSXCtXmi3fQ7g2M7m+AMuTrLoEgeBTwT/kRacyenGmiqTmc62zVvNCp7neJiiqVJwoLqF/4uAZTVI/JADAOKYQ3MxG+am4V9r3Ee2VF+bFUHFYZ+o3CrHiHIjzdHdb3RYGknhaS/uuSkhnznmJXYyN6EFsGGe7o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706789762; c=relaxed/simple; bh=SFsL/oGqWpgc6lFN1WEaTjkfK9CV44kWOLq3bM4OCYI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=nC6YIh7IjTslGetVQwWbAeP3Rtl+Y9mL8Az4b7mgIAMR40AHBwqgp57Asojwo7RRPONjoqoLJ4ZoHPRUtgM2K4X76220hSa51f9knH1Ha3Ed9fxyLK7aMLYENbjA2CsVsW0rna3O6sOcIdFICvEDDNh/ohbHg3iD8zD0OmKPryA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OUpHUfrA; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OUpHUfrA" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-55f63fd3dd8so11269a12.0 for ; Thu, 01 Feb 2024 04:16:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706789758; x=1707394558; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=cve+q1TZtCVqvyVnUQyH2Cq09HKM/U+2tnIu1KSKKcg=; b=OUpHUfrAHVNXUjx+oBZSJcTYxZUb3mfIRzdOs/qAWa17GtLKs//fuxgWrJAap5XBsO f+r8DBVRr53LNg534XClqRTadIEeri7X0MfycIpkYd0Pd47sEQoeNFkx7AhaIu//7e4I yPuLplMf4koPXHt80PtrK0/5AER+ef+7XGcvpVGb53ZkPl/csnSkbSpDqoRCSVxmG4ez +mrJTAZQsBUdWrTdujvfWCVKABoHB6mH7S98807JbsAdrBAUW/lvY+NxgmKxM2zhYcEk OXEvUGC+rA4IlUUzPFqe1UfSOwaZYxvL0oYM48p9TcGTdjyQxZg0iq2imXWljOEldDZ3 mP0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706789758; x=1707394558; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cve+q1TZtCVqvyVnUQyH2Cq09HKM/U+2tnIu1KSKKcg=; b=NlcbwYcuxVEYxADpUaqa0uo/HXbeV06kGmunQ7V3zPMeXyYvC58lxwyuPPhGj5/g4J /Tbz/xPdYsd7xIkJCwOnT8wKkr5ePDwYDLOU+Urldtxjy+RxWphsnv5tfFhk/RQYcpx7 E6NQ3UrJ/w6KC6I+QoRx9YcIQv4bf1LrPh0jpWwgxVj+PDQCD+yCy89dw8QvAbIKA25p xQOSMv4WgLaUQFzq5zRr5Fe3rStpKoNNE98r3HRSsXmWzYBX/00lIOqrESXfmeR+6SMu MDLSHvtwDl0p+eUfj749xUslZv5frYTVn5+JF4slo2FWqIUHj7vHTCKVCxkpwhllKc+R 7U4A== X-Gm-Message-State: AOJu0Yx9IFBqfnUnaQVw9fDUQrfedl/lk3ZrZ5l1VCPHxFsVuUPWDeIz lJwLk+pHL+zEkgENMuEuB+n6SGkWB2AL5Otv4IFyNBpjE/7owB91wReu6CpiPA== X-Google-Smtp-Source: AGHT+IHy1BHTCsh/42eBIgRQC6BQGnV05xiXKU8/nomBidZfv5pBBsK0ygZYeANcbrgw5sK9uzanEg== X-Received: by 2002:a50:d54e:0:b0:55f:b5a3:e2b4 with SMTP id f14-20020a50d54e000000b0055fb5a3e2b4mr122757edj.7.1706789758212; Thu, 01 Feb 2024 04:15:58 -0800 (PST) X-Forwarded-Encrypted: i=0; AJvYcCWgcgdkyotuywgnji7Lsr9mrvbMtY2+6Pmuodeoib/LTzKufe2dpr7/6JVlZPI9S/1LXXZaPqQ8egGQBtwyrvrh9AdpIuW9LjrWJLgLXNLP6pOBgWjRYSKM/dzZ5KNzJG4V6/BltYOhve+IVvASamxZXLnkf01ojn+jqb/YHU/TAFMjCImrpqRe+cXrmIaSiEucMQVQ7sUTxdCbzev8oePxvX3LG8hYiQIgrgQNkfKbS8tHvkfDyX0jg0TPEffckSHbFGN9NauYv4OpOTdM+hkIWFU84CnGguuPopMs/V0jEW+uxMWy1tlJAkgJCoRo5pVl7+UEMtlZd0Sxp9uPPduiI0zyOJ49tXJxBuU/yX0t+bQ1+RHsi5Qg Received: from google.com (185.83.140.34.bc.googleusercontent.com. [34.140.83.185]) by smtp.gmail.com with ESMTPSA id t15-20020a05600c198f00b0040ee51f1025sm4283470wmq.43.2024.02.01.04.15.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Feb 2024 04:15:57 -0800 (PST) Date: Thu, 1 Feb 2024 12:15:53 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameer Kolothum Subject: Re: [PATCH v4 06/16] iommu/arm-smmu-v3: Hold arm_smmu_asid_lock during all of attach_dev Message-ID: References: <0-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> <6-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> Hi Jason, On Thu, Jan 25, 2024 at 07:57:16PM -0400, Jason Gunthorpe wrote: > The BTM support wants to be able to change the ASID of any smmu_domain. > When it goes to do this it holds the arm_smmu_asid_lock and iterates over > the target domain's devices list. > > During attach of a S1 domain we must ensure that the devices list and > CD are in sync, otherwise we could miss CD updates or a parallel CD update > could push an out of date CD. > > This is pretty complicated, and almost works today because > arm_smmu_detach_dev() removes the master from the linked list before > working on the CD entries, preventing parallel update of the CD. > > However, it does have an issue where the CD can remain programed while the > domain appears to be unattached. arm_smmu_share_asid() will then not clear > any CD entriess and install its own CD entry with the same ASID > concurrently. This creates a small race window where the IOMMU can see two > ASIDs pointing to different translations. I don’t see the race condition. The current flow is as follows, For SVA, if the asid was used by domain_x, it will do: lock(arm_smmu_asid_lock) Alloc new asid and set cd->asid. lock(domain_x->devices_lock) Write new CD with the new asid unlock(domain_x->devices_lock) unlock(arm_smmu_asid_lock) For attach_dev (domain_y), if the device was attached to domain_z //Detach old domain lock(domain_z->devices_lock) Remove master from old domain unlock(domain_z->devices_lock) Clear CD //Attach new domain lock(arm_smmu_asid_lock) Allocate ASID unlock(arm_smmu_asid_lock) lock(domain_y->devices_lock) Insert new master. unlock(domain_y->devices_lock) lock(arm_smmu_asid_lock) Write CD unlock(arm_smmu_asid_lock) In case 1) domain_x == domain_z(old domain) Write to the CD is protected by domain_x->devices_lock, so either: a) The device will be removed, so SVA code will not touch it, and the detach will clear the CD. b) The device CD will be updated from the SVA with the new code, but then it will be removed from the domain and cleared. I don’t see any case where we end with a programmed CD. 2) domain_x == domain_y(new domain) Similarly the device would either see the new CD(new asid) or the old CD then the new CD. Can you please clarify the race condition? as it seems I am missing something. > Solve this by wrapping most of the attach flow in the > arm_smmu_asid_lock. This locks more than strictly needed to prepare for > the next patch which will reorganize the order of the linked list, STE and > CD changes. > > Move arm_smmu_detach_dev() till after we have initialized the domain so > the lock can be held for less time. > > Reviewed-by: Michael Shavit > Reviewed-by: Nicolin Chen > Tested-by: Shameer Kolothum > Tested-by: Nicolin Chen > Tested-by: Moritz Fischer > Signed-off-by: Jason Gunthorpe > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 22 ++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > index 9a95d0f1494223..539ef380f457fa 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -2612,8 +2612,6 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > return -EBUSY; > } > > - arm_smmu_detach_dev(master); > - > mutex_lock(&smmu_domain->init_mutex); > > if (!smmu_domain->smmu) { > @@ -2628,6 +2626,16 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > if (ret) > return ret; > > + /* > + * Prevent arm_smmu_share_asid() from trying to change the ASID > + * of either the old or new domain while we are working on it. > + * This allows the STE and the smmu_domain->devices list to > + * be inconsistent during this routine. > + */ > + mutex_lock(&arm_smmu_asid_lock); > + > + arm_smmu_detach_dev(master); > + > master->domain = smmu_domain; > > /* > @@ -2653,13 +2661,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > } > } > > - /* > - * Prevent SVA from concurrently modifying the CD or writing to > - * the CD entry > - */ > - mutex_lock(&arm_smmu_asid_lock); > ret = arm_smmu_write_ctx_desc(master, IOMMU_NO_PASID, &smmu_domain->cd); > - mutex_unlock(&arm_smmu_asid_lock); > if (ret) { > master->domain = NULL; > goto out_list_del; > @@ -2669,13 +2671,15 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > arm_smmu_install_ste_for_dev(master); > > arm_smmu_enable_ats(master); > - return 0; > + goto out_unlock; > > out_list_del: > spin_lock_irqsave(&smmu_domain->devices_lock, flags); > list_del(&master->domain_head); > spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); > > +out_unlock: > + mutex_unlock(&arm_smmu_asid_lock); > return ret; > } > > -- > 2.43.0 > Thanks, Mostafa 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 485D1C47DDF for ; Thu, 1 Feb 2024 12:16:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MY5MPHy1nII2MAuRrLoEADJkcEW+H7Y20eqUM1dcUfE=; b=kTXHlY2txY+l73 f2R4DxKBDaBIOYMxXiL5iXbtDZdxGclxzAHnH//vX333knmhBfsWcAwZ0l7aJvujIoBea296oVaIH 4+qO9SYXfP6iVUdE2o1lKrVRgZnM6myT2ADv5TSX/Z8R4BOokLiExTVFC29ZzyM7R/DLI3TyJJGTi yUyjYOHzfYvZH6H5HdiPqgxS7JSklOezA99NG7lJ/AbglAsdPNH+UoLNWfS4nPLAJEMJapXXvu0Ik qbbFUHTrrFDHhBxFpyfdHl0pU2Yd+9dV0tq9XsNUCx9mpDtaCA3ghGeACanzpumbJG3tIej4PlXR5 HDscOch/4WVvw3AmIIkw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVVzD-00000007ijl-2y8T; Thu, 01 Feb 2024 12:16:07 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVVz7-00000007iiq-3enH for linux-arm-kernel@lists.infradead.org; Thu, 01 Feb 2024 12:16:06 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-55f85a2a43fso10209a12.1 for ; Thu, 01 Feb 2024 04:15:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706789758; x=1707394558; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=cve+q1TZtCVqvyVnUQyH2Cq09HKM/U+2tnIu1KSKKcg=; b=LLtVvv3E8qsZKhLea/Y+qMi6LfsAo3zIBdeIYE4xxohz2YfBN9j+B8v8psqPR8huRk pZXx6A1QVYrGshr7ei00hAQteFtF68k7IcYAVtc1BTbPj8fuWvmWwxYdedRi0ji1Y48E gi5kzrzg4Jhx6ST5siRiRDDQsPOsXwrwNda3lm2LUjiBjl7kTPaEf5qPyPXedQric3vT V+fBEceHDSX+WLLkGE2nrgv5+8PwXN3DaZxjyawD0lF+xfoqtiISM52HBjCZPjrzxMuu G7FSaSpjZ49k6uFWCuVuinvrMMAKkdAgoyd0kIc+z1UGAxOqkbxh5Huu61qwZWLmB/i5 XPZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706789758; x=1707394558; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cve+q1TZtCVqvyVnUQyH2Cq09HKM/U+2tnIu1KSKKcg=; b=deBU7+lKARm+p5E9GK1h7QP4xLyflpyEfXV6vzhRbaTQnqon12tnPQ2QKDaG3x9ePN N87vyG+NT2K8aAwiG1AmeTwN/4l1aJiMkHsIpRk5HEEdwdZ0WZASFrwxBJPCIFDVoTnT mI4S9tH/gEA5tG6sRYOkd0kOyrP0TOn56WqOIP04VM0j6RwnJMr8+o0fdwNNiMW7MY6J jvdL7jaQi3tjqefLiajRjavenPt64sF8JEGwGEyKdFNUSJ3584Kd1pfIbWsi6WXDVblA KMl2vWlx2utGhriF5/yWS/i49hWko9ehRTS9bjl7psFxLElR+GpcBO+ks+GxNyafGMoy 0dyg== X-Gm-Message-State: AOJu0YygUCW0PhAjLa/Ltu3PsAfsGF8oHI8AncRqE6px0pBUCtoHwigB RJ+hTh877807sg+WwaRADh5IC/rRD5ltKph4m0eknyMWgf1BXUSzwhL5cFLYoQ== X-Google-Smtp-Source: AGHT+IHy1BHTCsh/42eBIgRQC6BQGnV05xiXKU8/nomBidZfv5pBBsK0ygZYeANcbrgw5sK9uzanEg== X-Received: by 2002:a50:d54e:0:b0:55f:b5a3:e2b4 with SMTP id f14-20020a50d54e000000b0055fb5a3e2b4mr122757edj.7.1706789758212; Thu, 01 Feb 2024 04:15:58 -0800 (PST) X-Forwarded-Encrypted: i=0; AJvYcCWgcgdkyotuywgnji7Lsr9mrvbMtY2+6Pmuodeoib/LTzKufe2dpr7/6JVlZPI9S/1LXXZaPqQ8egGQBtwyrvrh9AdpIuW9LjrWJLgLXNLP6pOBgWjRYSKM/dzZ5KNzJG4V6/BltYOhve+IVvASamxZXLnkf01ojn+jqb/YHU/TAFMjCImrpqRe+cXrmIaSiEucMQVQ7sUTxdCbzev8oePxvX3LG8hYiQIgrgQNkfKbS8tHvkfDyX0jg0TPEffckSHbFGN9NauYv4OpOTdM+hkIWFU84CnGguuPopMs/V0jEW+uxMWy1tlJAkgJCoRo5pVl7+UEMtlZd0Sxp9uPPduiI0zyOJ49tXJxBuU/yX0t+bQ1+RHsi5Qg Received: from google.com (185.83.140.34.bc.googleusercontent.com. [34.140.83.185]) by smtp.gmail.com with ESMTPSA id t15-20020a05600c198f00b0040ee51f1025sm4283470wmq.43.2024.02.01.04.15.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Feb 2024 04:15:57 -0800 (PST) Date: Thu, 1 Feb 2024 12:15:53 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameer Kolothum Subject: Re: [PATCH v4 06/16] iommu/arm-smmu-v3: Hold arm_smmu_asid_lock during all of attach_dev Message-ID: References: <0-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> <6-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <6-v4-c93b774edcc4+42d2b-smmuv3_newapi_p1_jgg@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240201_041601_958853_36D19B2E X-CRM114-Status: GOOD ( 39.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSmFzb24sCgpPbiBUaHUsIEphbiAyNSwgMjAyNCBhdCAwNzo1NzoxNlBNIC0wNDAwLCBKYXNv biBHdW50aG9ycGUgd3JvdGU6Cj4gVGhlIEJUTSBzdXBwb3J0IHdhbnRzIHRvIGJlIGFibGUgdG8g Y2hhbmdlIHRoZSBBU0lEIG9mIGFueSBzbW11X2RvbWFpbi4KPiBXaGVuIGl0IGdvZXMgdG8gZG8g dGhpcyBpdCBob2xkcyB0aGUgYXJtX3NtbXVfYXNpZF9sb2NrIGFuZCBpdGVyYXRlcyBvdmVyCj4g dGhlIHRhcmdldCBkb21haW4ncyBkZXZpY2VzIGxpc3QuCj4gCj4gRHVyaW5nIGF0dGFjaCBvZiBh IFMxIGRvbWFpbiB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBkZXZpY2VzIGxpc3QgYW5kCj4gQ0Qg YXJlIGluIHN5bmMsIG90aGVyd2lzZSB3ZSBjb3VsZCBtaXNzIENEIHVwZGF0ZXMgb3IgYSBwYXJh bGxlbCBDRCB1cGRhdGUKPiBjb3VsZCBwdXNoIGFuIG91dCBvZiBkYXRlIENELgo+IAo+IFRoaXMg aXMgcHJldHR5IGNvbXBsaWNhdGVkLCBhbmQgYWxtb3N0IHdvcmtzIHRvZGF5IGJlY2F1c2UKPiBh cm1fc21tdV9kZXRhY2hfZGV2KCkgcmVtb3ZlcyB0aGUgbWFzdGVyIGZyb20gdGhlIGxpbmtlZCBs aXN0IGJlZm9yZQo+IHdvcmtpbmcgb24gdGhlIENEIGVudHJpZXMsIHByZXZlbnRpbmcgcGFyYWxs ZWwgdXBkYXRlIG9mIHRoZSBDRC4KPiAKPiBIb3dldmVyLCBpdCBkb2VzIGhhdmUgYW4gaXNzdWUg d2hlcmUgdGhlIENEIGNhbiByZW1haW4gcHJvZ3JhbWVkIHdoaWxlIHRoZQo+IGRvbWFpbiBhcHBl YXJzIHRvIGJlIHVuYXR0YWNoZWQuIGFybV9zbW11X3NoYXJlX2FzaWQoKSB3aWxsIHRoZW4gbm90 IGNsZWFyCj4gYW55IENEIGVudHJpZXNzIGFuZCBpbnN0YWxsIGl0cyBvd24gQ0QgZW50cnkgd2l0 aCB0aGUgc2FtZSBBU0lECj4gY29uY3VycmVudGx5LiBUaGlzIGNyZWF0ZXMgYSBzbWFsbCByYWNl IHdpbmRvdyB3aGVyZSB0aGUgSU9NTVUgY2FuIHNlZSB0d28KPiBBU0lEcyBwb2ludGluZyB0byBk aWZmZXJlbnQgdHJhbnNsYXRpb25zLgoKSSBkb27igJl0IHNlZSB0aGUgcmFjZSBjb25kaXRpb24u CgpUaGUgY3VycmVudCBmbG93IGlzIGFzIGZvbGxvd3MsCkZvciBTVkEsIGlmIHRoZSBhc2lkIHdh cyB1c2VkIGJ5IGRvbWFpbl94LCBpdCB3aWxsIGRvOgoKbG9jayhhcm1fc21tdV9hc2lkX2xvY2sp CkFsbG9jIG5ldyBhc2lkIGFuZCBzZXQgY2QtPmFzaWQuCmxvY2soZG9tYWluX3gtPmRldmljZXNf bG9jaykKV3JpdGUgbmV3IENEIHdpdGggdGhlIG5ldyBhc2lkCnVubG9jayhkb21haW5feC0+ZGV2 aWNlc19sb2NrKQp1bmxvY2soYXJtX3NtbXVfYXNpZF9sb2NrKQoKRm9yIGF0dGFjaF9kZXYgKGRv bWFpbl95KSwgaWYgdGhlIGRldmljZSB3YXMgYXR0YWNoZWQgdG8gZG9tYWluX3oKLy9EZXRhY2gg b2xkIGRvbWFpbgpsb2NrKGRvbWFpbl96LT5kZXZpY2VzX2xvY2spClJlbW92ZSBtYXN0ZXIgZnJv bSBvbGQgZG9tYWluCnVubG9jayhkb21haW5fei0+ZGV2aWNlc19sb2NrKQpDbGVhciBDRAovL0F0 dGFjaCBuZXcgZG9tYWluCmxvY2soYXJtX3NtbXVfYXNpZF9sb2NrKQpBbGxvY2F0ZSBBU0lECnVu bG9jayhhcm1fc21tdV9hc2lkX2xvY2spCgpsb2NrKGRvbWFpbl95LT5kZXZpY2VzX2xvY2spCklu c2VydCBuZXcgbWFzdGVyLgp1bmxvY2soZG9tYWluX3ktPmRldmljZXNfbG9jaykKCmxvY2soYXJt X3NtbXVfYXNpZF9sb2NrKQpXcml0ZSBDRAp1bmxvY2soYXJtX3NtbXVfYXNpZF9sb2NrKQoKCklu IGNhc2UKMSkgZG9tYWluX3ggPT0gZG9tYWluX3oob2xkIGRvbWFpbikKV3JpdGUgdG8gdGhlIENE IGlzIHByb3RlY3RlZCBieSBkb21haW5feC0+ZGV2aWNlc19sb2NrLCBzbyBlaXRoZXI6CiAgICBh KSBUaGUgZGV2aWNlIHdpbGwgYmUgcmVtb3ZlZCwgc28gU1ZBIGNvZGUgd2lsbCBub3QgdG91Y2gg aXQsIGFuZCB0aGUKICAgIGRldGFjaCB3aWxsIGNsZWFyIHRoZSBDRC4KICAgIGIpIFRoZSBkZXZp Y2UgQ0Qgd2lsbCBiZSB1cGRhdGVkIGZyb20gdGhlIFNWQSB3aXRoIHRoZSBuZXcgY29kZSwgYnV0 IHRoZW4KICAgIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBkb21haW4gYW5kIGNsZWFyZWQu CgpJIGRvbuKAmXQgc2VlIGFueSBjYXNlIHdoZXJlIHdlIGVuZCB3aXRoIGEgcHJvZ3JhbW1lZCBD RC4KCjIpIGRvbWFpbl94ID09IGRvbWFpbl95KG5ldyBkb21haW4pCgpTaW1pbGFybHkgdGhlIGRl dmljZSB3b3VsZCBlaXRoZXIgc2VlIHRoZSBuZXcgQ0QobmV3IGFzaWQpIG9yIHRoZSBvbGQgQ0QK dGhlbiB0aGUgbmV3IENELgoKQ2FuIHlvdSBwbGVhc2UgY2xhcmlmeSB0aGUgcmFjZSBjb25kaXRp b24/IGFzIGl0IHNlZW1zIEkgYW0gbWlzc2luZyBzb21ldGhpbmcuCgo+IFNvbHZlIHRoaXMgYnkg d3JhcHBpbmcgbW9zdCBvZiB0aGUgYXR0YWNoIGZsb3cgaW4gdGhlCj4gYXJtX3NtbXVfYXNpZF9s b2NrLiBUaGlzIGxvY2tzIG1vcmUgdGhhbiBzdHJpY3RseSBuZWVkZWQgdG8gcHJlcGFyZSBmb3IK PiB0aGUgbmV4dCBwYXRjaCB3aGljaCB3aWxsIHJlb3JnYW5pemUgdGhlIG9yZGVyIG9mIHRoZSBs aW5rZWQgbGlzdCwgU1RFIGFuZAo+IENEIGNoYW5nZXMuCj4gCj4gTW92ZSBhcm1fc21tdV9kZXRh Y2hfZGV2KCkgdGlsbCBhZnRlciB3ZSBoYXZlIGluaXRpYWxpemVkIHRoZSBkb21haW4gc28KPiB0 aGUgbG9jayBjYW4gYmUgaGVsZCBmb3IgbGVzcyB0aW1lLgo+IAo+IFJldmlld2VkLWJ5OiBNaWNo YWVsIFNoYXZpdCA8bXNoYXZpdEBnb29nbGUuY29tPgo+IFJldmlld2VkLWJ5OiBOaWNvbGluIENo ZW4gPG5pY29saW5jQG52aWRpYS5jb20+Cj4gVGVzdGVkLWJ5OiBTaGFtZWVyIEtvbG90aHVtIDxz aGFtZWVyYWxpLmtvbG90aHVtLnRob2RpQGh1YXdlaS5jb20+Cj4gVGVzdGVkLWJ5OiBOaWNvbGlu IENoZW4gPG5pY29saW5jQG52aWRpYS5jb20+Cj4gVGVzdGVkLWJ5OiBNb3JpdHogRmlzY2hlciA8 bW9yaXR6ZkBnb29nbGUuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEphc29uIEd1bnRob3JwZSA8amdn QG52aWRpYS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1z bW11LXYzLmMgfCAyMiArKysrKysrKysrKystLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDEz IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmMgYi9kcml2ZXJzL2lvbW11L2FybS9h cm0tc21tdS12My9hcm0tc21tdS12My5jCj4gaW5kZXggOWE5NWQwZjE0OTQyMjMuLjUzOWVmMzgw ZjQ1N2ZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1z bW11LXYzLmMKPiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12 My5jCj4gQEAgLTI2MTIsOCArMjYxMiw2IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfYXR0YWNoX2Rl dihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCQly ZXR1cm4gLUVCVVNZOwo+ICAJfQo+ICAKPiAtCWFybV9zbW11X2RldGFjaF9kZXYobWFzdGVyKTsK PiAtCj4gIAltdXRleF9sb2NrKCZzbW11X2RvbWFpbi0+aW5pdF9tdXRleCk7Cj4gIAo+ICAJaWYg KCFzbW11X2RvbWFpbi0+c21tdSkgewo+IEBAIC0yNjI4LDYgKzI2MjYsMTYgQEAgc3RhdGljIGlu dCBhcm1fc21tdV9hdHRhY2hfZGV2KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgc3RydWN0 IGRldmljZSAqZGV2KQo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCS8qCj4g KwkgKiBQcmV2ZW50IGFybV9zbW11X3NoYXJlX2FzaWQoKSBmcm9tIHRyeWluZyB0byBjaGFuZ2Ug dGhlIEFTSUQKPiArCSAqIG9mIGVpdGhlciB0aGUgb2xkIG9yIG5ldyBkb21haW4gd2hpbGUgd2Ug YXJlIHdvcmtpbmcgb24gaXQuCj4gKwkgKiBUaGlzIGFsbG93cyB0aGUgU1RFIGFuZCB0aGUgc21t dV9kb21haW4tPmRldmljZXMgbGlzdCB0bwo+ICsJICogYmUgaW5jb25zaXN0ZW50IGR1cmluZyB0 aGlzIHJvdXRpbmUuCj4gKwkgKi8KPiArCW11dGV4X2xvY2soJmFybV9zbW11X2FzaWRfbG9jayk7 Cj4gKwo+ICsJYXJtX3NtbXVfZGV0YWNoX2RldihtYXN0ZXIpOwo+ICsKPiAgCW1hc3Rlci0+ZG9t YWluID0gc21tdV9kb21haW47Cj4gIAo+ICAJLyoKPiBAQCAtMjY1MywxMyArMjY2MSw3IEBAIHN0 YXRpYyBpbnQgYXJtX3NtbXVfYXR0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4s IHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCQkJfQo+ICAJCX0KPiAgCj4gLQkJLyoKPiAtCQkgKiBQ cmV2ZW50IFNWQSBmcm9tIGNvbmN1cnJlbnRseSBtb2RpZnlpbmcgdGhlIENEIG9yIHdyaXRpbmcg dG8KPiAtCQkgKiB0aGUgQ0QgZW50cnkKPiAtCQkgKi8KPiAtCQltdXRleF9sb2NrKCZhcm1fc21t dV9hc2lkX2xvY2spOwo+ICAJCXJldCA9IGFybV9zbW11X3dyaXRlX2N0eF9kZXNjKG1hc3Rlciwg SU9NTVVfTk9fUEFTSUQsICZzbW11X2RvbWFpbi0+Y2QpOwo+IC0JCW11dGV4X3VubG9jaygmYXJt X3NtbXVfYXNpZF9sb2NrKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCW1hc3Rlci0+ZG9tYWluID0g TlVMTDsKPiAgCQkJZ290byBvdXRfbGlzdF9kZWw7Cj4gQEAgLTI2NjksMTMgKzI2NzEsMTUgQEAg c3RhdGljIGludCBhcm1fc21tdV9hdHRhY2hfZGV2KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFp biwgc3RydWN0IGRldmljZSAqZGV2KQo+ICAJYXJtX3NtbXVfaW5zdGFsbF9zdGVfZm9yX2Rldiht YXN0ZXIpOwo+ICAKPiAgCWFybV9zbW11X2VuYWJsZV9hdHMobWFzdGVyKTsKPiAtCXJldHVybiAw Owo+ICsJZ290byBvdXRfdW5sb2NrOwo+ICAKPiAgb3V0X2xpc3RfZGVsOgo+ICAJc3Bpbl9sb2Nr X2lycXNhdmUoJnNtbXVfZG9tYWluLT5kZXZpY2VzX2xvY2ssIGZsYWdzKTsKPiAgCWxpc3RfZGVs KCZtYXN0ZXItPmRvbWFpbl9oZWFkKTsKPiAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtbXVf ZG9tYWluLT5kZXZpY2VzX2xvY2ssIGZsYWdzKTsKPiAgCj4gK291dF91bmxvY2s6Cj4gKwltdXRl eF91bmxvY2soJmFybV9zbW11X2FzaWRfbG9jayk7Cj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ IC0tIAo+IDIuNDMuMAo+IAoKVGhhbmtzLApNb3N0YWZhCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==