From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 A81592BAF3 for ; Fri, 19 Apr 2024 21:07:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713560848; cv=none; b=sU7FPosvrUAiwJqdfvKCCeTLJUtv48+JsajMBnlm9GO5B2oiMnTj2DiJnXNC/TLKA4IWHn+dnnxYKRkm4mN4J0hwfCarl4MYUYR8vb6HvTK3Li/Ov828q89qc3vXjlpGksX2fHs2s0JRTpKxA8o1CPpkGdiLNFTx+OJh1k1fLEE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713560848; c=relaxed/simple; bh=zSafTbDer8DxOdKPod5krLtkNnELa3LPcQ3ZbvmwF1M=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ZYlE8rQ70jZUQwPiYMUXJgmUvcFBKqYs4hwYCtEVxbpqOtYAK8c0cngGfl+7d/aRs2JuB4vDCkdASnZJCTJjLVjiQreP54T+ASUT8XbK4ox7sJpu1MF8IpMBHmsxicVzyXFc2zaTYsWB/UqGG6MVcijlFTMCdeI/K7bFfndLGDg= 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=yZhXvMgY; arc=none smtp.client-ip=209.85.128.46 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="yZhXvMgY" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-418820e6effso19705e9.0 for ; Fri, 19 Apr 2024 14:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713560844; x=1714165644; 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=+mFRmA2+vtjCGnJ49FWij0+vJ7sZXnTD59OX7FUL/N8=; b=yZhXvMgYpSgCq+XIqOK5fMvHvQ2vlD9Q8iyf8WVEEl84dNVFb2vO9N0z8BWobR5Q8N dVBXl8VvgywbwcY9RF3v+AE/vwkv/UkzAKMMm4rRvL045i3Tj1ONW8Rb7pBl4qK4BP5s gmKuCa4sJ1kXI8Y40te9Zz5bGNGT3LhwPJ1lHQCfaS6zllF0D347PhLgSOzHVzaWUvgH aQRqywVl+8uv7nV2NNeWs047pPiA1v6qU+IyDohQOwBn3C5hxBWPJ+nyKs63GIAnZNRv fxV3vK4gh4qOYUHLDCV9jSfEomyWs/5LloiVyipb+DCBhs2DLw3HLc/eCBVB8Ytp7CF9 T8jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713560844; x=1714165644; 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=+mFRmA2+vtjCGnJ49FWij0+vJ7sZXnTD59OX7FUL/N8=; b=ohmGZ5yE75Os6HhvLeUFsdN0St3en1A04nfrclJiJUzRSdvAKpekOciS1y+FqiTN3G XYSeMWcsWJZrN0O0OudbLam633szNifciOLaLy3lk5qqKSy00IlbAqxW3tpB2B+2ARdb d+Xp/FnduD5JCZyQ0ZbNx0XFRnTvXYGum5DDQ2V7cPAVB3N8FtIupqGivrzUmqTc09AO HHz64gr4r/IkVAC6MRGRqAN8zyPG2lz07u0S9MDdc349qHuxmjoixk77C45+bBtg9r5J yVCT1/HEVih7ZwQ+YybNm4PH1TqXcC47KnP1GWOhHhoqAbCllN1bOPkKJHBZv8anDapb nNtw== X-Gm-Message-State: AOJu0YxqLPEPILzGUHmuZgxkiuHfL3KjzRHrCG8U6+TKp5BWUqwVANtF zHH6B6qf5AeoKrTr1efuR5rvYDahMGJ+zdk38k6Z3VGFxabgme+PzvaywV3u6Q== X-Google-Smtp-Source: AGHT+IEgmcEf2n6BYNeXMofNMgoEHQ1FVf2q+Yy7Wp6SOBfzoXY702Ztz1K+Qc4eEw/oWXUUf9Df/A== X-Received: by 2002:a05:600c:4fc7:b0:418:cef2:7575 with SMTP id o7-20020a05600c4fc700b00418cef27575mr53344wmq.0.1713560843921; Fri, 19 Apr 2024 14:07:23 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id o28-20020a05600c511c00b0041898fc168bsm11500669wms.36.2024.04.19.14.07.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 14:07:23 -0700 (PDT) Date: Fri, 19 Apr 2024 21:07:19 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_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: <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> Hi Jason, On Tue, Apr 16, 2024 at 04:28:13PM -0300, Jason Gunthorpe wrote: > CD table entries and STE's have the same essential programming sequence, > just with different types. > > Have arm_smmu_write_ctx_desc() generate a target CD and call > arm_smmu_write_entry() to do the programming. Due to the way the target CD > is generated by modifying the existing CD this alone is not enough for the > CD callers to be freed of the ordering requirements. > > The following patches will make the rest of the CD flow mirror the STE > flow with precise CD contents generated in all cases. > > Signed-off-by: Michael Shavit > Tested-by: Nicolin Chen > Tested-by: Shameer Kolothum > Reviewed-by: Moritz Fischer > Signed-off-by: Jason Gunthorpe > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 94 ++++++++++++++++----- > 1 file changed, 74 insertions(+), 20 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 bf105e914d38b1..3983de90c2fa01 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -56,6 +56,7 @@ struct arm_smmu_entry_writer_ops { > > #define NUM_ENTRY_QWORDS 8 > static_assert(sizeof(struct arm_smmu_ste) == NUM_ENTRY_QWORDS * sizeof(u64)); > +static_assert(sizeof(struct arm_smmu_cd) == NUM_ENTRY_QWORDS * sizeof(u64)); > > static phys_addr_t arm_smmu_msi_cfg[ARM_SMMU_MAX_MSIS][3] = { > [EVTQ_MSI_INDEX] = { > @@ -1231,6 +1232,67 @@ static struct arm_smmu_cd *arm_smmu_get_cd_ptr(struct arm_smmu_master *master, > return &l1_desc->l2ptr[idx]; > } > > +struct arm_smmu_cd_writer { > + struct arm_smmu_entry_writer writer; > + unsigned int ssid; > +}; > + > +static void arm_smmu_get_cd_used(const __le64 *ent, __le64 *used_bits) > +{ > + used_bits[0] = cpu_to_le64(CTXDESC_CD_0_V); > + if (!(ent[0] & cpu_to_le64(CTXDESC_CD_0_V))) > + return; > + memset(used_bits, 0xFF, sizeof(struct arm_smmu_cd)); > + > + /* EPD0 means T0SZ/TG0/IR0/OR0/SH0/TTB0 are IGNORED */ > + if (ent[0] & cpu_to_le64(CTXDESC_CD_0_TCR_EPD0)) { > + used_bits[0] &= ~cpu_to_le64( > + CTXDESC_CD_0_TCR_T0SZ | CTXDESC_CD_0_TCR_TG0 | > + CTXDESC_CD_0_TCR_IRGN0 | CTXDESC_CD_0_TCR_ORGN0 | > + CTXDESC_CD_0_TCR_SH0); > + used_bits[1] &= ~cpu_to_le64(CTXDESC_CD_1_TTB0_MASK); > + } > +} > + > +static void arm_smmu_cd_writer_sync_entry(struct arm_smmu_entry_writer *writer) > +{ > + struct arm_smmu_cd_writer *cd_writer = > + container_of(writer, struct arm_smmu_cd_writer, writer); > + > + arm_smmu_sync_cd(writer->master, cd_writer->ssid, true); > +} > + > +static const struct arm_smmu_entry_writer_ops arm_smmu_cd_writer_ops = { > + .sync = arm_smmu_cd_writer_sync_entry, > + .get_used = arm_smmu_get_cd_used, > + .v_bit = cpu_to_le64(CTXDESC_CD_0_V), > +}; > + > +static void arm_smmu_write_cd_entry(struct arm_smmu_master *master, int ssid, > + struct arm_smmu_cd *cdptr, > + const struct arm_smmu_cd *target) > +{ > + struct arm_smmu_cd_writer cd_writer = { > + .writer = { > + .ops = &arm_smmu_cd_writer_ops, > + .master = master, > + }, > + .ssid = ssid, > + }; > + > + arm_smmu_write_entry(&cd_writer.writer, cdptr->data, target->data); > +} > + > +static void arm_smmu_clean_cd_entry(struct arm_smmu_cd *target) > +{ > + struct arm_smmu_cd used = {}; > + int i; > + > + arm_smmu_get_cd_used(target->data, used.data); > + for (i = 0; i != ARRAY_SIZE(target->data); i++) > + target->data[i] &= used.data[i]; > +} > + > int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > struct arm_smmu_ctx_desc *cd) > { > @@ -1247,17 +1309,20 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > */ > u64 val; > bool cd_live; > - struct arm_smmu_cd *cdptr; > + struct arm_smmu_cd target; > + struct arm_smmu_cd *cdptr = ⌖ > + struct arm_smmu_cd *cd_table_entry; > struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; > struct arm_smmu_device *smmu = master->smmu; > > if (WARN_ON(ssid >= (1 << cd_table->s1cdmax))) > return -E2BIG; > > - cdptr = arm_smmu_get_cd_ptr(master, ssid); > - if (!cdptr) > + cd_table_entry = arm_smmu_get_cd_ptr(master, ssid); > + if (!cd_table_entry) > return -ENOMEM; > > + target = *cd_table_entry; As this changes the logic where all CD manipulation is not on the actual CD, I believe a comment would be helpful here. > val = le64_to_cpu(cdptr->data[0]); > cd_live = !!(val & CTXDESC_CD_0_V); > > @@ -1279,13 +1344,6 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > cdptr->data[2] = 0; > cdptr->data[3] = cpu_to_le64(cd->mair); > > - /* > - * STE may be live, and the SMMU might read dwords of this CD in any > - * order. Ensure that it observes valid values before reading > - * V=1. > - */ > - arm_smmu_sync_cd(master, ssid, true); > - > val = cd->tcr | > #ifdef __BIG_ENDIAN > CTXDESC_CD_0_ENDI | > @@ -1299,18 +1357,14 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > if (cd_table->stall_enabled) > val |= CTXDESC_CD_0_S; > } > - > + cdptr->data[0] = cpu_to_le64(val); > /* > - * The SMMU accesses 64-bit values atomically. See IHI0070Ca 3.21.3 > - * "Configuration structures and configuration invalidation completion" > - * > - * The size of single-copy atomic reads made by the SMMU is > - * IMPLEMENTATION DEFINED but must be at least 64 bits. Any single > - * field within an aligned 64-bit span of a structure can be altered > - * without first making the structure invalid. > + * Since the above is updating the CD entry based on the current value > + * without zeroing unused bits it needs fixing before being passed to > + * the programming logic. > */ > - WRITE_ONCE(cdptr->data[0], cpu_to_le64(val)); > - arm_smmu_sync_cd(master, ssid, true); > + arm_smmu_clean_cd_entry(&target); I am not sure I understand the logic here, is that only needed for entry[0] As I see the other entries are set and not reused. If so, I think it’d be better to make that clear, also as used_bits are always 0xff for all cases, I believe the EPD0 logic should be integrated in populating the CD so it is correct by construction, as this looks like a hack to me. Thanks, Mostafa > + arm_smmu_write_cd_entry(master, ssid, cd_table_entry, &target); > return 0; > } > > -- > 2.43.2 > 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 4542BC4345F for ; Fri, 19 Apr 2024 21:07:47 +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=XRXm7hhW2rUSSTetG/McvUHHKadz4K+LexdEjU/+4ws=; b=cAawvtZ8XqiHNQ ocxIRPcr34Xk3YhR5BRtqeeyDPrsM4ti305K7lKJ/lg8030PvLe3hO7sUn6NoV2SCJAF7QZlq+3sy hdwiTvBloQUXwHlbewSh/m2rr82MFh0Swr5CNX4nYSpYOaMS2kOVWiEobiLE68Q9d1A8ScJXQPrPK PMVQ1J8VjDkBf5P6S/RHOKuszHoiwU4n7h6kK0zTS5nZ/Em7+40x9agskKmDnHENY0jH4+M1hKGAc lYqje8gPprf9UgIORv9DyTE0ZGkWuDE6sJABnUAZxi26cCFzF1F6fR5emrhQg9L67SXSUxmd0Gpl4 Cd7B23rHRPAPx5ud89pQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxvSL-00000006yxR-3Wib; Fri, 19 Apr 2024 21:07:37 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxvSA-00000006yqz-3J2z for linux-arm-kernel@lists.infradead.org; Fri, 19 Apr 2024 21:07:28 +0000 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-418820e6effso19685e9.0 for ; Fri, 19 Apr 2024 14:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713560844; x=1714165644; 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=+mFRmA2+vtjCGnJ49FWij0+vJ7sZXnTD59OX7FUL/N8=; b=c0nQK7fvVisV+IyO2H1hRqhcVnal5yujuw5Qy+H40VS+98IuO8CVDmchUYnMRMsUTR TQh32WFlE36HDM1G2hBgI5WzNRyQ4CAtu/YV68Z/jniuBBbEB17hRRD/P9nBG8oVXtk8 QFOvNVYOX6NpRsHZFbFyOqFcZ3Hu+FFS3JkiGne/As0m4RbPSkB3vlFeOqm69QNQpcR1 3wNkq4toVaGwaW3rlLvDRt0/OthhK/5oM3oew5dY7gv1sWc0qcyIBk9YVR8soQlck+XR 7fUb0AN77DxUrJX/Vt52eGw3AfikTkNXSW7TvW42bWt9i56fehc88naPOb7yyX6ZgGwm 04kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713560844; x=1714165644; 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=+mFRmA2+vtjCGnJ49FWij0+vJ7sZXnTD59OX7FUL/N8=; b=G0mY4vtvqpwERMu5pvDwgF3m60HbsBDqVxOCdcpSY6jTigOEBpWl0zyOj88erhUnxx Om5S3CuVQiTedtWJiAcMSLfPDr395xSFumD8xp9grzYw85M14XTHczNbd+K+OvjA5PlJ CWMmc0rHMxgQVmY3NpkU1QlHimFUUOr/k1YQ9NyBgW4T1SxNWSrRtqHZtXnUP/6ylO+2 JoWmb4Fo2Gw7CzAEMUxOt/VeO6isW6M0hjR0h4i7CxoMzPiMZwd/apA+FpBxCcZJz+yu S4Alyqxkhl+8RGiDDX1liJACnJYu6bQqRCDYZGbFnn5Nt7/QdoqCwk06q1GGQH/9FT0S sTmA== X-Forwarded-Encrypted: i=1; AJvYcCX9+tvgfsy+vNuM1KK9m6PHaBpWCcvED6zD/5cgnXeGsV9hIyUBM+oaKRvnvbRfvvuf5LNyotl9GUr2Bz2HBML1Fm2Zf74J7h5cWUDMVh2YAm5wIG8= X-Gm-Message-State: AOJu0YwWU8/FGp+42NgTIiarDuyGhRrqIJdDZcbVHsE2ilWARISUQRnJ xp88EL4O8vzY6ZsqzD8WnRkXgdgSLXtE+a+Snkf2WgS8zqhj94Lp8d2LIYh9mQ== X-Google-Smtp-Source: AGHT+IEgmcEf2n6BYNeXMofNMgoEHQ1FVf2q+Yy7Wp6SOBfzoXY702Ztz1K+Qc4eEw/oWXUUf9Df/A== X-Received: by 2002:a05:600c:4fc7:b0:418:cef2:7575 with SMTP id o7-20020a05600c4fc700b00418cef27575mr53344wmq.0.1713560843921; Fri, 19 Apr 2024 14:07:23 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id o28-20020a05600c511c00b0041898fc168bsm11500669wms.36.2024.04.19.14.07.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 14:07:23 -0700 (PDT) Date: Fri, 19 Apr 2024 21:07:19 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240419_140726_870199_C1A36D5C X-CRM114-Status: GOOD ( 34.83 ) 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 SGkgSmFzb24sCgpPbiBUdWUsIEFwciAxNiwgMjAyNCBhdCAwNDoyODoxM1BNIC0wMzAwLCBKYXNv biBHdW50aG9ycGUgd3JvdGU6Cj4gQ0QgdGFibGUgZW50cmllcyBhbmQgU1RFJ3MgaGF2ZSB0aGUg c2FtZSBlc3NlbnRpYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UsCj4ganVzdCB3aXRoIGRpZmZlcmVu dCB0eXBlcy4KPiAKPiBIYXZlIGFybV9zbW11X3dyaXRlX2N0eF9kZXNjKCkgZ2VuZXJhdGUgYSB0 YXJnZXQgQ0QgYW5kIGNhbGwKPiBhcm1fc21tdV93cml0ZV9lbnRyeSgpIHRvIGRvIHRoZSBwcm9n cmFtbWluZy4gRHVlIHRvIHRoZSB3YXkgdGhlIHRhcmdldCBDRAo+IGlzIGdlbmVyYXRlZCBieSBt b2RpZnlpbmcgdGhlIGV4aXN0aW5nIENEIHRoaXMgYWxvbmUgaXMgbm90IGVub3VnaCBmb3IgdGhl Cj4gQ0QgY2FsbGVycyB0byBiZSBmcmVlZCBvZiB0aGUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzLgo+ IAo+IFRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB3aWxsIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIENEIGZs b3cgbWlycm9yIHRoZSBTVEUKPiBmbG93IHdpdGggcHJlY2lzZSBDRCBjb250ZW50cyBnZW5lcmF0 ZWQgaW4gYWxsIGNhc2VzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgU2hhdml0IDxtc2hh dml0QGdvb2dsZS5jb20+Cj4gVGVzdGVkLWJ5OiBOaWNvbGluIENoZW4gPG5pY29saW5jQG52aWRp YS5jb20+Cj4gVGVzdGVkLWJ5OiBTaGFtZWVyIEtvbG90aHVtIDxzaGFtZWVyYWxpLmtvbG90aHVt LnRob2RpQGh1YXdlaS5jb20+Cj4gUmV2aWV3ZWQtYnk6IE1vcml0eiBGaXNjaGVyIDxtb3JpdHpm QGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbnZpZGlh LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMu YyB8IDk0ICsrKysrKysrKysrKysrKystLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgNzQgaW5zZXJ0 aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUv YXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmMgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21t dS12My9hcm0tc21tdS12My5jCj4gaW5kZXggYmYxMDVlOTE0ZDM4YjEuLjM5ODNkZTkwYzJmYTAx IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYz LmMKPiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5jCj4g QEAgLTU2LDYgKzU2LDcgQEAgc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlcl9vcHMgewo+ICAK PiAgI2RlZmluZSBOVU1fRU5UUllfUVdPUkRTIDgKPiAgc3RhdGljX2Fzc2VydChzaXplb2Yoc3Ry dWN0IGFybV9zbW11X3N0ZSkgPT0gTlVNX0VOVFJZX1FXT1JEUyAqIHNpemVvZih1NjQpKTsKPiAr c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGFybV9zbW11X2NkKSA9PSBOVU1fRU5UUllfUVdP UkRTICogc2l6ZW9mKHU2NCkpOwo+ICAKPiAgc3RhdGljIHBoeXNfYWRkcl90IGFybV9zbW11X21z aV9jZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNdID0gewo+ICAJW0VWVFFfTVNJX0lOREVYXSA9IHsK PiBAQCAtMTIzMSw2ICsxMjMyLDY3IEBAIHN0YXRpYyBzdHJ1Y3QgYXJtX3NtbXVfY2QgKmFybV9z bW11X2dldF9jZF9wdHIoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyLAo+ICAJcmV0dXJu ICZsMV9kZXNjLT5sMnB0cltpZHhdOwo+ICB9Cj4gIAo+ICtzdHJ1Y3QgYXJtX3NtbXVfY2Rfd3Jp dGVyIHsKPiArCXN0cnVjdCBhcm1fc21tdV9lbnRyeV93cml0ZXIgd3JpdGVyOwo+ICsJdW5zaWdu ZWQgaW50IHNzaWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9nZXRfY2RfdXNl ZChjb25zdCBfX2xlNjQgKmVudCwgX19sZTY0ICp1c2VkX2JpdHMpCj4gK3sKPiArCXVzZWRfYml0 c1swXSA9IGNwdV90b19sZTY0KENUWERFU0NfQ0RfMF9WKTsKPiArCWlmICghKGVudFswXSAmIGNw dV90b19sZTY0KENUWERFU0NfQ0RfMF9WKSkpCj4gKwkJcmV0dXJuOwo+ICsJbWVtc2V0KHVzZWRf Yml0cywgMHhGRiwgc2l6ZW9mKHN0cnVjdCBhcm1fc21tdV9jZCkpOwo+ICsKPiArCS8qIEVQRDAg bWVhbnMgVDBTWi9URzAvSVIwL09SMC9TSDAvVFRCMCBhcmUgSUdOT1JFRCAqLwo+ICsJaWYgKGVu dFswXSAmIGNwdV90b19sZTY0KENUWERFU0NfQ0RfMF9UQ1JfRVBEMCkpIHsKPiArCQl1c2VkX2Jp dHNbMF0gJj0gfmNwdV90b19sZTY0KAo+ICsJCQlDVFhERVNDX0NEXzBfVENSX1QwU1ogfCBDVFhE RVNDX0NEXzBfVENSX1RHMCB8Cj4gKwkJCUNUWERFU0NfQ0RfMF9UQ1JfSVJHTjAgfCBDVFhERVND X0NEXzBfVENSX09SR04wIHwKPiArCQkJQ1RYREVTQ19DRF8wX1RDUl9TSDApOwo+ICsJCXVzZWRf Yml0c1sxXSAmPSB+Y3B1X3RvX2xlNjQoQ1RYREVTQ19DRF8xX1RUQjBfTUFTSyk7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NkX3dyaXRlcl9zeW5jX2VudHJ5KHN0cnVj dCBhcm1fc21tdV9lbnRyeV93cml0ZXIgKndyaXRlcikKPiArewo+ICsJc3RydWN0IGFybV9zbW11 X2NkX3dyaXRlciAqY2Rfd3JpdGVyID0KPiArCQljb250YWluZXJfb2Yod3JpdGVyLCBzdHJ1Y3Qg YXJtX3NtbXVfY2Rfd3JpdGVyLCB3cml0ZXIpOwo+ICsKPiArCWFybV9zbW11X3N5bmNfY2Qod3Jp dGVyLT5tYXN0ZXIsIGNkX3dyaXRlci0+c3NpZCwgdHJ1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXJtX3NtbXVfZW50cnlfd3JpdGVyX29wcyBhcm1fc21tdV9jZF93cml0ZXJf b3BzID0gewo+ICsJLnN5bmMgPSBhcm1fc21tdV9jZF93cml0ZXJfc3luY19lbnRyeSwKPiArCS5n ZXRfdXNlZCA9IGFybV9zbW11X2dldF9jZF91c2VkLAo+ICsJLnZfYml0ID0gY3B1X3RvX2xlNjQo Q1RYREVTQ19DRF8wX1YpLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfd3JpdGVf Y2RfZW50cnkoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyLCBpbnQgc3NpZCwKPiArCQkJ CSAgICBzdHJ1Y3QgYXJtX3NtbXVfY2QgKmNkcHRyLAo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBh cm1fc21tdV9jZCAqdGFyZ2V0KQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfY2Rfd3JpdGVyIGNk X3dyaXRlciA9IHsKPiArCQkud3JpdGVyID0gewo+ICsJCQkub3BzID0gJmFybV9zbW11X2NkX3dy aXRlcl9vcHMsCj4gKwkJCS5tYXN0ZXIgPSBtYXN0ZXIsCj4gKwkJfSwKPiArCQkuc3NpZCA9IHNz aWQsCj4gKwl9Owo+ICsKPiArCWFybV9zbW11X3dyaXRlX2VudHJ5KCZjZF93cml0ZXIud3JpdGVy LCBjZHB0ci0+ZGF0YSwgdGFyZ2V0LT5kYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJt X3NtbXVfY2xlYW5fY2RfZW50cnkoc3RydWN0IGFybV9zbW11X2NkICp0YXJnZXQpCj4gK3sKPiAr CXN0cnVjdCBhcm1fc21tdV9jZCB1c2VkID0ge307Cj4gKwlpbnQgaTsKPiArCj4gKwlhcm1fc21t dV9nZXRfY2RfdXNlZCh0YXJnZXQtPmRhdGEsIHVzZWQuZGF0YSk7Cj4gKwlmb3IgKGkgPSAwOyBp ICE9IEFSUkFZX1NJWkUodGFyZ2V0LT5kYXRhKTsgaSsrKQo+ICsJCXRhcmdldC0+ZGF0YVtpXSAm PSB1c2VkLmRhdGFbaV07Cj4gK30KPiArCj4gIGludCBhcm1fc21tdV93cml0ZV9jdHhfZGVzYyhz dHJ1Y3QgYXJtX3NtbXVfbWFzdGVyICptYXN0ZXIsIGludCBzc2lkLAo+ICAJCQkgICAgc3RydWN0 IGFybV9zbW11X2N0eF9kZXNjICpjZCkKPiAgewo+IEBAIC0xMjQ3LDE3ICsxMzA5LDIwIEBAIGlu dCBhcm1fc21tdV93cml0ZV9jdHhfZGVzYyhzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyICptYXN0ZXIs IGludCBzc2lkLAo+ICAJICovCj4gIAl1NjQgdmFsOwo+ICAJYm9vbCBjZF9saXZlOwo+IC0Jc3Ry dWN0IGFybV9zbW11X2NkICpjZHB0cjsKPiArCXN0cnVjdCBhcm1fc21tdV9jZCB0YXJnZXQ7Cj4g KwlzdHJ1Y3QgYXJtX3NtbXVfY2QgKmNkcHRyID0gJnRhcmdldDsKPiArCXN0cnVjdCBhcm1fc21t dV9jZCAqY2RfdGFibGVfZW50cnk7Cj4gIAlzdHJ1Y3QgYXJtX3NtbXVfY3R4X2Rlc2NfY2ZnICpj ZF90YWJsZSA9ICZtYXN0ZXItPmNkX3RhYmxlOwo+ICAJc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSA9IG1hc3Rlci0+c21tdTsKPiAgCj4gIAlpZiAoV0FSTl9PTihzc2lkID49ICgxIDw8IGNk X3RhYmxlLT5zMWNkbWF4KSkpCj4gIAkJcmV0dXJuIC1FMkJJRzsKPiAgCj4gLQljZHB0ciA9IGFy bV9zbW11X2dldF9jZF9wdHIobWFzdGVyLCBzc2lkKTsKPiAtCWlmICghY2RwdHIpCj4gKwljZF90 YWJsZV9lbnRyeSA9IGFybV9zbW11X2dldF9jZF9wdHIobWFzdGVyLCBzc2lkKTsKPiArCWlmICgh Y2RfdGFibGVfZW50cnkpCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICsJdGFyZ2V0ID0gKmNk X3RhYmxlX2VudHJ5OwoKQXMgdGhpcyBjaGFuZ2VzIHRoZSBsb2dpYyB3aGVyZSBhbGwgQ0QgbWFu aXB1bGF0aW9uIGlzIG5vdCBvbiB0aGUgYWN0dWFsCkNELCBJIGJlbGlldmUgYSBjb21tZW50IHdv dWxkIGJlIGhlbHBmdWwgaGVyZS4KCj4gIAl2YWwgPSBsZTY0X3RvX2NwdShjZHB0ci0+ZGF0YVsw XSk7Cj4gIAljZF9saXZlID0gISEodmFsICYgQ1RYREVTQ19DRF8wX1YpOwo+ICAKPiBAQCAtMTI3 OSwxMyArMTM0NCw2IEBAIGludCBhcm1fc21tdV93cml0ZV9jdHhfZGVzYyhzdHJ1Y3QgYXJtX3Nt bXVfbWFzdGVyICptYXN0ZXIsIGludCBzc2lkLAo+ICAJCWNkcHRyLT5kYXRhWzJdID0gMDsKPiAg CQljZHB0ci0+ZGF0YVszXSA9IGNwdV90b19sZTY0KGNkLT5tYWlyKTsKPiAgCj4gLQkJLyoKPiAt CQkgKiBTVEUgbWF5IGJlIGxpdmUsIGFuZCB0aGUgU01NVSBtaWdodCByZWFkIGR3b3JkcyBvZiB0 aGlzIENEIGluIGFueQo+IC0JCSAqIG9yZGVyLiBFbnN1cmUgdGhhdCBpdCBvYnNlcnZlcyB2YWxp ZCB2YWx1ZXMgYmVmb3JlIHJlYWRpbmcKPiAtCQkgKiBWPTEuCj4gLQkJICovCj4gLQkJYXJtX3Nt bXVfc3luY19jZChtYXN0ZXIsIHNzaWQsIHRydWUpOwo+IC0KPiAgCQl2YWwgPSBjZC0+dGNyIHwK PiAgI2lmZGVmIF9fQklHX0VORElBTgo+ICAJCQlDVFhERVNDX0NEXzBfRU5ESSB8Cj4gQEAgLTEy OTksMTggKzEzNTcsMTQgQEAgaW50IGFybV9zbW11X3dyaXRlX2N0eF9kZXNjKHN0cnVjdCBhcm1f c21tdV9tYXN0ZXIgKm1hc3RlciwgaW50IHNzaWQsCj4gIAkJaWYgKGNkX3RhYmxlLT5zdGFsbF9l bmFibGVkKQo+ICAJCQl2YWwgfD0gQ1RYREVTQ19DRF8wX1M7Cj4gIAl9Cj4gLQo+ICsJY2RwdHIt PmRhdGFbMF0gPSBjcHVfdG9fbGU2NCh2YWwpOwo+ICAJLyoKPiAtCSAqIFRoZSBTTU1VIGFjY2Vz c2VzIDY0LWJpdCB2YWx1ZXMgYXRvbWljYWxseS4gU2VlIElISTAwNzBDYSAzLjIxLjMKPiAtCSAq ICJDb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb24gaW52YWxpZGF0aW9u IGNvbXBsZXRpb24iCj4gLQkgKgo+IC0JICogICBUaGUgc2l6ZSBvZiBzaW5nbGUtY29weSBhdG9t aWMgcmVhZHMgbWFkZSBieSB0aGUgU01NVSBpcwo+IC0JICogICBJTVBMRU1FTlRBVElPTiBERUZJ TkVEIGJ1dCBtdXN0IGJlIGF0IGxlYXN0IDY0IGJpdHMuIEFueSBzaW5nbGUKPiAtCSAqICAgZmll bGQgd2l0aGluIGFuIGFsaWduZWQgNjQtYml0IHNwYW4gb2YgYSBzdHJ1Y3R1cmUgY2FuIGJlIGFs dGVyZWQKPiAtCSAqICAgd2l0aG91dCBmaXJzdCBtYWtpbmcgdGhlIHN0cnVjdHVyZSBpbnZhbGlk Lgo+ICsJICogU2luY2UgdGhlIGFib3ZlIGlzIHVwZGF0aW5nIHRoZSBDRCBlbnRyeSBiYXNlZCBv biB0aGUgY3VycmVudCB2YWx1ZQo+ICsJICogd2l0aG91dCB6ZXJvaW5nIHVudXNlZCBiaXRzIGl0 IG5lZWRzIGZpeGluZyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvCj4gKwkgKiB0aGUgcHJvZ3JhbW1p bmcgbG9naWMuCj4gIAkgKi8KPiAtCVdSSVRFX09OQ0UoY2RwdHItPmRhdGFbMF0sIGNwdV90b19s ZTY0KHZhbCkpOwo+IC0JYXJtX3NtbXVfc3luY19jZChtYXN0ZXIsIHNzaWQsIHRydWUpOwo+ICsJ YXJtX3NtbXVfY2xlYW5fY2RfZW50cnkoJnRhcmdldCk7CgpJIGFtIG5vdCBzdXJlIEkgdW5kZXJz dGFuZCB0aGUgbG9naWMgaGVyZSwgaXMgdGhhdCBvbmx5IG5lZWRlZCBmb3IgZW50cnlbMF0KQXMg SSBzZWUgdGhlIG90aGVyIGVudHJpZXMgYXJlIHNldCBhbmQgbm90IHJldXNlZC4KCklmIHNvLCBJ IHRoaW5rIGl04oCZZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGF0IGNsZWFyLCBhbHNvIGFzIHVzZWRf Yml0cyBhcmUgYWx3YXlzIDB4ZmYKZm9yIGFsbCBjYXNlcywgSSBiZWxpZXZlIHRoZSBFUEQwIGxv Z2ljIHNob3VsZCBiZSBpbnRlZ3JhdGVkIGluIHBvcHVsYXRpbmcgdGhlIENEIHNvCml0IGlzIGNv cnJlY3QgYnkgY29uc3RydWN0aW9uLCBhcyB0aGlzIGxvb2tzIGxpa2UgYSBoYWNrIHRvIG1lLgoK VGhhbmtzLApNb3N0YWZhCgo+ICsJYXJtX3NtbXVfd3JpdGVfY2RfZW50cnkobWFzdGVyLCBzc2lk LCBjZF90YWJsZV9lbnRyeSwgJnRhcmdldCk7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtLSAK PiAyLjQzLjIKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK