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 E8035C61DA4 for ; Mon, 13 Mar 2023 04:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229888AbjCMEPk (ORCPT ); Mon, 13 Mar 2023 00:15:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229862AbjCMEPi (ORCPT ); Mon, 13 Mar 2023 00:15:38 -0400 Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0526938E94 for ; Sun, 12 Mar 2023 21:15:36 -0700 (PDT) Received: by mail-pg1-x52e.google.com with SMTP id s17so6155329pgv.4 for ; Sun, 12 Mar 2023 21:15:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678680935; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ICiyccuIxNKubJVNPm3vfDjG/ydP+GvUZ2kKe9U3fg8=; b=biyQkkRwcXPN0y6l0ypQo6y8R/fz/4fHdXJeJmXz0wBSq7leYuI9OHAP/2rrRzukzU TvnoBtGQwwo+XB9hibbSBZSXaluSH+SKhmpukm+vXlDMUq/bh5OuZBiQ7cQuHEvHGqry lfG1K3/E35kTlkV9lzN0Yr82Tgny/ha3VQlMMQnf0fnidYADVNv/IkuE0ohdmLWmw8e/ 0SIogYC0tuGlmPGwl4QVIJSm4ad+3kkl4phCuTnIrI6lz2IxiMthoTndh1jjM84YTc+3 TfWAj3ppORXShpAL/syrJnKe1w15K6N4N3BnBys054RHbdK3/Fy2i5XSEyjrfGlkNSoZ cKqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678680935; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ICiyccuIxNKubJVNPm3vfDjG/ydP+GvUZ2kKe9U3fg8=; b=42aQoXqda3w46cqlj7SzirrojgcOxHP4N/H2Wcc7O4qJQiXt9R9RYRpEuzyVVinK7J GBi4MOlaxtFPN0PSou9JE1mSNeN4FiOs12u9Z2HM0zIiPCGQHSgH5ncmHwspyQnSYRRf 1nvOFeABCm5ualaBGwDxKVKcECAxqaVmDQfYlOGwd6hZPgMnGi+73MJW9+fWSCYlgJwi 8bIb7mroQOPYN6k0jnaLxI2L0CXF9z+UnNvx8rGBTR5SNDaiu2KEqLOkqVQNppPvJF1e aGa6PC6SCMteRDiuWsvngi+soHC/96j5IFXPWHcy43eTItdwva5GeGtThcKGu2IeX9eR xq+w== X-Gm-Message-State: AO0yUKWblQDaKm/uH+HWCbsPh9tQXCs/E2CQIDUCDwQM6MKZg/V5tVSj xmsbwqtARcV47OIiZMq9ZenNpfmWcJDLHAWo7aNvEvv3P33/DCeXeRTgxw== X-Google-Smtp-Source: AK7set/Biz5ZXyDhWISoW5+C/6opbLb9ahW9+ZsfV9OE9R/ZUhCiuayIe/CdrNcuA6XGjyvosdpfrcnEumV4+IUH/W0= X-Received: by 2002:a65:4001:0:b0:503:2d3f:a187 with SMTP id f1-20020a654001000000b005032d3fa187mr10847064pgp.5.1678680935167; Sun, 12 Mar 2023 21:15:35 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-6-jingzhangos@google.com> In-Reply-To: <20230228062246.1222387-6-jingzhangos@google.com> From: Reiji Watanabe Date: Sun, 12 Mar 2023 21:15:18 -0700 Message-ID: Subject: Re: [PATCH v3 5/6] KVM: arm64: Introduce ID register specific descriptor To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Ricardo Koller , Raghavendra Rao Ananta Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Jing, On Mon, Feb 27, 2023 at 10:23=E2=80=AFPM Jing Zhang wrote: > > Introduce an ID feature register specific descriptor to include ID > register specific fields and callbacks besides its corresponding > general system register descriptor. > New fields for ID register descriptor would be added later when it > is necessary to support a writable ID register. > > No functional change intended. > > Co-developed-by: Reiji Watanabe > Signed-off-by: Reiji Watanabe > Signed-off-by: Jing Zhang > --- > arch/arm64/kvm/id_regs.c | 184 ++++++++++++++++++++++++++++---------- > arch/arm64/kvm/sys_regs.c | 2 +- > arch/arm64/kvm/sys_regs.h | 1 + > 3 files changed, 138 insertions(+), 49 deletions(-) > > diff --git a/arch/arm64/kvm/id_regs.c b/arch/arm64/kvm/id_regs.c > index 21ec8fc10d79..fc0dcd557cbb 100644 > --- a/arch/arm64/kvm/id_regs.c > +++ b/arch/arm64/kvm/id_regs.c > @@ -18,6 +18,10 @@ > > #include "sys_regs.h" > > +struct id_reg_desc { > + const struct sys_reg_desc reg_desc; > +}; > + > static u8 vcpu_pmuver(const struct kvm_vcpu *vcpu) > { > if (kvm_vcpu_has_pmu(vcpu)) > @@ -326,21 +330,25 @@ static int set_id_dfr0_el1(struct kvm_vcpu *vcpu, > } > > /* sys_reg_desc initialiser for known cpufeature ID registers */ > -#define ID_SANITISED(name) { \ > - SYS_DESC(SYS_##name), \ > - .access =3D access_id_reg, \ > - .get_user =3D get_id_reg, \ > - .set_user =3D set_id_reg, \ > - .visibility =3D id_visibility, \ > +#define ID_SANITISED(name) { \ > + .reg_desc =3D { \ > + SYS_DESC(SYS_##name), \ > + .access =3D access_id_reg, \ > + .get_user =3D get_id_reg, \ > + .set_user =3D set_id_reg, \ > + .visibility =3D id_visibility, \ > + }, \ > } > > /* sys_reg_desc initialiser for known cpufeature ID registers */ > -#define AA32_ID_SANITISED(name) { \ > - SYS_DESC(SYS_##name), \ > - .access =3D access_id_reg, \ > - .get_user =3D get_id_reg, \ > - .set_user =3D set_id_reg, \ > - .visibility =3D aa32_id_visibility, \ > +#define AA32_ID_SANITISED(name) { \ > + .reg_desc =3D { \ > + SYS_DESC(SYS_##name), \ > + .access =3D access_id_reg, \ > + .get_user =3D get_id_reg, \ > + .set_user =3D set_id_reg, \ > + .visibility =3D aa32_id_visibility, \ > + }, \ > } > > /* > @@ -348,12 +356,14 @@ static int set_id_dfr0_el1(struct kvm_vcpu *vcpu, > * register with encoding Op0=3D3, Op1=3D0, CRn=3D0, CRm=3Dcrm, Op2=3Dop= 2 > * (1 <=3D crm < 8, 0 <=3D Op2 < 8). > */ > -#define ID_UNALLOCATED(crm, op2) { \ > - Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \ > - .access =3D access_id_reg, \ > - .get_user =3D get_id_reg, \ > - .set_user =3D set_id_reg, \ > - .visibility =3D raz_visibility \ > +#define ID_UNALLOCATED(crm, op2) { \ > + .reg_desc =3D { \ > + Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \ > + .access =3D access_id_reg, \ > + .get_user =3D get_id_reg, \ > + .set_user =3D set_id_reg, \ > + .visibility =3D raz_visibility \ > + }, \ > } > > /* > @@ -361,15 +371,17 @@ static int set_id_dfr0_el1(struct kvm_vcpu *vcpu, > * For now, these are exposed just like unallocated ID regs: they appear > * RAZ for the guest. > */ > -#define ID_HIDDEN(name) { \ > - SYS_DESC(SYS_##name), \ > - .access =3D access_id_reg, \ > - .get_user =3D get_id_reg, \ > - .set_user =3D set_id_reg, \ > - .visibility =3D raz_visibility, \ > +#define ID_HIDDEN(name) { \ > + .reg_desc =3D { \ > + SYS_DESC(SYS_##name), \ > + .access =3D access_id_reg, \ > + .get_user =3D get_id_reg, \ > + .set_user =3D set_id_reg, \ > + .visibility =3D raz_visibility, \ > + }, \ > } > > -static const struct sys_reg_desc id_reg_descs[] =3D { > +static const struct id_reg_desc id_reg_descs[KVM_ARM_ID_REG_NUM] =3D { > /* > * ID regs: all ID_SANITISED() entries here must have correspondi= ng > * entries in arm64_ftr_regs[]. > @@ -379,9 +391,13 @@ static const struct sys_reg_desc id_reg_descs[] =3D = { > /* CRm=3D1 */ > AA32_ID_SANITISED(ID_PFR0_EL1), > AA32_ID_SANITISED(ID_PFR1_EL1), > - { SYS_DESC(SYS_ID_DFR0_EL1), .access =3D access_id_reg, > - .get_user =3D get_id_reg, .set_user =3D set_id_dfr0_el1, > - .visibility =3D aa32_id_visibility, }, > + { .reg_desc =3D { > + SYS_DESC(SYS_ID_DFR0_EL1), > + .access =3D access_id_reg, > + .get_user =3D get_id_reg, > + .set_user =3D set_id_dfr0_el1, > + .visibility =3D aa32_id_visibility, }, > + }, > ID_HIDDEN(ID_AFR0_EL1), > AA32_ID_SANITISED(ID_MMFR0_EL1), > AA32_ID_SANITISED(ID_MMFR1_EL1), > @@ -410,8 +426,12 @@ static const struct sys_reg_desc id_reg_descs[] =3D = { > > /* AArch64 ID registers */ > /* CRm=3D4 */ > - { SYS_DESC(SYS_ID_AA64PFR0_EL1), .access =3D access_id_reg, > - .get_user =3D get_id_reg, .set_user =3D set_id_aa64pfr0_el1, }, > + { .reg_desc =3D { > + SYS_DESC(SYS_ID_AA64PFR0_EL1), > + .access =3D access_id_reg, > + .get_user =3D get_id_reg, > + .set_user =3D set_id_aa64pfr0_el1, }, > + }, > ID_SANITISED(ID_AA64PFR1_EL1), > ID_UNALLOCATED(4, 2), > ID_UNALLOCATED(4, 3), > @@ -421,8 +441,12 @@ static const struct sys_reg_desc id_reg_descs[] =3D = { > ID_UNALLOCATED(4, 7), > > /* CRm=3D5 */ > - { SYS_DESC(SYS_ID_AA64DFR0_EL1), .access =3D access_id_reg, > - .get_user =3D get_id_reg, .set_user =3D set_id_aa64dfr0_el1, }, > + { .reg_desc =3D { > + SYS_DESC(SYS_ID_AA64DFR0_EL1), > + .access =3D access_id_reg, > + .get_user =3D get_id_reg, > + .set_user =3D set_id_aa64dfr0_el1, }, > + }, > ID_SANITISED(ID_AA64DFR1_EL1), > ID_UNALLOCATED(5, 2), > ID_UNALLOCATED(5, 3), > @@ -461,12 +485,12 @@ static const struct sys_reg_desc id_reg_descs[] =3D= { > */ > int emulate_id_reg(struct kvm_vcpu *vcpu, struct sys_reg_params *params) > { > - const struct sys_reg_desc *r; > + u32 id; > > - r =3D find_reg(params, id_reg_descs, ARRAY_SIZE(id_reg_descs)); > + id =3D reg_to_encoding(params); > > - if (likely(r)) { > - perform_access(vcpu, params, r); > + if (likely(is_id_reg(id))) { > + perform_access(vcpu, params, &id_reg_descs[IDREG_IDX(id)]= .reg_desc); > } else { > print_sys_reg_msg(params, > "Unsupported guest id_reg access at: %l= x [%08lx]\n", > @@ -483,38 +507,102 @@ void kvm_arm_reset_id_regs(struct kvm_vcpu *vcpu) > unsigned long i; > > for (i =3D 0; i < ARRAY_SIZE(id_reg_descs); i++) > - if (id_reg_descs[i].reset) > - id_reg_descs[i].reset(vcpu, &id_reg_descs[i]); > + if (id_reg_descs[i].reg_desc.reset) > + id_reg_descs[i].reg_desc.reset(vcpu, &id_reg_desc= s[i].reg_desc); > } > > int kvm_arm_get_id_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *= reg) > { > - return kvm_sys_reg_get_user(vcpu, reg, > - id_reg_descs, ARRAY_SIZE(id_reg_descs= )); > + u64 __user *uaddr =3D (u64 __user *)(unsigned long)reg->addr; > + const struct sys_reg_desc *r; > + struct sys_reg_params params; > + u64 val; > + int ret; > + u32 id; > + > + if (!index_to_params(reg->id, ¶ms)) > + return -ENOENT; > + id =3D reg_to_encoding(¶ms); > + > + if (!is_id_reg(id)) > + return -ENOENT; > + > + r =3D &id_reg_descs[IDREG_IDX(id)].reg_desc; > + if (r->get_user) { > + ret =3D (r->get_user)(vcpu, r, &val); > + } else { > + ret =3D 0; > + val =3D IDREG(vcpu->kvm, id); > + } > + > + if (!ret) > + ret =3D put_user(val, uaddr); > + > + return ret; > } > > int kvm_arm_set_id_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *= reg) > { > - return kvm_sys_reg_set_user(vcpu, reg, > - id_reg_descs, ARRAY_SIZE(id_reg_descs= )); > + u64 __user *uaddr =3D (u64 __user *)(unsigned long)reg->addr; > + const struct sys_reg_desc *r; > + struct sys_reg_params params; > + u64 val; > + int ret; > + u32 id; > + > + if (!index_to_params(reg->id, ¶ms)) > + return -ENOENT; > + id =3D reg_to_encoding(¶ms); > + > + if (!is_id_reg(id)) > + return -ENOENT; > + > + if (get_user(val, uaddr)) > + return -EFAULT; > + > + r =3D &id_reg_descs[IDREG_IDX(id)].reg_desc; > + > + if (sysreg_user_write_ignore(vcpu, r)) > + return 0; > + > + if (r->set_user) { > + ret =3D (r->set_user)(vcpu, r, val); > + } else { > + WARN_ONCE(1, "ID register set_user callback is NULL\n"); > + ret =3D 0; > + } > + > + return ret; > } > > bool kvm_arm_check_idreg_table(void) > { > - return check_sysreg_table(id_reg_descs, ARRAY_SIZE(id_reg_descs),= false); > + unsigned int i; > + > + for (i =3D 0; i < ARRAY_SIZE(id_reg_descs); i++) { > + const struct sys_reg_desc *r =3D &id_reg_descs[i].reg_des= c; > + > + if (IDREG_IDX(reg_to_encoding(r)) !=3D i) { As I mentioned for the previous version of the patch, can we also check if this is an ID register ? > + kvm_err("id_reg table %pS entry %d not set correc= tly\n", > + &id_reg_descs[i].reg_desc, i); > + return false; > + } > + } > + > + return true; > } > > int kvm_arm_walk_id_regs(struct kvm_vcpu *vcpu, u64 __user *uind) > { > - const struct sys_reg_desc *i2, *end2; > + const struct id_reg_desc *i2, *end2; > unsigned int total =3D 0; > int err; > > i2 =3D id_reg_descs; > end2 =3D id_reg_descs + ARRAY_SIZE(id_reg_descs); > > - while (i2 !=3D end2) { > - err =3D walk_one_sys_reg(vcpu, i2++, &uind, &total); > + for (; i2 !=3D end2; i2++) { > + err =3D walk_one_sys_reg(vcpu, &(i2->reg_desc), &uind, &t= otal); > if (err) > return err; > } > @@ -532,12 +620,12 @@ void kvm_arm_set_default_id_regs(struct kvm *kvm) > u64 val; > > for (i =3D 0; i < ARRAY_SIZE(id_reg_descs); i++) { > - id =3D reg_to_encoding(&id_reg_descs[i]); > + id =3D reg_to_encoding(&id_reg_descs[i].reg_desc); > if (WARN_ON_ONCE(!is_id_reg(id))) If kvm_arm_check_idreg_table() checks all entries in the table are an ID register, we can remove this checking from here. Thank you, Reiji > /* Shouldn't happen */ > continue; > > - if (id_reg_descs[i].visibility =3D=3D raz_visibility) > + if (id_reg_descs[i].reg_desc.visibility =3D=3D raz_visibi= lity) > /* Hidden or reserved ID register */ > continue; > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 568ebc0fb15c..7b63d9038639 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -2519,7 +2519,7 @@ int kvm_handle_sys_reg(struct kvm_vcpu *vcpu) > * Userspace API > ***********************************************************************= ******/ > > -static bool index_to_params(u64 id, struct sys_reg_params *params) > +bool index_to_params(u64 id, struct sys_reg_params *params) > { > switch (id & KVM_REG_SIZE_MASK) { > case KVM_REG_SIZE_U64: > diff --git a/arch/arm64/kvm/sys_regs.h b/arch/arm64/kvm/sys_regs.h > index 9231d89889c7..094a7f19d93f 100644 > --- a/arch/arm64/kvm/sys_regs.h > +++ b/arch/arm64/kvm/sys_regs.h > @@ -239,6 +239,7 @@ static inline bool is_id_reg(u32 id) > > void perform_access(struct kvm_vcpu *vcpu, struct sys_reg_params *params= , > const struct sys_reg_desc *r); > +bool index_to_params(u64 id, struct sys_reg_params *params); > const struct sys_reg_desc *get_reg_by_id(u64 id, > const struct sys_reg_desc table[= ], > unsigned int num); > -- > 2.39.2.722.g9855ee24e9-goog > 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 83EF7C6FD19 for ; Mon, 13 Mar 2023 04:16:38 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GtosvSgzHWRQb1aCSN+m9w4ce8RKi3OkIRLBMxHBAqg=; b=MobTt9GLCiwrm3 WXeZHY0rxlAIciRzjQpJyU4sv5tYr8MgPq4tCH46mxMXVCfB2ST7qlHQYdDZA6rkXplnVp1rwxtdT UmjBjGwPFZuDUEmTVrMDkkiRijmKDrUYVWc5ervETzYpkBN269vrepp6UH2PuEVA3SB6EQTYG15cr lq+CiTfeEd8h88NyXjuaCJF4N4ZJ1YJB7GZxBR/1PVX3/RT9NBUATO0TwI7FLWOOBxOQ2nwfCfq7x k9xaeaMWsF2MpyTxWj7juSuSvuBKUmR73eDwrVB9bQRArn+itWMx3PkxDeDO/vtIzW+nZiLjJpwSo HViEeFwbVmc85XqpIspA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbZb2-004Gs2-TB; Mon, 13 Mar 2023 04:15:41 +0000 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbZaz-004GrL-4s for linux-arm-kernel@lists.infradead.org; Mon, 13 Mar 2023 04:15:39 +0000 Received: by mail-pg1-x52f.google.com with SMTP id q23so6157565pgt.7 for ; Sun, 12 Mar 2023 21:15:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678680935; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ICiyccuIxNKubJVNPm3vfDjG/ydP+GvUZ2kKe9U3fg8=; b=biyQkkRwcXPN0y6l0ypQo6y8R/fz/4fHdXJeJmXz0wBSq7leYuI9OHAP/2rrRzukzU TvnoBtGQwwo+XB9hibbSBZSXaluSH+SKhmpukm+vXlDMUq/bh5OuZBiQ7cQuHEvHGqry lfG1K3/E35kTlkV9lzN0Yr82Tgny/ha3VQlMMQnf0fnidYADVNv/IkuE0ohdmLWmw8e/ 0SIogYC0tuGlmPGwl4QVIJSm4ad+3kkl4phCuTnIrI6lz2IxiMthoTndh1jjM84YTc+3 TfWAj3ppORXShpAL/syrJnKe1w15K6N4N3BnBys054RHbdK3/Fy2i5XSEyjrfGlkNSoZ cKqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678680935; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ICiyccuIxNKubJVNPm3vfDjG/ydP+GvUZ2kKe9U3fg8=; b=Vf9okELVaDTw6AQ1V+N3plX2aKPQdmb6FQ172TGGt/gH+sIovmWXD0ZunyQ/GQwudS XzAdgG8tEeb7Louq4yJYGDnMQr4LpzPqwhJ6UsQy3aW9kJYUy54QYGFiyp7cqIIHGjN8 Oyli/vk7ojTwkX2iZpe5TKt6MD4QqLLG6OW9hPFklxWW9WB3lmKQoaIEiz0ird66NLlC A9+nBBEUHKoWsycpq2j2BOFxs+CsiCcFAp9LXcNXwf6ajV9Sd4KpgQKqCKJsCtrgpynl fNQ7CHvHzIJlRrPYPjHOdb0IV7XYS2udYkhmQCW6OoTlYm/Ya92zA0M+hBAf6pkdPOPT Xbaw== X-Gm-Message-State: AO0yUKX8wm8gLoGuA8EvFKBUiOfX6RemiYi13OKx7ug55MRwSZPToTBn LHNFmz5hILpL/EaKRbLYQYp9rckV+ta2Mcy3s1OpPg== X-Google-Smtp-Source: AK7set/Biz5ZXyDhWISoW5+C/6opbLb9ahW9+ZsfV9OE9R/ZUhCiuayIe/CdrNcuA6XGjyvosdpfrcnEumV4+IUH/W0= X-Received: by 2002:a65:4001:0:b0:503:2d3f:a187 with SMTP id f1-20020a654001000000b005032d3fa187mr10847064pgp.5.1678680935167; Sun, 12 Mar 2023 21:15:35 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-6-jingzhangos@google.com> In-Reply-To: <20230228062246.1222387-6-jingzhangos@google.com> From: Reiji Watanabe Date: Sun, 12 Mar 2023 21:15:18 -0700 Message-ID: Subject: Re: [PATCH v3 5/6] KVM: arm64: Introduce ID register specific descriptor To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Ricardo Koller , Raghavendra Rao Ananta X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230312_211537_227595_B0FC5A3A X-CRM114-Status: GOOD ( 29.22 ) 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 SGkgSmluZywKCk9uIE1vbiwgRmViIDI3LCAyMDIzIGF0IDEwOjIz4oCvUE0gSmluZyBaaGFuZyA8 amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4KPiBJbnRyb2R1Y2UgYW4gSUQgZmVhdHVy ZSByZWdpc3RlciBzcGVjaWZpYyBkZXNjcmlwdG9yIHRvIGluY2x1ZGUgSUQKPiByZWdpc3RlciBz cGVjaWZpYyBmaWVsZHMgYW5kIGNhbGxiYWNrcyBiZXNpZGVzIGl0cyBjb3JyZXNwb25kaW5nCj4g Z2VuZXJhbCBzeXN0ZW0gcmVnaXN0ZXIgZGVzY3JpcHRvci4KPiBOZXcgZmllbGRzIGZvciBJRCBy ZWdpc3RlciBkZXNjcmlwdG9yIHdvdWxkIGJlIGFkZGVkIGxhdGVyIHdoZW4gaXQKPiBpcyBuZWNl c3NhcnkgdG8gc3VwcG9ydCBhIHdyaXRhYmxlIElEIHJlZ2lzdGVyLgo+Cj4gTm8gZnVuY3Rpb25h bCBjaGFuZ2UgaW50ZW5kZWQuCj4KPiBDby1kZXZlbG9wZWQtYnk6IFJlaWppIFdhdGFuYWJlIDxy ZWlqaXdAZ29vZ2xlLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBSZWlqaSBXYXRhbmFiZSA8cmVpaml3 QGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmluZyBaaGFuZyA8amluZ3poYW5nb3NAZ29v Z2xlLmNvbT4KPiAtLS0KPiAgYXJjaC9hcm02NC9rdm0vaWRfcmVncy5jICB8IDE4NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICBhcmNoL2FybTY0L2t2bS9zeXNfcmVn cy5jIHwgICAyICstCj4gIGFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmggfCAgIDEgKwo+ICAzIGZp bGVzIGNoYW5nZWQsIDEzOCBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPgo+IGRpZmYg LS1naXQgYS9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9pZF9yZWdz LmMKPiBpbmRleCAyMWVjOGZjMTBkNzkuLmZjMGRjZDU1N2NiYiAxMDA2NDQKPiAtLS0gYS9hcmNo L2FybTY0L2t2bS9pZF9yZWdzLmMKPiArKysgYi9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMKPiBA QCAtMTgsNiArMTgsMTAgQEAKPgo+ICAjaW5jbHVkZSAic3lzX3JlZ3MuaCIKPgo+ICtzdHJ1Y3Qg aWRfcmVnX2Rlc2Mgewo+ICsgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAgICAgICBy ZWdfZGVzYzsKPiArfTsKPiArCj4gIHN0YXRpYyB1OCB2Y3B1X3BtdXZlcihjb25zdCBzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpCj4gIHsKPiAgICAgICAgIGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUp KQo+IEBAIC0zMjYsMjEgKzMzMCwyNSBAQCBzdGF0aWMgaW50IHNldF9pZF9kZnIwX2VsMShzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gIH0KPgo+ICAvKiBzeXNfcmVnX2Rlc2MgaW5pdGlhbGlzZXIg Zm9yIGtub3duIGNwdWZlYXR1cmUgSUQgcmVnaXN0ZXJzICovCj4gLSNkZWZpbmUgSURfU0FOSVRJ U0VEKG5hbWUpIHsgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgU1lTX0RFU0MoU1lTXyMj bmFtZSksICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRf cmVnLCAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVnLCAg ICAgICAgICAgICAgICAgXAo+IC0gICAgICAgLnNldF91c2VyID0gc2V0X2lkX3JlZywgICAgICAg ICAgICAgICAgIFwKPiAtICAgICAgIC52aXNpYmlsaXR5ID0gaWRfdmlzaWJpbGl0eSwgICAgICAg ICAgICBcCj4gKyNkZWZpbmUgSURfU0FOSVRJU0VEKG5hbWUpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICAgICAucmVnX2Rlc2MgPSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIFNZU19ERVNDKFNZU18jI25hbWUpLCAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRfcmVn LCAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5nZXRfdXNlciA9IGdldF9pZF9y ZWcsICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5zZXRfdXNlciA9IHNldF9p ZF9yZWcsICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC52aXNpYmlsaXR5ID0g aWRfdmlzaWJpbGl0eSwgICAgICAgICAgICBcCj4gKyAgICAgICB9LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gIH0KPgo+ICAvKiBzeXNfcmVnX2Rlc2Mg aW5pdGlhbGlzZXIgZm9yIGtub3duIGNwdWZlYXR1cmUgSUQgcmVnaXN0ZXJzICovCj4gLSNkZWZp bmUgQUEzMl9JRF9TQU5JVElTRUQobmFtZSkgeyAgICAgICAgICAgICAgXAo+IC0gICAgICAgU1lT X0RFU0MoU1lTXyMjbmFtZSksICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC5hY2Nlc3Mg PSBhY2Nlc3NfaWRfcmVnLCAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAuZ2V0X3VzZXIgPSBn ZXRfaWRfcmVnLCAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgLnNldF91c2VyID0gc2V0X2lk X3JlZywgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC52aXNpYmlsaXR5ID0gYWEzMl9pZF92 aXNpYmlsaXR5LCAgICAgICBcCj4gKyNkZWZpbmUgQUEzMl9JRF9TQU5JVElTRUQobmFtZSkgeyAg ICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAucmVnX2Rlc2MgPSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIFNZU19ERVNDKFNZU18j I25hbWUpLCAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5hY2Nlc3MgPSBh Y2Nlc3NfaWRfcmVnLCAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5nZXRfdXNl ciA9IGdldF9pZF9yZWcsICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5zZXRf dXNlciA9IHNldF9pZF9yZWcsICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC52 aXNpYmlsaXR5ID0gYWEzMl9pZF92aXNpYmlsaXR5LCAgICAgICBcCj4gKyAgICAgICB9LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gIH0KPgo+ICAvKgo+ IEBAIC0zNDgsMTIgKzM1NiwxNCBAQCBzdGF0aWMgaW50IHNldF9pZF9kZnIwX2VsMShzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUsCj4gICAqIHJlZ2lzdGVyIHdpdGggZW5jb2RpbmcgT3AwPTMsIE9wMT0w LCBDUm49MCwgQ1JtPWNybSwgT3AyPW9wMgo+ICAgKiAoMSA8PSBjcm0gPCA4LCAwIDw9IE9wMiA8 IDgpLgo+ICAgKi8KPiAtI2RlZmluZSBJRF9VTkFMTE9DQVRFRChjcm0sIG9wMikgeyAgICAgICAg ICAgICAgICAgICAgIFwKPiAtICAgICAgIE9wMCgzKSwgT3AxKDApLCBDUm4oMCksIENSbShjcm0p LCBPcDIob3AyKSwgICAgIFwKPiAtICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRfcmVnLCAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC5nZXRfdXNlciA9IGdldF9pZF9yZWcsICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC5zZXRfdXNlciA9IHNldF9pZF9yZWcs ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC52aXNpYmlsaXR5ID0gcmF6X3Zp c2liaWxpdHkgICAgICAgICAgICAgICAgICAgIFwKPiArI2RlZmluZSBJRF9VTkFMTE9DQVRFRChj cm0sIG9wMikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgLnJlZ19k ZXNjID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgICAgICAgICAgIE9wMCgzKSwgT3AxKDApLCBDUm4oMCksIENSbShjcm0pLCBPcDIob3AyKSwg ICAgIFwKPiArICAgICAgICAgICAgICAgLmFjY2VzcyA9IGFjY2Vzc19pZF9yZWcsICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVn LCAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5zZXRfdXNlciA9 IHNldF9pZF9yZWcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAg LnZpc2liaWxpdHkgPSByYXpfdmlzaWJpbGl0eSAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg ICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gIH0KPgo+ICAvKgo+IEBAIC0zNjEsMTUgKzM3MSwxNyBAQCBzdGF0aWMgaW50IHNldF9p ZF9kZnIwX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gICAqIEZvciBub3csIHRoZXNlIGFy ZSBleHBvc2VkIGp1c3QgbGlrZSB1bmFsbG9jYXRlZCBJRCByZWdzOiB0aGV5IGFwcGVhcgo+ICAg KiBSQVogZm9yIHRoZSBndWVzdC4KPiAgICovCj4gLSNkZWZpbmUgSURfSElEREVOKG5hbWUpIHsg ICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgU1lTX0RFU0MoU1lTXyMjbmFtZSksICAg ICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRfcmVnLCAgICAg ICAgICAgICAgICBcCj4gLSAgICAgICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVnLCAgICAgICAgICAg ICAgICAgXAo+IC0gICAgICAgLnNldF91c2VyID0gc2V0X2lkX3JlZywgICAgICAgICAgICAgICAg IFwKPiAtICAgICAgIC52aXNpYmlsaXR5ID0gcmF6X3Zpc2liaWxpdHksICAgICAgICAgICBcCj4g KyNkZWZpbmUgSURfSElEREVOKG5hbWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gKyAgICAgICAucmVnX2Rlc2MgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICAgICAgICAgICAgIFNZU19ERVNDKFNZU18jI25hbWUpLCAgICAgICAgICAgICAg ICAgICBcCj4gKyAgICAgICAgICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRfcmVnLCAgICAgICAg ICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5nZXRfdXNlciA9IGdldF9pZF9yZWcsICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC5zZXRfdXNlciA9IHNldF9pZF9yZWcsICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIC52aXNpYmlsaXR5ID0gcmF6X3Zpc2li aWxpdHksICAgICAgICAgICBcCj4gKyAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gIH0KPgo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c19y ZWdfZGVzYyBpZF9yZWdfZGVzY3NbXSA9IHsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpZF9yZWdf ZGVzYyBpZF9yZWdfZGVzY3NbS1ZNX0FSTV9JRF9SRUdfTlVNXSA9IHsKPiAgICAgICAgIC8qCj4g ICAgICAgICAgKiBJRCByZWdzOiBhbGwgSURfU0FOSVRJU0VEKCkgZW50cmllcyBoZXJlIG11c3Qg aGF2ZSBjb3JyZXNwb25kaW5nCj4gICAgICAgICAgKiBlbnRyaWVzIGluIGFybTY0X2Z0cl9yZWdz W10uCj4gQEAgLTM3OSw5ICszOTEsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rl c2MgaWRfcmVnX2Rlc2NzW10gPSB7Cj4gICAgICAgICAvKiBDUm09MSAqLwo+ICAgICAgICAgQUEz Ml9JRF9TQU5JVElTRUQoSURfUEZSMF9FTDEpLAo+ICAgICAgICAgQUEzMl9JRF9TQU5JVElTRUQo SURfUEZSMV9FTDEpLAo+IC0gICAgICAgeyBTWVNfREVTQyhTWVNfSURfREZSMF9FTDEpLCAuYWNj ZXNzID0gYWNjZXNzX2lkX3JlZywKPiAtICAgICAgICAgLmdldF91c2VyID0gZ2V0X2lkX3JlZywg LnNldF91c2VyID0gc2V0X2lkX2RmcjBfZWwxLAo+IC0gICAgICAgICAudmlzaWJpbGl0eSA9IGFh MzJfaWRfdmlzaWJpbGl0eSwgfSwKPiArICAgICAgIHsgLnJlZ19kZXNjID0gewo+ICsgICAgICAg ICAgICAgICBTWVNfREVTQyhTWVNfSURfREZSMF9FTDEpLAo+ICsgICAgICAgICAgICAgICAuYWNj ZXNzID0gYWNjZXNzX2lkX3JlZywKPiArICAgICAgICAgICAgICAgLmdldF91c2VyID0gZ2V0X2lk X3JlZywKPiArICAgICAgICAgICAgICAgLnNldF91c2VyID0gc2V0X2lkX2RmcjBfZWwxLAo+ICsg ICAgICAgICAgICAgICAudmlzaWJpbGl0eSA9IGFhMzJfaWRfdmlzaWJpbGl0eSwgfSwKPiArICAg ICAgIH0sCj4gICAgICAgICBJRF9ISURERU4oSURfQUZSMF9FTDEpLAo+ICAgICAgICAgQUEzMl9J RF9TQU5JVElTRUQoSURfTU1GUjBfRUwxKSwKPiAgICAgICAgIEFBMzJfSURfU0FOSVRJU0VEKElE X01NRlIxX0VMMSksCj4gQEAgLTQxMCw4ICs0MjYsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBz eXNfcmVnX2Rlc2MgaWRfcmVnX2Rlc2NzW10gPSB7Cj4KPiAgICAgICAgIC8qIEFBcmNoNjQgSUQg cmVnaXN0ZXJzICovCj4gICAgICAgICAvKiBDUm09NCAqLwo+IC0gICAgICAgeyBTWVNfREVTQyhT WVNfSURfQUE2NFBGUjBfRUwxKSwgLmFjY2VzcyA9IGFjY2Vzc19pZF9yZWcsCj4gLSAgICAgICAg IC5nZXRfdXNlciA9IGdldF9pZF9yZWcsIC5zZXRfdXNlciA9IHNldF9pZF9hYTY0cGZyMF9lbDEs IH0sCj4gKyAgICAgICB7IC5yZWdfZGVzYyA9IHsKPiArICAgICAgICAgICAgICAgU1lTX0RFU0Mo U1lTX0lEX0FBNjRQRlIwX0VMMSksCj4gKyAgICAgICAgICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3Nf aWRfcmVnLAo+ICsgICAgICAgICAgICAgICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVnLAo+ICsgICAg ICAgICAgICAgICAuc2V0X3VzZXIgPSBzZXRfaWRfYWE2NHBmcjBfZWwxLCB9LAo+ICsgICAgICAg fSwKPiAgICAgICAgIElEX1NBTklUSVNFRChJRF9BQTY0UEZSMV9FTDEpLAo+ICAgICAgICAgSURf VU5BTExPQ0FURUQoNCwgMiksCj4gICAgICAgICBJRF9VTkFMTE9DQVRFRCg0LCAzKSwKPiBAQCAt NDIxLDggKzQ0MSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBpZF9yZWdf ZGVzY3NbXSA9IHsKPiAgICAgICAgIElEX1VOQUxMT0NBVEVEKDQsIDcpLAo+Cj4gICAgICAgICAv KiBDUm09NSAqLwo+IC0gICAgICAgeyBTWVNfREVTQyhTWVNfSURfQUE2NERGUjBfRUwxKSwgLmFj Y2VzcyA9IGFjY2Vzc19pZF9yZWcsCj4gLSAgICAgICAgIC5nZXRfdXNlciA9IGdldF9pZF9yZWcs IC5zZXRfdXNlciA9IHNldF9pZF9hYTY0ZGZyMF9lbDEsIH0sCj4gKyAgICAgICB7IC5yZWdfZGVz YyA9IHsKPiArICAgICAgICAgICAgICAgU1lTX0RFU0MoU1lTX0lEX0FBNjRERlIwX0VMMSksCj4g KyAgICAgICAgICAgICAgIC5hY2Nlc3MgPSBhY2Nlc3NfaWRfcmVnLAo+ICsgICAgICAgICAgICAg ICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVnLAo+ICsgICAgICAgICAgICAgICAuc2V0X3VzZXIgPSBz ZXRfaWRfYWE2NGRmcjBfZWwxLCB9LAo+ICsgICAgICAgfSwKPiAgICAgICAgIElEX1NBTklUSVNF RChJRF9BQTY0REZSMV9FTDEpLAo+ICAgICAgICAgSURfVU5BTExPQ0FURUQoNSwgMiksCj4gICAg ICAgICBJRF9VTkFMTE9DQVRFRCg1LCAzKSwKPiBAQCAtNDYxLDEyICs0ODUsMTIgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgaWRfcmVnX2Rlc2NzW10gPSB7Cj4gICAqLwo+ICBp bnQgZW11bGF0ZV9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19w YXJhbXMgKnBhcmFtcykKPiAgewo+IC0gICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAq cjsKPiArICAgICAgIHUzMiBpZDsKPgo+IC0gICAgICAgciA9IGZpbmRfcmVnKHBhcmFtcywgaWRf cmVnX2Rlc2NzLCBBUlJBWV9TSVpFKGlkX3JlZ19kZXNjcykpOwo+ICsgICAgICAgaWQgPSByZWdf dG9fZW5jb2RpbmcocGFyYW1zKTsKPgo+IC0gICAgICAgaWYgKGxpa2VseShyKSkgewo+IC0gICAg ICAgICAgICAgICBwZXJmb3JtX2FjY2Vzcyh2Y3B1LCBwYXJhbXMsIHIpOwo+ICsgICAgICAgaWYg KGxpa2VseShpc19pZF9yZWcoaWQpKSkgewo+ICsgICAgICAgICAgICAgICBwZXJmb3JtX2FjY2Vz cyh2Y3B1LCBwYXJhbXMsICZpZF9yZWdfZGVzY3NbSURSRUdfSURYKGlkKV0ucmVnX2Rlc2MpOwo+ ICAgICAgICAgfSBlbHNlIHsKPiAgICAgICAgICAgICAgICAgcHJpbnRfc3lzX3JlZ19tc2cocGFy YW1zLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgZ3Vl c3QgaWRfcmVnIGFjY2VzcyBhdDogJWx4IFslMDhseF1cbiIsCj4gQEAgLTQ4MywzOCArNTA3LDEw MiBAQCB2b2lkIGt2bV9hcm1fcmVzZXRfaWRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4g ICAgICAgICB1bnNpZ25lZCBsb25nIGk7Cj4KPiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGlkX3JlZ19kZXNjcyk7IGkrKykKPiAtICAgICAgICAgICAgICAgaWYgKGlkX3JlZ19k ZXNjc1tpXS5yZXNldCkKPiAtICAgICAgICAgICAgICAgICAgICAgICBpZF9yZWdfZGVzY3NbaV0u cmVzZXQodmNwdSwgJmlkX3JlZ19kZXNjc1tpXSk7Cj4gKyAgICAgICAgICAgICAgIGlmIChpZF9y ZWdfZGVzY3NbaV0ucmVnX2Rlc2MucmVzZXQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWRf cmVnX2Rlc2NzW2ldLnJlZ19kZXNjLnJlc2V0KHZjcHUsICZpZF9yZWdfZGVzY3NbaV0ucmVnX2Rl c2MpOwo+ICB9Cj4KPiAgaW50IGt2bV9hcm1fZ2V0X2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUsIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKQo+ICB7Cj4gLSAgICAgICByZXR1cm4g a3ZtX3N5c19yZWdfZ2V0X3VzZXIodmNwdSwgcmVnLAo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlkX3JlZ19kZXNjcywgQVJSQVlfU0laRShpZF9yZWdfZGVzY3MpKTsKPiAr ICAgICAgIHU2NCBfX3VzZXIgKnVhZGRyID0gKHU2NCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyly ZWctPmFkZHI7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyOwo+ICsgICAg ICAgc3RydWN0IHN5c19yZWdfcGFyYW1zIHBhcmFtczsKPiArICAgICAgIHU2NCB2YWw7Cj4gKyAg ICAgICBpbnQgcmV0Owo+ICsgICAgICAgdTMyIGlkOwo+ICsKPiArICAgICAgIGlmICghaW5kZXhf dG9fcGFyYW1zKHJlZy0+aWQsICZwYXJhbXMpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVO T0VOVDsKPiArICAgICAgIGlkID0gcmVnX3RvX2VuY29kaW5nKCZwYXJhbXMpOwo+ICsKPiArICAg ICAgIGlmICghaXNfaWRfcmVnKGlkKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7 Cj4gKwo+ICsgICAgICAgciA9ICZpZF9yZWdfZGVzY3NbSURSRUdfSURYKGlkKV0ucmVnX2Rlc2M7 Cj4gKyAgICAgICBpZiAoci0+Z2V0X3VzZXIpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gKHIt PmdldF91c2VyKSh2Y3B1LCByLCAmdmFsKTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAg ICAgICAgIHJldCA9IDA7Cj4gKyAgICAgICAgICAgICAgIHZhbCA9IElEUkVHKHZjcHUtPmt2bSwg aWQpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmICghcmV0KQo+ICsgICAgICAgICAgICAg ICByZXQgPSBwdXRfdXNlcih2YWwsIHVhZGRyKTsKPiArCj4gKyAgICAgICByZXR1cm4gcmV0Owo+ ICB9Cj4KPiAgaW50IGt2bV9hcm1fc2V0X2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNv bnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKQo+ICB7Cj4gLSAgICAgICByZXR1cm4ga3ZtX3N5 c19yZWdfc2V0X3VzZXIodmNwdSwgcmVnLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlkX3JlZ19kZXNjcywgQVJSQVlfU0laRShpZF9yZWdfZGVzY3MpKTsKPiArICAgICAg IHU2NCBfX3VzZXIgKnVhZGRyID0gKHU2NCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylyZWctPmFk ZHI7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyOwo+ICsgICAgICAgc3Ry dWN0IHN5c19yZWdfcGFyYW1zIHBhcmFtczsKPiArICAgICAgIHU2NCB2YWw7Cj4gKyAgICAgICBp bnQgcmV0Owo+ICsgICAgICAgdTMyIGlkOwo+ICsKPiArICAgICAgIGlmICghaW5kZXhfdG9fcGFy YW1zKHJlZy0+aWQsICZwYXJhbXMpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsK PiArICAgICAgIGlkID0gcmVnX3RvX2VuY29kaW5nKCZwYXJhbXMpOwo+ICsKPiArICAgICAgIGlm ICghaXNfaWRfcmVnKGlkKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gKwo+ ICsgICAgICAgaWYgKGdldF91c2VyKHZhbCwgdWFkZHIpKQo+ICsgICAgICAgICAgICAgICByZXR1 cm4gLUVGQVVMVDsKPiArCj4gKyAgICAgICByID0gJmlkX3JlZ19kZXNjc1tJRFJFR19JRFgoaWQp XS5yZWdfZGVzYzsKPiArCj4gKyAgICAgICBpZiAoc3lzcmVnX3VzZXJfd3JpdGVfaWdub3JlKHZj cHUsIHIpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICBpZiAoci0+ c2V0X3VzZXIpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gKHItPnNldF91c2VyKSh2Y3B1LCBy LCB2YWwpOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgV0FSTl9PTkNFKDEs ICJJRCByZWdpc3RlciBzZXRfdXNlciBjYWxsYmFjayBpcyBOVUxMXG4iKTsKPiArICAgICAgICAg ICAgICAgcmV0ID0gMDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gcmV0Owo+ICB9 Cj4KPiAgYm9vbCBrdm1fYXJtX2NoZWNrX2lkcmVnX3RhYmxlKHZvaWQpCj4gIHsKPiAtICAgICAg IHJldHVybiBjaGVja19zeXNyZWdfdGFibGUoaWRfcmVnX2Rlc2NzLCBBUlJBWV9TSVpFKGlkX3Jl Z19kZXNjcyksIGZhbHNlKTsKPiArICAgICAgIHVuc2lnbmVkIGludCBpOwo+ICsKPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkX3JlZ19kZXNjcyk7IGkrKykgewo+ICsgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyID0gJmlkX3JlZ19kZXNjc1tp XS5yZWdfZGVzYzsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChJRFJFR19JRFgocmVnX3RvX2Vu Y29kaW5nKHIpKSAhPSBpKSB7CgpBcyBJIG1lbnRpb25lZCBmb3IgdGhlIHByZXZpb3VzIHZlcnNp b24gb2YgdGhlIHBhdGNoLApjYW4gd2UgYWxzbyBjaGVjayBpZiB0aGlzIGlzIGFuIElEIHJlZ2lz dGVyID8KCj4gKyAgICAgICAgICAgICAgICAgICAgICAga3ZtX2VycigiaWRfcmVnIHRhYmxlICVw UyBlbnRyeSAlZCBub3Qgc2V0IGNvcnJlY3RseVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZpZF9yZWdfZGVzY3NbaV0ucmVnX2Rlc2MsIGkpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIHJldHVybiB0cnVlOwo+ICB9Cj4KPiAgaW50IGt2bV9hcm1fd2Fsa19pZF9y ZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZCkKPiAgewo+IC0gICAg ICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqaTIsICplbmQyOwo+ICsgICAgICAgY29uc3Qg c3RydWN0IGlkX3JlZ19kZXNjICppMiwgKmVuZDI7Cj4gICAgICAgICB1bnNpZ25lZCBpbnQgdG90 YWwgPSAwOwo+ICAgICAgICAgaW50IGVycjsKPgo+ICAgICAgICAgaTIgPSBpZF9yZWdfZGVzY3M7 Cj4gICAgICAgICBlbmQyID0gaWRfcmVnX2Rlc2NzICsgQVJSQVlfU0laRShpZF9yZWdfZGVzY3Mp Owo+Cj4gLSAgICAgICB3aGlsZSAoaTIgIT0gZW5kMikgewo+IC0gICAgICAgICAgICAgICBlcnIg PSB3YWxrX29uZV9zeXNfcmVnKHZjcHUsIGkyKyssICZ1aW5kLCAmdG90YWwpOwo+ICsgICAgICAg Zm9yICg7IGkyICE9IGVuZDI7IGkyKyspIHsKPiArICAgICAgICAgICAgICAgZXJyID0gd2Fsa19v bmVfc3lzX3JlZyh2Y3B1LCAmKGkyLT5yZWdfZGVzYyksICZ1aW5kLCAmdG90YWwpOwo+ICAgICAg ICAgICAgICAgICBpZiAoZXJyKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7 Cj4gICAgICAgICB9Cj4gQEAgLTUzMiwxMiArNjIwLDEyIEBAIHZvaWQga3ZtX2FybV9zZXRfZGVm YXVsdF9pZF9yZWdzKHN0cnVjdCBrdm0gKmt2bSkKPiAgICAgICAgIHU2NCB2YWw7Cj4KPiAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkX3JlZ19kZXNjcyk7IGkrKykgewo+IC0g ICAgICAgICAgICAgICBpZCA9IHJlZ190b19lbmNvZGluZygmaWRfcmVnX2Rlc2NzW2ldKTsKPiAr ICAgICAgICAgICAgICAgaWQgPSByZWdfdG9fZW5jb2RpbmcoJmlkX3JlZ19kZXNjc1tpXS5yZWdf ZGVzYyk7Cj4gICAgICAgICAgICAgICAgIGlmIChXQVJOX09OX09OQ0UoIWlzX2lkX3JlZyhpZCkp KQoKSWYga3ZtX2FybV9jaGVja19pZHJlZ190YWJsZSgpIGNoZWNrcyBhbGwgZW50cmllcyBpbiB0 aGUgdGFibGUKYXJlIGFuIElEIHJlZ2lzdGVyLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2tpbmcg ZnJvbSBoZXJlLgoKVGhhbmsgeW91LApSZWlqaQoKCj4gICAgICAgICAgICAgICAgICAgICAgICAg LyogU2hvdWxkbid0IGhhcHBlbiAqLwo+ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+Cj4gLSAgICAgICAgICAgICAgIGlmIChpZF9yZWdfZGVzY3NbaV0udmlzaWJpbGl0eSA9PSBy YXpfdmlzaWJpbGl0eSkKPiArICAgICAgICAgICAgICAgaWYgKGlkX3JlZ19kZXNjc1tpXS5yZWdf ZGVzYy52aXNpYmlsaXR5ID09IHJhel92aXNpYmlsaXR5KQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhpZGRlbiBvciByZXNlcnZlZCBJRCByZWdpc3RlciAqLwo+ICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19y ZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gaW5kZXggNTY4ZWJjMGZiMTVjLi43 YjYzZDkwMzg2MzkgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+ICsr KyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPiBAQCAtMjUxOSw3ICsyNTE5LDcgQEAgaW50 IGt2bV9oYW5kbGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAqIFVzZXJzcGFj ZSBBUEkKPiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+Cj4gLXN0YXRpYyBib29sIGluZGV4X3Rv X3BhcmFtcyh1NjQgaWQsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcGFyYW1zKQo+ICtib29sIGlu ZGV4X3RvX3BhcmFtcyh1NjQgaWQsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcGFyYW1zKQo+ICB7 Cj4gICAgICAgICBzd2l0Y2ggKGlkICYgS1ZNX1JFR19TSVpFX01BU0spIHsKPiAgICAgICAgIGNh c2UgS1ZNX1JFR19TSVpFX1U2NDoKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3Jl Z3MuaCBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmgKPiBpbmRleCA5MjMxZDg5ODg5YzcuLjA5 NGE3ZjE5ZDkzZiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5oCj4gKysr IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuaAo+IEBAIC0yMzksNiArMjM5LDcgQEAgc3RhdGlj IGlubGluZSBib29sIGlzX2lkX3JlZyh1MzIgaWQpCj4KPiAgdm9pZCBwZXJmb3JtX2FjY2Vzcyhz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcGFyYW1zLAo+ICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcik7Cj4gK2Jvb2wg aW5kZXhfdG9fcGFyYW1zKHU2NCBpZCwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwYXJhbXMpOwo+ ICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpnZXRfcmVnX2J5X2lkKHU2NCBpZCwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVn X2Rlc2MgdGFibGVbXSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBudW0pOwo+IC0tCj4gMi4zOS4yLjcyMi5nOTg1NWVlMjRlOS1nb29nCj4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK