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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F1FDC433F5 for ; Thu, 19 May 2022 16:23:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241932AbiESQXG (ORCPT ); Thu, 19 May 2022 12:23:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52466 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237446AbiESQXD (ORCPT ); Thu, 19 May 2022 12:23:03 -0400 Received: from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com [IPv6:2607:f8b0:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6DA79C1EE7 for ; Thu, 19 May 2022 09:23:01 -0700 (PDT) Received: by mail-ot1-x32d.google.com with SMTP id w19-20020a9d6393000000b0060aeb359ca8so479815otk.6 for ; Thu, 19 May 2022 09:23:01 -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=FH62jo+EKH6+RD9QF22HzUqg98s8nrMbRi4L1X0I39o=; b=Q5PfGDYn1550gh3IUaPfmMJIE7R/amM5GS+Pf+cehuzH4nFe0MbqaBdHUj/cmeOQZq /9J4V0yXplZ8yQo2YUfXyVZIb0PHeeilNF4tUph+KZuoy8dFvthNSSiZUnFsWJibHWTT FggDJ+BV9Ncxl0K1aZv/7eOcIcU1SFsKuFHyyjESGiZoIX7eWBQmthLAHSt1vr2zBMMs EB27nMwbqGQMdgvSIn32skO/sg3M9T7B7sOCzYbvkm57s0+0ahAxv6sN4g7senlq23F4 Ar8ajVk6qqyuafvxkvOORhPUIXzV1WjoBSgtF+32uYFa5jPTjzkA1Vq1KCzsXMaHCZ9n yARw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=FH62jo+EKH6+RD9QF22HzUqg98s8nrMbRi4L1X0I39o=; b=M2g94+HflBsCaLreUIsGHyp/fS1ebQv9O4YYKI60oIiv2PAn5bWrA7aGvHxPv/s+Yv 967j4Ut1W2YvYNESa3/zZU8fAxbtNkEPp4bJiLwQHguNz/z8jOz5ifvicGZVr0DwZ/lv PzPdwd/hLiW0px5CrTkEMTZ1kFiUTytBkSWvwqGyVYbC0Y/9lP4kfXtgok1TSrCkE0FD Jp9ehX9ZdrvRXIm+osOgwJPLjB/a1qbdf9Rfv0BexWtJBCiM65jI2NeP0kCVjZKVZYVf tNNhMTUI3SUFZr386qVfMc0cIG4j5PW6gulrL1bJ6TxDlbILq66SeWNMBaK/hxTHU5E6 LcXg== X-Gm-Message-State: AOAM531TxHx/81ucAH+qHBrN/Yn9C61CH6KgMYjy+Bu0ZrPJxv8Vc3pc Io99n4iR1z3LNJKWPHW0estKJw== X-Google-Smtp-Source: ABdhPJxCny9lOE2miioKiQa404DPecVP/dLlqgdhKU9ocG+45FV+tw9TBBdTqR89UNQlnrhKLqD3eQ== X-Received: by 2002:a05:6830:1219:b0:606:1c66:8441 with SMTP id r25-20020a056830121900b006061c668441mr2208098otp.177.1652977380614; Thu, 19 May 2022 09:23:00 -0700 (PDT) Received: from myrica (cpc92880-cmbg19-2-0-cust679.5-4.cable.virginm.net. [82.27.106.168]) by smtp.gmail.com with ESMTPSA id f21-20020a9d6c15000000b0060aea5bbc87sm305901otq.18.2022.05.19.09.22.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 09:23:00 -0700 (PDT) Date: Thu, 19 May 2022 17:22:32 +0100 From: Jean-Philippe Brucker To: Lu Baolu Cc: Joerg Roedel , Jason Gunthorpe , Christoph Hellwig , Kevin Tian , Ashok Raj , Will Deacon , Robin Murphy , Jean-Philippe Brucker , Dave Jiang , Vinod Koul , Eric Auger , Liu Yi L , Jacob jun Pan , iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Jacob Pan Subject: Re: [PATCH v7 02/10] iommu: Remove SVM_FLAG_SUPERVISOR_MODE support Message-ID: References: <20220519072047.2996983-1-baolu.lu@linux.intel.com> <20220519072047.2996983-3-baolu.lu@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220519072047.2996983-3-baolu.lu@linux.intel.com> X-TUID: q1Um/XayDwOJ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 19, 2022 at 03:20:39PM +0800, Lu Baolu wrote: > The current kernel DMA with PASID support is based on the SVA with a flag > SVM_FLAG_SUPERVISOR_MODE. The IOMMU driver binds the kernel memory address > space to a PASID of the device. The device driver programs the device with > kernel virtual address (KVA) for DMA access. There have been security and > functional issues with this approach: > > - The lack of IOTLB synchronization upon kernel page table updates. > (vmalloc, module/BPF loading, CONFIG_DEBUG_PAGEALLOC etc.) > - Other than slight more protection, using kernel virtual address (KVA) > has little advantage over physical address. There are also no use > cases yet where DMA engines need kernel virtual addresses for in-kernel > DMA. > > This removes SVM_FLAG_SUPERVISOR_MODE support from the IOMMU interface. > The device drivers are suggested to handle kernel DMA with PASID through > the kernel DMA APIs. > > The drvdata parameter in iommu_sva_bind_device() and all callbacks is not > needed anymore. Cleanup them as well. > > Link: https://lore.kernel.org/linux-iommu/20210511194726.GP1002214@nvidia.com/ > Signed-off-by: Jacob Pan > Signed-off-by: Lu Baolu > Reviewed-by: Jason Gunthorpe For the SMMU bits Reviewed-by: Jean-Philippe Brucker > --- > include/linux/intel-iommu.h | 3 +- > include/linux/intel-svm.h | 13 ----- > include/linux/iommu.h | 8 +-- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 5 +- > drivers/dma/idxd/cdev.c | 2 +- > drivers/dma/idxd/init.c | 24 +------- > .../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 3 +- > drivers/iommu/intel/svm.c | 57 +++++-------------- > drivers/iommu/iommu.c | 5 +- > drivers/misc/uacce/uacce.c | 2 +- > 10 files changed, 26 insertions(+), 96 deletions(-) > > diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h > index 4f29139bbfc3..df23300cfa88 100644 > --- a/include/linux/intel-iommu.h > +++ b/include/linux/intel-iommu.h > @@ -739,8 +739,7 @@ struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn); > extern void intel_svm_check(struct intel_iommu *iommu); > extern int intel_svm_enable_prq(struct intel_iommu *iommu); > extern int intel_svm_finish_prq(struct intel_iommu *iommu); > -struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm, > - void *drvdata); > +struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm); > void intel_svm_unbind(struct iommu_sva *handle); > u32 intel_svm_get_pasid(struct iommu_sva *handle); > int intel_svm_page_response(struct device *dev, struct iommu_fault_event *evt, > diff --git a/include/linux/intel-svm.h b/include/linux/intel-svm.h > index 207ef06ba3e1..f9a0d44f6fdb 100644 > --- a/include/linux/intel-svm.h > +++ b/include/linux/intel-svm.h > @@ -13,17 +13,4 @@ > #define PRQ_RING_MASK ((0x1000 << PRQ_ORDER) - 0x20) > #define PRQ_DEPTH ((0x1000 << PRQ_ORDER) >> 5) > > -/* > - * The SVM_FLAG_SUPERVISOR_MODE flag requests a PASID which can be used only > - * for access to kernel addresses. No IOTLB flushes are automatically done > - * for kernel mappings; it is valid only for access to the kernel's static > - * 1:1 mapping of physical memory — not to vmalloc or even module mappings. > - * A future API addition may permit the use of such ranges, by means of an > - * explicit IOTLB flush call (akin to the DMA API's unmap method). > - * > - * It is unlikely that we will ever hook into flush_tlb_kernel_range() to > - * do such IOTLB flushes automatically. > - */ > -#define SVM_FLAG_SUPERVISOR_MODE BIT(0) > - > #endif /* __INTEL_SVM_H__ */ > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > index da423e87f248..0c358b7c583b 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -243,8 +243,7 @@ struct iommu_ops { > int (*dev_enable_feat)(struct device *dev, enum iommu_dev_features f); > int (*dev_disable_feat)(struct device *dev, enum iommu_dev_features f); > > - struct iommu_sva *(*sva_bind)(struct device *dev, struct mm_struct *mm, > - void *drvdata); > + struct iommu_sva *(*sva_bind)(struct device *dev, struct mm_struct *mm); > void (*sva_unbind)(struct iommu_sva *handle); > u32 (*sva_get_pasid)(struct iommu_sva *handle); > > @@ -667,8 +666,7 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features f); > bool iommu_dev_feature_enabled(struct device *dev, enum iommu_dev_features f); > > struct iommu_sva *iommu_sva_bind_device(struct device *dev, > - struct mm_struct *mm, > - void *drvdata); > + struct mm_struct *mm); > void iommu_sva_unbind_device(struct iommu_sva *handle); > u32 iommu_sva_get_pasid(struct iommu_sva *handle); > > @@ -1010,7 +1008,7 @@ iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat) > } > > static inline struct iommu_sva * > -iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, void *drvdata) > +iommu_sva_bind_device(struct device *dev, struct mm_struct *mm) > { > return NULL; > } > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h > index cd48590ada30..d2ba86470c42 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h > @@ -754,8 +754,7 @@ bool arm_smmu_master_sva_enabled(struct arm_smmu_master *master); > int arm_smmu_master_enable_sva(struct arm_smmu_master *master); > int arm_smmu_master_disable_sva(struct arm_smmu_master *master); > bool arm_smmu_master_iopf_supported(struct arm_smmu_master *master); > -struct iommu_sva *arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm, > - void *drvdata); > +struct iommu_sva *arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm); > void arm_smmu_sva_unbind(struct iommu_sva *handle); > u32 arm_smmu_sva_get_pasid(struct iommu_sva *handle); > void arm_smmu_sva_notifier_synchronize(void); > @@ -791,7 +790,7 @@ static inline bool arm_smmu_master_iopf_supported(struct arm_smmu_master *master > } > > static inline struct iommu_sva * > -arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm, void *drvdata) > +arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm) > { > return ERR_PTR(-ENODEV); > } > diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c > index b9b2b4a4124e..312ec37ebf91 100644 > --- a/drivers/dma/idxd/cdev.c > +++ b/drivers/dma/idxd/cdev.c > @@ -100,7 +100,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp) > filp->private_data = ctx; > > if (device_pasid_enabled(idxd)) { > - sva = iommu_sva_bind_device(dev, current->mm, NULL); > + sva = iommu_sva_bind_device(dev, current->mm); > if (IS_ERR(sva)) { > rc = PTR_ERR(sva); > dev_err(dev, "pasid allocation failed: %d\n", rc); > diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c > index 993a5dcca24f..1fd80c63248a 100644 > --- a/drivers/dma/idxd/init.c > +++ b/drivers/dma/idxd/init.c > @@ -466,29 +466,7 @@ static struct idxd_device *idxd_alloc(struct pci_dev *pdev, struct idxd_driver_d > > static int idxd_enable_system_pasid(struct idxd_device *idxd) > { > - int flags; > - unsigned int pasid; > - struct iommu_sva *sva; > - > - flags = SVM_FLAG_SUPERVISOR_MODE; > - > - sva = iommu_sva_bind_device(&idxd->pdev->dev, NULL, &flags); > - if (IS_ERR(sva)) { > - dev_warn(&idxd->pdev->dev, > - "iommu sva bind failed: %ld\n", PTR_ERR(sva)); > - return PTR_ERR(sva); > - } > - > - pasid = iommu_sva_get_pasid(sva); > - if (pasid == IOMMU_PASID_INVALID) { > - iommu_sva_unbind_device(sva); > - return -ENODEV; > - } > - > - idxd->sva = sva; > - idxd->pasid = pasid; > - dev_dbg(&idxd->pdev->dev, "system pasid: %u\n", pasid); > - return 0; > + return -EOPNOTSUPP; > } > > static void idxd_disable_system_pasid(struct idxd_device *idxd) > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c > index 1ef7bbb4acf3..f155d406c5d5 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c > @@ -367,8 +367,7 @@ __arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm) > return ERR_PTR(ret); > } > > -struct iommu_sva * > -arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm, void *drvdata) > +struct iommu_sva *arm_smmu_sva_bind(struct device *dev, struct mm_struct *mm) > { > struct iommu_sva *handle; > struct iommu_domain *domain = iommu_get_domain_for_dev(dev); > diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c > index 7ee37d996e15..d04880a291c3 100644 > --- a/drivers/iommu/intel/svm.c > +++ b/drivers/iommu/intel/svm.c > @@ -313,8 +313,7 @@ static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid, > return 0; > } > > -static int intel_svm_alloc_pasid(struct device *dev, struct mm_struct *mm, > - unsigned int flags) > +static int intel_svm_alloc_pasid(struct device *dev, struct mm_struct *mm) > { > ioasid_t max_pasid = dev_is_pci(dev) ? > pci_max_pasids(to_pci_dev(dev)) : intel_pasid_max_id; > @@ -324,8 +323,7 @@ static int intel_svm_alloc_pasid(struct device *dev, struct mm_struct *mm, > > static struct iommu_sva *intel_svm_bind_mm(struct intel_iommu *iommu, > struct device *dev, > - struct mm_struct *mm, > - unsigned int flags) > + struct mm_struct *mm) > { > struct device_domain_info *info = dev_iommu_priv_get(dev); > unsigned long iflags, sflags; > @@ -341,22 +339,18 @@ static struct iommu_sva *intel_svm_bind_mm(struct intel_iommu *iommu, > > svm->pasid = mm->pasid; > svm->mm = mm; > - svm->flags = flags; > INIT_LIST_HEAD_RCU(&svm->devs); > > - if (!(flags & SVM_FLAG_SUPERVISOR_MODE)) { > - svm->notifier.ops = &intel_mmuops; > - ret = mmu_notifier_register(&svm->notifier, mm); > - if (ret) { > - kfree(svm); > - return ERR_PTR(ret); > - } > + svm->notifier.ops = &intel_mmuops; > + ret = mmu_notifier_register(&svm->notifier, mm); > + if (ret) { > + kfree(svm); > + return ERR_PTR(ret); > } > > ret = pasid_private_add(svm->pasid, svm); > if (ret) { > - if (svm->notifier.ops) > - mmu_notifier_unregister(&svm->notifier, mm); > + mmu_notifier_unregister(&svm->notifier, mm); > kfree(svm); > return ERR_PTR(ret); > } > @@ -391,9 +385,7 @@ static struct iommu_sva *intel_svm_bind_mm(struct intel_iommu *iommu, > } > > /* Setup the pasid table: */ > - sflags = (flags & SVM_FLAG_SUPERVISOR_MODE) ? > - PASID_FLAG_SUPERVISOR_MODE : 0; > - sflags |= cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0; > + sflags = cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0; > spin_lock_irqsave(&iommu->lock, iflags); > ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid, > FLPT_DEFAULT_DID, sflags); > @@ -410,8 +402,7 @@ static struct iommu_sva *intel_svm_bind_mm(struct intel_iommu *iommu, > kfree(sdev); > free_svm: > if (list_empty(&svm->devs)) { > - if (svm->notifier.ops) > - mmu_notifier_unregister(&svm->notifier, mm); > + mmu_notifier_unregister(&svm->notifier, mm); > pasid_private_remove(mm->pasid); > kfree(svm); > } > @@ -767,7 +758,7 @@ static irqreturn_t prq_event_thread(int irq, void *d) > * to unbind the mm while any page faults are outstanding. > */ > svm = pasid_private_find(req->pasid); > - if (IS_ERR_OR_NULL(svm) || (svm->flags & SVM_FLAG_SUPERVISOR_MODE)) > + if (IS_ERR_OR_NULL(svm)) > goto bad_req; > } > > @@ -818,40 +809,20 @@ static irqreturn_t prq_event_thread(int irq, void *d) > return IRQ_RETVAL(handled); > } > > -struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm, void *drvdata) > +struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm) > { > struct intel_iommu *iommu = device_to_iommu(dev, NULL, NULL); > - unsigned int flags = 0; > struct iommu_sva *sva; > int ret; > > - if (drvdata) > - flags = *(unsigned int *)drvdata; > - > - if (flags & SVM_FLAG_SUPERVISOR_MODE) { > - if (!ecap_srs(iommu->ecap)) { > - dev_err(dev, "%s: Supervisor PASID not supported\n", > - iommu->name); > - return ERR_PTR(-EOPNOTSUPP); > - } > - > - if (mm) { > - dev_err(dev, "%s: Supervisor PASID with user provided mm\n", > - iommu->name); > - return ERR_PTR(-EINVAL); > - } > - > - mm = &init_mm; > - } > - > mutex_lock(&pasid_mutex); > - ret = intel_svm_alloc_pasid(dev, mm, flags); > + ret = intel_svm_alloc_pasid(dev, mm); > if (ret) { > mutex_unlock(&pasid_mutex); > return ERR_PTR(ret); > } > > - sva = intel_svm_bind_mm(iommu, dev, mm, flags); > + sva = intel_svm_bind_mm(iommu, dev, mm); > mutex_unlock(&pasid_mutex); > > return sva; > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c > index 847ad47a2dfd..9955f58bd08c 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -2768,7 +2768,6 @@ EXPORT_SYMBOL_GPL(iommu_dev_feature_enabled); > * iommu_sva_bind_device() - Bind a process address space to a device > * @dev: the device > * @mm: the mm to bind, caller must hold a reference to it > - * @drvdata: opaque data pointer to pass to bind callback > * > * Create a bond between device and address space, allowing the device to access > * the mm using the returned PASID. If a bond already exists between @device and > @@ -2781,7 +2780,7 @@ EXPORT_SYMBOL_GPL(iommu_dev_feature_enabled); > * On error, returns an ERR_PTR value. > */ > struct iommu_sva * > -iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, void *drvdata) > +iommu_sva_bind_device(struct device *dev, struct mm_struct *mm) > { > struct iommu_group *group; > struct iommu_sva *handle = ERR_PTR(-EINVAL); > @@ -2806,7 +2805,7 @@ iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, void *drvdata) > if (iommu_group_device_count(group) != 1) > goto out_unlock; > > - handle = ops->sva_bind(dev, mm, drvdata); > + handle = ops->sva_bind(dev, mm); > > out_unlock: > mutex_unlock(&group->mutex); > diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c > index 281c54003edc..3238a867ea51 100644 > --- a/drivers/misc/uacce/uacce.c > +++ b/drivers/misc/uacce/uacce.c > @@ -99,7 +99,7 @@ static int uacce_bind_queue(struct uacce_device *uacce, struct uacce_queue *q) > if (!(uacce->flags & UACCE_DEV_SVA)) > return 0; > > - handle = iommu_sva_bind_device(uacce->parent, current->mm, NULL); > + handle = iommu_sva_bind_device(uacce->parent, current->mm); > if (IS_ERR(handle)) > return PTR_ERR(handle); > > -- > 2.25.1 > 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id AE3A9C433EF for ; Thu, 19 May 2022 16:23:07 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 580E384179; Thu, 19 May 2022 16:23:07 +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 I-WOKEM7aNGE; Thu, 19 May 2022 16:23:06 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 933E08417B; Thu, 19 May 2022 16:23:05 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5C167C0039; Thu, 19 May 2022 16:23:05 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id E4379C002D for ; Thu, 19 May 2022 16:23:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id D266F41D53 for ; Thu, 19 May 2022 16:23:03 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=linaro.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZBFVirtMdd15 for ; Thu, 19 May 2022 16:23:01 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from mail-ot1-x330.google.com (mail-ot1-x330.google.com [IPv6:2607:f8b0:4864:20::330]) by smtp4.osuosl.org (Postfix) with ESMTPS id C0CEA41B61 for ; Thu, 19 May 2022 16:23:01 +0000 (UTC) Received: by mail-ot1-x330.google.com with SMTP id 30-20020a9d0121000000b0060ae97b9967so827432otu.7 for ; Thu, 19 May 2022 09:23:01 -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=FH62jo+EKH6+RD9QF22HzUqg98s8nrMbRi4L1X0I39o=; b=Q5PfGDYn1550gh3IUaPfmMJIE7R/amM5GS+Pf+cehuzH4nFe0MbqaBdHUj/cmeOQZq /9J4V0yXplZ8yQo2YUfXyVZIb0PHeeilNF4tUph+KZuoy8dFvthNSSiZUnFsWJibHWTT FggDJ+BV9Ncxl0K1aZv/7eOcIcU1SFsKuFHyyjESGiZoIX7eWBQmthLAHSt1vr2zBMMs EB27nMwbqGQMdgvSIn32skO/sg3M9T7B7sOCzYbvkm57s0+0ahAxv6sN4g7senlq23F4 Ar8ajVk6qqyuafvxkvOORhPUIXzV1WjoBSgtF+32uYFa5jPTjzkA1Vq1KCzsXMaHCZ9n yARw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=FH62jo+EKH6+RD9QF22HzUqg98s8nrMbRi4L1X0I39o=; b=pKHFi0aoKG1ozNP2ZW2/s/uIXA7u48KFPUQxFq4HhzeuWaUPa+/sBkcrR3vkNG96Cb l+y2e+umMArnTTFSm3ZCHzavcZtqpEhQpzR3DChjrsdyv3sIQB/+zye9UOGmX9lWe7on SoVWYkRoUpbDY95/bUjb7hgzJPB6WAkjxyAWO14Cz+M/81IqJXQBdgbtF+UeZPV5jLsv +XnykP6sLmXJzkkO/tyYmSsHLSVw6utEpZx7gfYl3gGkD9jZMzIpmp4I2/gfzHb7RSQl mTFufuj5V2Eo33xJuksuojrENJnMJqoaRG6xFVHSHdOKFwQqjUwy8kX3tZKHAZd+jYsj Z8jA== X-Gm-Message-State: AOAM532zBm2J4IBtbP6DdxIxHOCR+pQZtPKoJuYAWE2bgs99XcelUSaB tsaI1PRB1K9CM+louUqIEf7bUg== X-Google-Smtp-Source: ABdhPJxCny9lOE2miioKiQa404DPecVP/dLlqgdhKU9ocG+45FV+tw9TBBdTqR89UNQlnrhKLqD3eQ== X-Received: by 2002:a05:6830:1219:b0:606:1c66:8441 with SMTP id r25-20020a056830121900b006061c668441mr2208098otp.177.1652977380614; Thu, 19 May 2022 09:23:00 -0700 (PDT) Received: from myrica (cpc92880-cmbg19-2-0-cust679.5-4.cable.virginm.net. [82.27.106.168]) by smtp.gmail.com with ESMTPSA id f21-20020a9d6c15000000b0060aea5bbc87sm305901otq.18.2022.05.19.09.22.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 09:23:00 -0700 (PDT) Date: Thu, 19 May 2022 17:22:32 +0100 From: Jean-Philippe Brucker To: Lu Baolu Subject: Re: [PATCH v7 02/10] iommu: Remove SVM_FLAG_SUPERVISOR_MODE support Message-ID: References: <20220519072047.2996983-1-baolu.lu@linux.intel.com> <20220519072047.2996983-3-baolu.lu@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220519072047.2996983-3-baolu.lu@linux.intel.com> X-TUID: q1Um/XayDwOJ Cc: Kevin Tian , Dave Jiang , Ashok Raj , Robin Murphy , iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Christoph Hellwig , Jean-Philippe Brucker , Vinod Koul , Jacob jun Pan , Jason Gunthorpe , Will Deacon 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" T24gVGh1LCBNYXkgMTksIDIwMjIgYXQgMDM6MjA6MzlQTSArMDgwMCwgTHUgQmFvbHUgd3JvdGU6 Cj4gVGhlIGN1cnJlbnQga2VybmVsIERNQSB3aXRoIFBBU0lEIHN1cHBvcnQgaXMgYmFzZWQgb24g dGhlIFNWQSB3aXRoIGEgZmxhZwo+IFNWTV9GTEFHX1NVUEVSVklTT1JfTU9ERS4gVGhlIElPTU1V IGRyaXZlciBiaW5kcyB0aGUga2VybmVsIG1lbW9yeSBhZGRyZXNzCj4gc3BhY2UgdG8gYSBQQVNJ RCBvZiB0aGUgZGV2aWNlLiBUaGUgZGV2aWNlIGRyaXZlciBwcm9ncmFtcyB0aGUgZGV2aWNlIHdp dGgKPiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIChLVkEpIGZvciBETUEgYWNjZXNzLiBUaGVyZSBo YXZlIGJlZW4gc2VjdXJpdHkgYW5kCj4gZnVuY3Rpb25hbCBpc3N1ZXMgd2l0aCB0aGlzIGFwcHJv YWNoOgo+IAo+IC0gVGhlIGxhY2sgb2YgSU9UTEIgc3luY2hyb25pemF0aW9uIHVwb24ga2VybmVs IHBhZ2UgdGFibGUgdXBkYXRlcy4KPiAgICh2bWFsbG9jLCBtb2R1bGUvQlBGIGxvYWRpbmcsIENP TkZJR19ERUJVR19QQUdFQUxMT0MgZXRjLikKPiAtIE90aGVyIHRoYW4gc2xpZ2h0IG1vcmUgcHJv dGVjdGlvbiwgdXNpbmcga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoS1ZBKQo+ICAgaGFzIGxpdHRs ZSBhZHZhbnRhZ2Ugb3ZlciBwaHlzaWNhbCBhZGRyZXNzLiBUaGVyZSBhcmUgYWxzbyBubyB1c2UK PiAgIGNhc2VzIHlldCB3aGVyZSBETUEgZW5naW5lcyBuZWVkIGtlcm5lbCB2aXJ0dWFsIGFkZHJl c3NlcyBmb3IgaW4ta2VybmVsCj4gICBETUEuCj4gCj4gVGhpcyByZW1vdmVzIFNWTV9GTEFHX1NV UEVSVklTT1JfTU9ERSBzdXBwb3J0IGZyb20gdGhlIElPTU1VIGludGVyZmFjZS4KPiBUaGUgZGV2 aWNlIGRyaXZlcnMgYXJlIHN1Z2dlc3RlZCB0byBoYW5kbGUga2VybmVsIERNQSB3aXRoIFBBU0lE IHRocm91Z2gKPiB0aGUga2VybmVsIERNQSBBUElzLgo+IAo+IFRoZSBkcnZkYXRhIHBhcmFtZXRl ciBpbiBpb21tdV9zdmFfYmluZF9kZXZpY2UoKSBhbmQgYWxsIGNhbGxiYWNrcyBpcyBub3QKPiBu ZWVkZWQgYW55bW9yZS4gQ2xlYW51cCB0aGVtIGFzIHdlbGwuCj4gCj4gTGluazogaHR0cHM6Ly9s b3JlLmtlcm5lbC5vcmcvbGludXgtaW9tbXUvMjAyMTA1MTExOTQ3MjYuR1AxMDAyMjE0QG52aWRp YS5jb20vCj4gU2lnbmVkLW9mZi1ieTogSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4Lmlu dGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBMdSBCYW9sdSA8YmFvbHUubHVAbGludXguaW50ZWwu Y29tPgo+IFJldmlld2VkLWJ5OiBKYXNvbiBHdW50aG9ycGUgPGpnZ0BudmlkaWEuY29tPgoKRm9y IHRoZSBTTU1VIGJpdHMKClJldmlld2VkLWJ5OiBKZWFuLVBoaWxpcHBlIEJydWNrZXIgPGplYW4t cGhpbGlwcGVAbGluYXJvLm9yZz4KCj4gLS0tCj4gIGluY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUu aCAgICAgICAgICAgICAgICAgICB8ICAzICstCj4gIGluY2x1ZGUvbGludXgvaW50ZWwtc3ZtLmgg ICAgICAgICAgICAgICAgICAgICB8IDEzIC0tLS0tCj4gIGluY2x1ZGUvbGludXgvaW9tbXUuaCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICstLQo+ICBkcml2ZXJzL2lvbW11L2FybS9hcm0t c21tdS12My9hcm0tc21tdS12My5oICAgfCAgNSArLQo+ICBkcml2ZXJzL2RtYS9pZHhkL2NkZXYu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQo+ICBkcml2ZXJzL2RtYS9pZHhkL2luaXQu YyAgICAgICAgICAgICAgICAgICAgICAgfCAyNCArLS0tLS0tLQo+ICAuLi4vaW9tbXUvYXJtL2Fy bS1zbW11LXYzL2FybS1zbW11LXYzLXN2YS5jICAgfCAgMyArLQoKPiAgZHJpdmVycy9pb21tdS9p bnRlbC9zdm0uYyAgICAgICAgICAgICAgICAgICAgIHwgNTcgKysrKystLS0tLS0tLS0tLS0tLQo+ ICBkcml2ZXJzL2lvbW11L2lvbW11LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArLQo+ ICBkcml2ZXJzL21pc2MvdWFjY2UvdWFjY2UuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQo+ ICAxMCBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCA5NiBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51 eC9pbnRlbC1pb21tdS5oCj4gaW5kZXggNGYyOTEzOWJiZmMzLi5kZjIzMzAwY2ZhODggMTAwNjQ0 Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCj4gKysrIGIvaW5jbHVkZS9saW51 eC9pbnRlbC1pb21tdS5oCj4gQEAgLTczOSw4ICs3MzksNyBAQCBzdHJ1Y3QgaW50ZWxfaW9tbXUg KmRldmljZV90b19pb21tdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpidXMsIHU4ICpkZXZmbik7 Cj4gIGV4dGVybiB2b2lkIGludGVsX3N2bV9jaGVjayhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11 KTsKPiAgZXh0ZXJuIGludCBpbnRlbF9zdm1fZW5hYmxlX3BycShzdHJ1Y3QgaW50ZWxfaW9tbXUg KmlvbW11KTsKPiAgZXh0ZXJuIGludCBpbnRlbF9zdm1fZmluaXNoX3BycShzdHJ1Y3QgaW50ZWxf aW9tbXUgKmlvbW11KTsKPiAtc3RydWN0IGlvbW11X3N2YSAqaW50ZWxfc3ZtX2JpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCSB2b2lkICpkcnZkYXRh KTsKPiArc3RydWN0IGlvbW11X3N2YSAqaW50ZWxfc3ZtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cj4gIHZvaWQgaW50ZWxfc3ZtX3VuYmluZChzdHJ1Y3Qg aW9tbXVfc3ZhICpoYW5kbGUpOwo+ICB1MzIgaW50ZWxfc3ZtX2dldF9wYXNpZChzdHJ1Y3QgaW9t bXVfc3ZhICpoYW5kbGUpOwo+ICBpbnQgaW50ZWxfc3ZtX3BhZ2VfcmVzcG9uc2Uoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZmF1bHRfZXZlbnQgKmV2dCwKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9pbnRlbC1zdm0uaCBiL2luY2x1ZGUvbGludXgvaW50ZWwtc3ZtLmgKPiBp bmRleCAyMDdlZjA2YmEzZTEuLmY5YTBkNDRmNmZkYiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xp bnV4L2ludGVsLXN2bS5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1zdm0uaAo+IEBAIC0x MywxNyArMTMsNCBAQAo+ICAjZGVmaW5lIFBSUV9SSU5HX01BU0sJKCgweDEwMDAgPDwgUFJRX09S REVSKSAtIDB4MjApCj4gICNkZWZpbmUgUFJRX0RFUFRICSgoMHgxMDAwIDw8IFBSUV9PUkRFUikg Pj4gNSkKPiAgCj4gLS8qCj4gLSAqIFRoZSBTVk1fRkxBR19TVVBFUlZJU09SX01PREUgZmxhZyBy ZXF1ZXN0cyBhIFBBU0lEIHdoaWNoIGNhbiBiZSB1c2VkIG9ubHkKPiAtICogZm9yIGFjY2VzcyB0 byBrZXJuZWwgYWRkcmVzc2VzLiBObyBJT1RMQiBmbHVzaGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRv bmUKPiAtICogZm9yIGtlcm5lbCBtYXBwaW5nczsgaXQgaXMgdmFsaWQgb25seSBmb3IgYWNjZXNz IHRvIHRoZSBrZXJuZWwncyBzdGF0aWMKPiAtICogMToxIG1hcHBpbmcgb2YgcGh5c2ljYWwgbWVt b3J5IOKAlCBub3QgdG8gdm1hbGxvYyBvciBldmVuIG1vZHVsZSBtYXBwaW5ncy4KPiAtICogQSBm dXR1cmUgQVBJIGFkZGl0aW9uIG1heSBwZXJtaXQgdGhlIHVzZSBvZiBzdWNoIHJhbmdlcywgYnkg bWVhbnMgb2YgYW4KPiAtICogZXhwbGljaXQgSU9UTEIgZmx1c2ggY2FsbCAoYWtpbiB0byB0aGUg RE1BIEFQSSdzIHVubWFwIG1ldGhvZCkuCj4gLSAqCj4gLSAqIEl0IGlzIHVubGlrZWx5IHRoYXQg d2Ugd2lsbCBldmVyIGhvb2sgaW50byBmbHVzaF90bGJfa2VybmVsX3JhbmdlKCkgdG8KPiAtICog ZG8gc3VjaCBJT1RMQiBmbHVzaGVzIGF1dG9tYXRpY2FsbHkuCj4gLSAqLwo+IC0jZGVmaW5lIFNW TV9GTEFHX1NVUEVSVklTT1JfTU9ERQlCSVQoMCkKPiAtCj4gICNlbmRpZiAvKiBfX0lOVEVMX1NW TV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS5oIGIvaW5jbHVkZS9s aW51eC9pb21tdS5oCj4gaW5kZXggZGE0MjNlODdmMjQ4Li4wYzM1OGI3YzU4M2IgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9saW51eC9pb21tdS5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS5o Cj4gQEAgLTI0Myw4ICsyNDMsNyBAQCBzdHJ1Y3QgaW9tbXVfb3BzIHsKPiAgCWludCAoKmRldl9l bmFibGVfZmVhdCkoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGlvbW11X2Rldl9mZWF0dXJlcyBm KTsKPiAgCWludCAoKmRldl9kaXNhYmxlX2ZlYXQpKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBp b21tdV9kZXZfZmVhdHVyZXMgZik7Cj4gIAo+IC0Jc3RydWN0IGlvbW11X3N2YSAqKCpzdmFfYmlu ZCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCSAgICAg IHZvaWQgKmRydmRhdGEpOwo+ICsJc3RydWN0IGlvbW11X3N2YSAqKCpzdmFfYmluZCkoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cj4gIAl2b2lkICgqc3ZhX3VuYmlu ZCkoc3RydWN0IGlvbW11X3N2YSAqaGFuZGxlKTsKPiAgCXUzMiAoKnN2YV9nZXRfcGFzaWQpKHN0 cnVjdCBpb21tdV9zdmEgKmhhbmRsZSk7Cj4gIAo+IEBAIC02NjcsOCArNjY2LDcgQEAgaW50IGlv bW11X2Rldl9kaXNhYmxlX2ZlYXR1cmUoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGlvbW11X2Rl dl9mZWF0dXJlcyBmKTsKPiAgYm9vbCBpb21tdV9kZXZfZmVhdHVyZV9lbmFibGVkKHN0cnVjdCBk ZXZpY2UgKmRldiwgZW51bSBpb21tdV9kZXZfZmVhdHVyZXMgZik7Cj4gIAo+ICBzdHJ1Y3QgaW9t bXVfc3ZhICppb21tdV9zdmFfYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCQkJ CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IC0JCQkJCXZvaWQgKmRydmRhdGEpOwo+ICsJCQkJCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKPiAgdm9pZCBpb21tdV9zdmFfdW5iaW5kX2RldmljZShzdHJ1 Y3QgaW9tbXVfc3ZhICpoYW5kbGUpOwo+ICB1MzIgaW9tbXVfc3ZhX2dldF9wYXNpZChzdHJ1Y3Qg aW9tbXVfc3ZhICpoYW5kbGUpOwo+ICAKPiBAQCAtMTAxMCw3ICsxMDA4LDcgQEAgaW9tbXVfZGV2 X2Rpc2FibGVfZmVhdHVyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaW9tbXVfZGV2X2ZlYXR1 cmVzIGZlYXQpCj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbW11X3N2YSAqCj4g LWlvbW11X3N2YV9iaW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tLCB2b2lkICpkcnZkYXRhKQo+ICtpb21tdV9zdmFfYmluZF9kZXZpY2Uoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgewo+ICAJcmV0dXJuIE5VTEw7Cj4g IH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUt djMuaCBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmgKPiBpbmRl eCBjZDQ4NTkwYWRhMzAuLmQyYmE4NjQ3MGM0MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2lvbW11 L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5oCj4gKysrIGIvZHJpdmVycy9pb21tdS9hcm0v YXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMuaAo+IEBAIC03NTQsOCArNzU0LDcgQEAgYm9vbCBhcm1f c21tdV9tYXN0ZXJfc3ZhX2VuYWJsZWQoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyKTsK PiAgaW50IGFybV9zbW11X21hc3Rlcl9lbmFibGVfc3ZhKHN0cnVjdCBhcm1fc21tdV9tYXN0ZXIg Km1hc3Rlcik7Cj4gIGludCBhcm1fc21tdV9tYXN0ZXJfZGlzYWJsZV9zdmEoc3RydWN0IGFybV9z bW11X21hc3RlciAqbWFzdGVyKTsKPiAgYm9vbCBhcm1fc21tdV9tYXN0ZXJfaW9wZl9zdXBwb3J0 ZWQoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyKTsKPiAtc3RydWN0IGlvbW11X3N2YSAq YXJtX3NtbXVfc3ZhX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpt bSwKPiAtCQkJCSAgICB2b2lkICpkcnZkYXRhKTsKPiArc3RydWN0IGlvbW11X3N2YSAqYXJtX3Nt bXVfc3ZhX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cj4g IHZvaWQgYXJtX3NtbXVfc3ZhX3VuYmluZChzdHJ1Y3QgaW9tbXVfc3ZhICpoYW5kbGUpOwo+ICB1 MzIgYXJtX3NtbXVfc3ZhX2dldF9wYXNpZChzdHJ1Y3QgaW9tbXVfc3ZhICpoYW5kbGUpOwo+ICB2 b2lkIGFybV9zbW11X3N2YV9ub3RpZmllcl9zeW5jaHJvbml6ZSh2b2lkKTsKPiBAQCAtNzkxLDcg Kzc5MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcm1fc21tdV9tYXN0ZXJfaW9wZl9zdXBwb3J0 ZWQoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyCj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxp bmUgc3RydWN0IGlvbW11X3N2YSAqCj4gLWFybV9zbW11X3N2YV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgKmRydmRhdGEpCj4gK2FybV9zbW11X3N2 YV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gIHsKPiAg CXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h L2lkeGQvY2Rldi5jIGIvZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmMKPiBpbmRleCBiOWIyYjRhNDEy NGUuLjMxMmVjMzdlYmY5MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYwo+ ICsrKyBiL2RyaXZlcnMvZG1hL2lkeGQvY2Rldi5jCj4gQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0 aWMgaW50IGlkeGRfY2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpm aWxwKQo+ICAJZmlscC0+cHJpdmF0ZV9kYXRhID0gY3R4Owo+ICAKPiAgCWlmIChkZXZpY2VfcGFz aWRfZW5hYmxlZChpZHhkKSkgewo+IC0JCXN2YSA9IGlvbW11X3N2YV9iaW5kX2RldmljZShkZXYs IGN1cnJlbnQtPm1tLCBOVUxMKTsKPiArCQlzdmEgPSBpb21tdV9zdmFfYmluZF9kZXZpY2UoZGV2 LCBjdXJyZW50LT5tbSk7Cj4gIAkJaWYgKElTX0VSUihzdmEpKSB7Cj4gIAkJCXJjID0gUFRSX0VS UihzdmEpOwo+ICAJCQlkZXZfZXJyKGRldiwgInBhc2lkIGFsbG9jYXRpb24gZmFpbGVkOiAlZFxu IiwgcmMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pZHhkL2luaXQuYyBiL2RyaXZlcnMv ZG1hL2lkeGQvaW5pdC5jCj4gaW5kZXggOTkzYTVkY2NhMjRmLi4xZmQ4MGM2MzI0OGEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9kbWEvaWR4ZC9pbml0LmMKPiArKysgYi9kcml2ZXJzL2RtYS9pZHhk L2luaXQuYwo+IEBAIC00NjYsMjkgKzQ2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWR4ZF9kZXZpY2Ug KmlkeGRfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpZHhkX2RyaXZlcl9kCj4g IAo+ICBzdGF0aWMgaW50IGlkeGRfZW5hYmxlX3N5c3RlbV9wYXNpZChzdHJ1Y3QgaWR4ZF9kZXZp Y2UgKmlkeGQpCj4gIHsKPiAtCWludCBmbGFnczsKPiAtCXVuc2lnbmVkIGludCBwYXNpZDsKPiAt CXN0cnVjdCBpb21tdV9zdmEgKnN2YTsKPiAtCj4gLQlmbGFncyA9IFNWTV9GTEFHX1NVUEVSVklT T1JfTU9ERTsKPiAtCj4gLQlzdmEgPSBpb21tdV9zdmFfYmluZF9kZXZpY2UoJmlkeGQtPnBkZXYt PmRldiwgTlVMTCwgJmZsYWdzKTsKPiAtCWlmIChJU19FUlIoc3ZhKSkgewo+IC0JCWRldl93YXJu KCZpZHhkLT5wZGV2LT5kZXYsCj4gLQkJCSAiaW9tbXUgc3ZhIGJpbmQgZmFpbGVkOiAlbGRcbiIs IFBUUl9FUlIoc3ZhKSk7Cj4gLQkJcmV0dXJuIFBUUl9FUlIoc3ZhKTsKPiAtCX0KPiAtCj4gLQlw YXNpZCA9IGlvbW11X3N2YV9nZXRfcGFzaWQoc3ZhKTsKPiAtCWlmIChwYXNpZCA9PSBJT01NVV9Q QVNJRF9JTlZBTElEKSB7Cj4gLQkJaW9tbXVfc3ZhX3VuYmluZF9kZXZpY2Uoc3ZhKTsKPiAtCQly ZXR1cm4gLUVOT0RFVjsKPiAtCX0KPiAtCj4gLQlpZHhkLT5zdmEgPSBzdmE7Cj4gLQlpZHhkLT5w YXNpZCA9IHBhc2lkOwo+IC0JZGV2X2RiZygmaWR4ZC0+cGRldi0+ZGV2LCAic3lzdGVtIHBhc2lk OiAldVxuIiwgcGFzaWQpOwo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIGlkeGRfZGlzYWJsZV9zeXN0ZW1fcGFzaWQoc3RydWN0IGlk eGRfZGV2aWNlICppZHhkKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21t dS12My9hcm0tc21tdS12My1zdmEuYyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2Fy bS1zbW11LXYzLXN2YS5jCj4gaW5kZXggMWVmN2JiYjRhY2YzLi5mMTU1ZDQwNmM1ZDUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMtc3ZhLmMK PiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My1zdmEuYwo+ IEBAIC0zNjcsOCArMzY3LDcgQEAgX19hcm1fc21tdV9zdmFfYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+ ICAKPiAtc3RydWN0IGlvbW11X3N2YSAqCj4gLWFybV9zbW11X3N2YV9iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgKmRydmRhdGEpCj4gK3N0cnVjdCBp b21tdV9zdmEgKmFybV9zbW11X3N2YV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1t X3N0cnVjdCAqbW0pCj4gIHsKPiAgCXN0cnVjdCBpb21tdV9zdmEgKmhhbmRsZTsKPiAgCXN0cnVj dCBpb21tdV9kb21haW4gKmRvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVsL3N2bS5jIGIvZHJpdmVycy9pb21tdS9p bnRlbC9zdm0uYwo+IGluZGV4IDdlZTM3ZDk5NmUxNS4uZDA0ODgwYTI5MWMzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwvc3ZtLmMKPiArKysgYi9kcml2ZXJzL2lvbW11L2ludGVs L3N2bS5jCj4gQEAgLTMxMyw4ICszMTMsNyBAQCBzdGF0aWMgaW50IHBhc2lkX3RvX3N2bV9zZGV2 KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBhc2lkLAo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfc3ZtX2FsbG9jX3Bhc2lkKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQo+ ICtzdGF0aWMgaW50IGludGVsX3N2bV9hbGxvY19wYXNpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICB7Cj4gIAlpb2FzaWRfdCBtYXhfcGFzaWQgPSBkZXZfaXNf cGNpKGRldikgPwo+ICAJCQlwY2lfbWF4X3Bhc2lkcyh0b19wY2lfZGV2KGRldikpIDogaW50ZWxf cGFzaWRfbWF4X2lkOwo+IEBAIC0zMjQsOCArMzIzLDcgQEAgc3RhdGljIGludCBpbnRlbF9zdm1f YWxsb2NfcGFzaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAg Cj4gIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfc3ZhICppbnRlbF9zdm1fYmluZF9tbShzdHJ1Y3QgaW50 ZWxfaW9tbXUgKmlvbW11LAo+ICAJCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldiwKPiAtCQkJCQkg ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4g KwkJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gIHsKPiAgCXN0cnVjdCBkZXZpY2VfZG9t YWluX2luZm8gKmluZm8gPSBkZXZfaW9tbXVfcHJpdl9nZXQoZGV2KTsKPiAgCXVuc2lnbmVkIGxv bmcgaWZsYWdzLCBzZmxhZ3M7Cj4gQEAgLTM0MSwyMiArMzM5LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qg aW9tbXVfc3ZhICppbnRlbF9zdm1fYmluZF9tbShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LAo+ ICAKPiAgCQlzdm0tPnBhc2lkID0gbW0tPnBhc2lkOwo+ICAJCXN2bS0+bW0gPSBtbTsKPiAtCQlz dm0tPmZsYWdzID0gZmxhZ3M7Cj4gIAkJSU5JVF9MSVNUX0hFQURfUkNVKCZzdm0tPmRldnMpOwo+ ICAKPiAtCQlpZiAoIShmbGFncyAmIFNWTV9GTEFHX1NVUEVSVklTT1JfTU9ERSkpIHsKPiAtCQkJ c3ZtLT5ub3RpZmllci5vcHMgPSAmaW50ZWxfbW11b3BzOwo+IC0JCQlyZXQgPSBtbXVfbm90aWZp ZXJfcmVnaXN0ZXIoJnN2bS0+bm90aWZpZXIsIG1tKTsKPiAtCQkJaWYgKHJldCkgewo+IC0JCQkJ a2ZyZWUoc3ZtKTsKPiAtCQkJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQkJCX0KPiArCQlzdm0t Pm5vdGlmaWVyLm9wcyA9ICZpbnRlbF9tbXVvcHM7Cj4gKwkJcmV0ID0gbW11X25vdGlmaWVyX3Jl Z2lzdGVyKCZzdm0tPm5vdGlmaWVyLCBtbSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlrZnJlZShz dm0pOwo+ICsJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAJCX0KPiAgCj4gIAkJcmV0ID0gcGFz aWRfcHJpdmF0ZV9hZGQoc3ZtLT5wYXNpZCwgc3ZtKTsKPiAgCQlpZiAocmV0KSB7Cj4gLQkJCWlm IChzdm0tPm5vdGlmaWVyLm9wcykKPiAtCQkJCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZzdm0t Pm5vdGlmaWVyLCBtbSk7Cj4gKwkJCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZzdm0tPm5vdGlm aWVyLCBtbSk7Cj4gIAkJCWtmcmVlKHN2bSk7Cj4gIAkJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g IAkJfQo+IEBAIC0zOTEsOSArMzg1LDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9zdmEgKmludGVs X3N2bV9iaW5kX21tKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsCj4gIAl9Cj4gIAo+ICAJLyog U2V0dXAgdGhlIHBhc2lkIHRhYmxlOiAqLwo+IC0Jc2ZsYWdzID0gKGZsYWdzICYgU1ZNX0ZMQUdf U1VQRVJWSVNPUl9NT0RFKSA/Cj4gLQkJCVBBU0lEX0ZMQUdfU1VQRVJWSVNPUl9NT0RFIDogMDsK PiAtCXNmbGFncyB8PSBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0xBNTcpID8gUEFT SURfRkxBR19GTDVMUCA6IDA7Cj4gKwlzZmxhZ3MgPSBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9G RUFUVVJFX0xBNTcpID8gUEFTSURfRkxBR19GTDVMUCA6IDA7Cj4gIAlzcGluX2xvY2tfaXJxc2F2 ZSgmaW9tbXUtPmxvY2ssIGlmbGFncyk7Cj4gIAlyZXQgPSBpbnRlbF9wYXNpZF9zZXR1cF9maXJz dF9sZXZlbChpb21tdSwgZGV2LCBtbS0+cGdkLCBtbS0+cGFzaWQsCj4gIAkJCQkJICAgIEZMUFRf REVGQVVMVF9ESUQsIHNmbGFncyk7Cj4gQEAgLTQxMCw4ICs0MDIsNyBAQCBzdGF0aWMgc3RydWN0 IGlvbW11X3N2YSAqaW50ZWxfc3ZtX2JpbmRfbW0oc3RydWN0IGludGVsX2lvbW11ICppb21tdSwK PiAgCWtmcmVlKHNkZXYpOwo+ICBmcmVlX3N2bToKPiAgCWlmIChsaXN0X2VtcHR5KCZzdm0tPmRl dnMpKSB7Cj4gLQkJaWYgKHN2bS0+bm90aWZpZXIub3BzKQo+IC0JCQltbXVfbm90aWZpZXJfdW5y ZWdpc3Rlcigmc3ZtLT5ub3RpZmllciwgbW0pOwo+ICsJCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVy KCZzdm0tPm5vdGlmaWVyLCBtbSk7Cj4gIAkJcGFzaWRfcHJpdmF0ZV9yZW1vdmUobW0tPnBhc2lk KTsKPiAgCQlrZnJlZShzdm0pOwo+ICAJfQo+IEBAIC03NjcsNyArNzU4LDcgQEAgc3RhdGljIGly cXJldHVybl90IHBycV9ldmVudF90aHJlYWQoaW50IGlycSwgdm9pZCAqZCkKPiAgCQkJICogdG8g dW5iaW5kIHRoZSBtbSB3aGlsZSBhbnkgcGFnZSBmYXVsdHMgYXJlIG91dHN0YW5kaW5nLgo+ICAJ CQkgKi8KPiAgCQkJc3ZtID0gcGFzaWRfcHJpdmF0ZV9maW5kKHJlcS0+cGFzaWQpOwo+IC0JCQlp ZiAoSVNfRVJSX09SX05VTEwoc3ZtKSB8fCAoc3ZtLT5mbGFncyAmIFNWTV9GTEFHX1NVUEVSVklT T1JfTU9ERSkpCj4gKwkJCWlmIChJU19FUlJfT1JfTlVMTChzdm0pKQo+ICAJCQkJZ290byBiYWRf cmVxOwo+ICAJCX0KPiAgCj4gQEAgLTgxOCw0MCArODA5LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5f dCBwcnFfZXZlbnRfdGhyZWFkKGludCBpcnEsIHZvaWQgKmQpCj4gIAlyZXR1cm4gSVJRX1JFVFZB TChoYW5kbGVkKTsKPiAgfQo+ICAKPiAtc3RydWN0IGlvbW11X3N2YSAqaW50ZWxfc3ZtX2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCAqZHJ2ZGF0YSkK PiArc3RydWN0IGlvbW11X3N2YSAqaW50ZWxfc3ZtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgewo+ICAJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9 IGRldmljZV90b19pb21tdShkZXYsIE5VTEwsIE5VTEwpOwo+IC0JdW5zaWduZWQgaW50IGZsYWdz ID0gMDsKPiAgCXN0cnVjdCBpb21tdV9zdmEgKnN2YTsKPiAgCWludCByZXQ7Cj4gIAo+IC0JaWYg KGRydmRhdGEpCj4gLQkJZmxhZ3MgPSAqKHVuc2lnbmVkIGludCAqKWRydmRhdGE7Cj4gLQo+IC0J aWYgKGZsYWdzICYgU1ZNX0ZMQUdfU1VQRVJWSVNPUl9NT0RFKSB7Cj4gLQkJaWYgKCFlY2FwX3Ny cyhpb21tdS0+ZWNhcCkpIHsKPiAtCQkJZGV2X2VycihkZXYsICIlczogU3VwZXJ2aXNvciBQQVNJ RCBub3Qgc3VwcG9ydGVkXG4iLAo+IC0JCQkJaW9tbXUtPm5hbWUpOwo+IC0JCQlyZXR1cm4gRVJS X1BUUigtRU9QTk9UU1VQUCk7Cj4gLQkJfQo+IC0KPiAtCQlpZiAobW0pIHsKPiAtCQkJZGV2X2Vy cihkZXYsICIlczogU3VwZXJ2aXNvciBQQVNJRCB3aXRoIHVzZXIgcHJvdmlkZWQgbW1cbiIsCj4g LQkJCQlpb21tdS0+bmFtZSk7Cj4gLQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+IC0JCX0K PiAtCj4gLQkJbW0gPSAmaW5pdF9tbTsKPiAtCX0KPiAtCj4gIAltdXRleF9sb2NrKCZwYXNpZF9t dXRleCk7Cj4gLQlyZXQgPSBpbnRlbF9zdm1fYWxsb2NfcGFzaWQoZGV2LCBtbSwgZmxhZ3MpOwo+ ICsJcmV0ID0gaW50ZWxfc3ZtX2FsbG9jX3Bhc2lkKGRldiwgbW0pOwo+ICAJaWYgKHJldCkgewo+ ICAJCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOwo+ICAJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gIAl9Cj4gIAo+IC0Jc3ZhID0gaW50ZWxfc3ZtX2JpbmRfbW0oaW9tbXUsIGRldiwgbW0sIGZs YWdzKTsKPiArCXN2YSA9IGludGVsX3N2bV9iaW5kX21tKGlvbW11LCBkZXYsIG1tKTsKPiAgCW11 dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgpOwo+ICAKPiAgCXJldHVybiBzdmE7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvaW9tbXUvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwo+IGluZGV4 IDg0N2FkNDdhMmRmZC4uOTk1NWY1OGJkMDhjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUv aW9tbXUuYwo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwo+IEBAIC0yNzY4LDcgKzI3Njgs NiBAQCBFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9kZXZfZmVhdHVyZV9lbmFibGVkKTsKPiAgICog aW9tbXVfc3ZhX2JpbmRfZGV2aWNlKCkgLSBCaW5kIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlIHRv IGEgZGV2aWNlCj4gICAqIEBkZXY6IHRoZSBkZXZpY2UKPiAgICogQG1tOiB0aGUgbW0gdG8gYmlu ZCwgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSB0byBpdAo+IC0gKiBAZHJ2ZGF0YTogb3Bh cXVlIGRhdGEgcG9pbnRlciB0byBwYXNzIHRvIGJpbmQgY2FsbGJhY2sKPiAgICoKPiAgICogQ3Jl YXRlIGEgYm9uZCBiZXR3ZWVuIGRldmljZSBhbmQgYWRkcmVzcyBzcGFjZSwgYWxsb3dpbmcgdGhl IGRldmljZSB0byBhY2Nlc3MKPiAgICogdGhlIG1tIHVzaW5nIHRoZSByZXR1cm5lZCBQQVNJRC4g SWYgYSBib25kIGFscmVhZHkgZXhpc3RzIGJldHdlZW4gQGRldmljZSBhbmQKPiBAQCAtMjc4MSw3 ICsyNzgwLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfZGV2X2ZlYXR1cmVfZW5hYmxlZCk7 Cj4gICAqIE9uIGVycm9yLCByZXR1cm5zIGFuIEVSUl9QVFIgdmFsdWUuCj4gICAqLwo+ICBzdHJ1 Y3QgaW9tbXVfc3ZhICoKPiAtaW9tbXVfc3ZhX2JpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgKmRydmRhdGEpCj4gK2lvbW11X3N2YV9iaW5k X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICB7Cj4g IAlzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwOwo+ICAJc3RydWN0IGlvbW11X3N2YSAqaGFuZGxl ID0gRVJSX1BUUigtRUlOVkFMKTsKPiBAQCAtMjgwNiw3ICsyODA1LDcgQEAgaW9tbXVfc3ZhX2Jp bmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQg KmRydmRhdGEpCj4gIAlpZiAoaW9tbXVfZ3JvdXBfZGV2aWNlX2NvdW50KGdyb3VwKSAhPSAxKQo+ ICAJCWdvdG8gb3V0X3VubG9jazsKPiAgCj4gLQloYW5kbGUgPSBvcHMtPnN2YV9iaW5kKGRldiwg bW0sIGRydmRhdGEpOwo+ICsJaGFuZGxlID0gb3BzLT5zdmFfYmluZChkZXYsIG1tKTsKPiAgCj4g IG91dF91bmxvY2s6Cj4gIAltdXRleF91bmxvY2soJmdyb3VwLT5tdXRleCk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWlzYy91YWNjZS91YWNjZS5jIGIvZHJpdmVycy9taXNjL3VhY2NlL3VhY2Nl LmMKPiBpbmRleCAyODFjNTQwMDNlZGMuLjMyMzhhODY3ZWE1MSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL21pc2MvdWFjY2UvdWFjY2UuYwo+ICsrKyBiL2RyaXZlcnMvbWlzYy91YWNjZS91YWNjZS5j Cj4gQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGludCB1YWNjZV9iaW5kX3F1ZXVlKHN0cnVjdCB1 YWNjZV9kZXZpY2UgKnVhY2NlLCBzdHJ1Y3QgdWFjY2VfcXVldWUgKnEpCj4gIAlpZiAoISh1YWNj ZS0+ZmxhZ3MgJiBVQUNDRV9ERVZfU1ZBKSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gLQloYW5kbGUg PSBpb21tdV9zdmFfYmluZF9kZXZpY2UodWFjY2UtPnBhcmVudCwgY3VycmVudC0+bW0sIE5VTEwp Owo+ICsJaGFuZGxlID0gaW9tbXVfc3ZhX2JpbmRfZGV2aWNlKHVhY2NlLT5wYXJlbnQsIGN1cnJl bnQtPm1tKTsKPiAgCWlmIChJU19FUlIoaGFuZGxlKSkKPiAgCQlyZXR1cm4gUFRSX0VSUihoYW5k bGUpOwo+ICAKPiAtLSAKPiAyLjI1LjEKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaW9tbXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxpbnV4LWZv dW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lvbW11