From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f48.google.com (mail-dl1-f48.google.com [74.125.82.48]) (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 50AFD31716A for ; Sun, 28 Jun 2026 07:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782632096; cv=none; b=Hm1xUKzRvNd9MjxLQm3YqXdMeH0ftu0r5cHIBdNZb45dDOSs1bTzhWolm/a9a7E7qNI0Rp/tZReHGpOp+geN68z42cAvxt4UqJ6tzNv7HbJd1KsrYWu8RgboCeVCrcEuHCAJUyw0uP1RBgp2OpFoFuz+Kvp78M3UPqn2WZ4rrP4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782632096; c=relaxed/simple; bh=EV8iC9i6Gy9ckKT7DkWM9xWacu6PAtfwN5tasg0SZVY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=FI3CqV/GAWG0NbMXT93UXyO+fYT9ap25eKO+FBzaaO+NNB++PPOGK38zJiC8ImFgjfOqRBhBeXFithlcJmQaaVopeBZGa7QyGppBuEKx/gmovBcmRSmWBB0zx5xTHW8nsV1hYSCCc38Ca7yorjew/GWmEX6Y+8DLZZW/P5fHUvs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=oKHB573e; arc=none smtp.client-ip=74.125.82.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oKHB573e" Received: by mail-dl1-f48.google.com with SMTP id a92af1059eb24-139f1dfc9faso1092362c88.0 for ; Sun, 28 Jun 2026 00:34:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782632094; x=1783236894; darn=vger.kernel.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=vledIumPthBBbn2WzmCtAqEFwAG6SWS4TJU6ZxwEn40=; b=oKHB573ejPdUdQCoJvdQCIumBBpn4SJjQrB16z78AnsCJie07bAtUcXsI4GQrLErXq VbQdV58QNAM4PNvFDn74QjrKGqLqxjcV9NXl20R2os1VBDFhIuXMbSINWSsFHkvsyxl8 7W+l5cHt+x8tD4R8isJA9Mh8WYa6TZ9vNJ5TkyKBhdEOq3O60/8MPytTP/BtRszyyJo4 RD3b69FDr3PLqUY7HbTzHVB1zcaTgKikhcA3DXf5E6EFGvx/Zqo3qay5lZ3nl9xopdQT qxGajDNGvwnucpCiY9Xz4PTVH+FQ6BOxCWtEMJaapD7cAl7OGWygVBU2UpcdFNFdww61 oOEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782632094; x=1783236894; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vledIumPthBBbn2WzmCtAqEFwAG6SWS4TJU6ZxwEn40=; b=FBmWrMkGcqZFs1jywnS+ynE3koPOrA6Ah50ZSQoMxyunY4paV80OrLKa1yombtbS9S gaC0eWCXjbd1z8bTlcLkyV1DvVXyJxQAyPX2Iu+OhDRG6GzK0FJgkQoRQK1oJhiBpbUM hM/9zb1xZAZwKHDFYTg4GZswiA1q7QuX6rJX+PC9gW600tkxOrN1PRkVckuxnWgXrAcf LRxP5gWoaL5QaNTmTON78USlwCt5TmsuJ4Dz97Ov7fY6C9269z6bkiuU1iYMa6dRqEDn HAaUCMKXKjmfs3aejTeZFUkjTTqK5P0syWeOfitvlcIb8SUv92i9Zjg3ZOXwyRqje2w7 dxmw== X-Forwarded-Encrypted: i=1; AFNElJ/Q9kBaKXseMkXEoOgS/hdnjtI10LiOCSzeXKLs0IkLopBofA2GMDNs0w/l63y2cvAz3scZvtccCaTmKxU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1hftj9jUGF6dukGzsKKrt51E9SL5prylT+mIRem/024WukTY9 316z4Z9XAjH4DJdzEJm01kj6bTJVAKePLjImCD1MwYto7lXuiOhb7rlI X-Gm-Gg: AfdE7cl0Rw1hbdURAryN74YeyDRCaXKTA3bdchx3iedYiOuBwlUbo/3YXvF0O0QNyMF sGd9oWitkatN+iAp2S1NRRmeMw7/2DZ3QL9qnQRNhBxmFDJjZgnqrvZvoMGCqzloe33Whp2LpHu VYAv+Zk6LB5MsOcY+YQ+oyRR/mS0ntSak3zAkzsBtk/LuiLq6P3jYVjgTosDSLCn0enomgP9PCJ AZbpDufyZgap1puGFZyFtHZoy0XTi2w66jkWgeZ77PRoXXqR9v0OP8OEnu1D5IKE/FyRP63o68m 8xHYypnjJisEOU+meVAfs44xtUuHkX4s775LkqIpz4uvW0cACWSu7PyoQaWQBtucOw8YFllIP38 nxsZe45II0bAgth6k6K8F1EpNtbiFzEGQZpVYr3xwVVIJPiIWNVW/shgg4Rm4eX3opDx71csMZz TykrdfUeOXkT1WYwUkpnrTu8NqNQeD X-Received: by 2002:a05:7022:f694:b0:138:637:6227 with SMTP id a92af1059eb24-139dba0a865mr13084203c88.11.1782632094282; Sun, 28 Jun 2026 00:34:54 -0700 (PDT) Received: from computer ([2a09:bac5:3b4a:8aa::dd:15]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-139e42338f9sm19928106c88.0.2026.06.28.00.34.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jun 2026 00:34:53 -0700 (PDT) Date: Sun, 28 Jun 2026 13:04:42 +0530 From: Varun R Mallya To: Pu Lehui Cc: pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, memxor@gmail.com, bjorn@kernel.org, alex@ghiti.fr, martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org, emil@etsalapatis.com, puranjay@kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH bpf-next 2/3] riscv, bpf: Add support for BPF exceptions Message-ID: References: <20260621144259.288135-1-varunrmallya@gmail.com> <20260621144259.288135-3-varunrmallya@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org 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: On Tue, Jun 23, 2026 at 10:11:57AM +0800, Pu Lehui wrote: > > We don't need to duplicate code. Please merge it. Making this change in the next version! > > + > > + if (!aux->exception_cb && aux->exception_boundary) { > > + /* > > + * Boundary program: allocate the frame and save the > > + * full callee-saved set, capturing the caller's values. > > + */ > > + emit_addi(RV_REG_SP, RV_REG_SP, -stack_adjust, ctx); > > + for (i = 0; i < ARRAY_SIZE(rv_exception_csave_regs); i++) { > > + emit_sd(RV_REG_SP, store_offset, > > + rv_exception_csave_regs[i], ctx); > > + store_offset -= 8; > > + } > > + emit_addi(RV_REG_FP, RV_REG_SP, stack_adjust, ctx); > > + } else { > > + /* > > + * Exception callback, reuse the boundary program's > > + * frame, whose frame pointer is passed in a2. Setting > > something confused—why is it A2? I feel like I missed something. bpf_throw() invokes the exception callback as bpf_exception_cb(cookie, sp, bp, 0, 0) , whose 3rd argument (which, according to RISC-V's calling convention resides in A2) is the boundary prog's frame pointer. Since this else branch handles the callback, it expects A2 to have the frame pointer. The arm implementation does something very similar with emit(A64_MOV(1, A64_FP, A64_R(2)), ctx) where A64_R(2) is the third arg. > > + * SP = FP - stack_adjust lines the epilogue's loads up > > + * with the registers the boundary saved. > > + */ > > + emit_mv(RV_REG_FP, RV_REG_A2, ctx); > > + emit_addi(RV_REG_SP, RV_REG_FP, -stack_adjust, ctx); > > + } > > + > > + goto tail_setup; > > + } > > + > > if (seen_reg(RV_REG_RA, ctx)) > > stack_adjust += 8; > > stack_adjust += 8; /* RV_REG_FP */ > > @@ -2082,6 +2173,7 @@ void bpf_jit_build_prologue(struct rv_jit_context *ctx, bool is_subprog) > > emit_addi(RV_REG_FP, RV_REG_SP, stack_adjust, ctx); > > +tail_setup: > > if (bpf_stack_adjust) > > emit_addi(RV_REG_S5, RV_REG_SP, bpf_stack_adjust, ctx); > > @@ -2157,3 +2249,13 @@ bool bpf_jit_supports_fsession(void) > > { > > return true; > > } > > + > > +bool bpf_jit_supports_exceptions(void) > > +{ > > + /* > > + * bpf_throw() unwinds by walking the frame-pointer chain from inside > > + * the kernel back into the BPF frames (see arch_bpf_stack_walk()), so > > + * exceptions require the frame-pointer unwinder to be enabled. > > + */ > > + return IS_ENABLED(CONFIG_FRAME_POINTER); > > riscv select ARCH_WANT_FRAME_POINTERS, so this will always true I checked that the kernel compiled even when I turned CONFIG_FRAME_POINTER explicitly off, so not gating this would be a mistake, right ? ARCH_WANT_FRAME_POINTERS makes CONFIG_FRAME_POINTER user selectable and makes it default to true, but it's not always true. What does force it is PERF_EVENTS=y but if that too is turned off, then CONFIG_FRAME_POINTER can also be turned off. Thanks for the review!! - Varun > > +} 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 3C45BC43327 for ; Sun, 28 Jun 2026 07:35:15 +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=X5t9pthncDhXK2jtkGSrh/IuTnq2wE7p0HbpuOuaCEk=; b=Z+Hm5AboSETq+m QE5Pm/MZJ0XTus+OvwXY1fgh78qiB5o4oW0PPgoZCaT2eW+OcH5db3Qh7GZJccQ0ypdj/Pq/49b06 bUF2xrIrk5aiaHPyTBSk6cMdSjKrMohKRUCk8dgEKww5wXtKAjBhDFbCZ0vVo7LNOQjsVMEZmH0I9 QX0cbRrvKat74jXghQFHfepS56yfr+r4f9FIQzvWUN/tgHXF0xJci7V9bSAbCNCOY2vCNwYsWmNE/ rn8nyY8nTw7bT60McEviOmO4r/fjIp+iVziAR21gwsWLJbiGSvOnIScjGdO8vd4dQ8OESTc+8AkeF 2fxCjVHZs8iadbTf9qFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wdk2c-0000000Cxth-2sjN; Sun, 28 Jun 2026 07:34:58 +0000 Received: from mail-dl1-x1231.google.com ([2607:f8b0:4864:20::1231]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wdk2Z-0000000CxtL-2aVe for linux-riscv@lists.infradead.org; Sun, 28 Jun 2026 07:34:57 +0000 Received: by mail-dl1-x1231.google.com with SMTP id a92af1059eb24-139f1dfc9faso1092357c88.0 for ; Sun, 28 Jun 2026 00:34:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782632094; x=1783236894; 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=vledIumPthBBbn2WzmCtAqEFwAG6SWS4TJU6ZxwEn40=; b=d2bttw/bRCPQ5PlNzodB18ix6Zed0+m+p+c0ta8YiMb8R7rlHqd55gfBr0/It7P/PK 5a2UUmJiZteCYXWd4uI0w3IOz9ac1T/U8/Cjd3C8FGhUzpAxSTZqBnyHVV++MRZ7Gr9A Ckx9+m6nC5M20pUUOALwxUAJRCqoMwsjE00iHG7RNO4WS8iUDa9DjBY1wUG9UpJqksXs g8o9EpY+Y/ZyHm0SDJut+rcL0BZbfKQXLXGz8sPc4NYy84ctxolput08WbRp2gOtMskw qSSQAljandRO1PBwwqwPIw0lsXdiMm6y1nyuJbdcwXmidGUYJCdKrDq34RZvxJGOrGNN gYwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782632094; x=1783236894; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vledIumPthBBbn2WzmCtAqEFwAG6SWS4TJU6ZxwEn40=; b=kJJAMN5KDPwT/XJoDhhejxbIrfF5gk/84TzGaNXq6Z57qPvMb1YGHy4OWu4Au8nRQx js78elArySmYc0GtVZmupxJHmwJm1noQ6KWCAai+KRG2dyDF9AyEJBneKsPRkD4kjbkx rBw7RiJqlXVLivQKq6MSN4ilr73HL2XLaMcU80gMBYsNX59lob+sAddcCr2d4DURffzA 4HXywiEE62adEDHPw4NGc8n9SbsXgUeCpCxc+DjrBAv02Km8eYVh4HSAoDQhg0jwpWN3 RdU8LWrV33jJ3Gzvw+/6ZWW7SS/wTg2kgJHyTKCIoHVgcl6mTAM0EbhxiLiDak3tjwPL CLpg== X-Forwarded-Encrypted: i=1; AFNElJ8OXhqohZXj0yI4O/tMQyHNBHW993sAOZXHpfcCBz0kQ2vo9k6MLjXR6TkWY9p5WVtbdEL5uChcCbCPVA==@lists.infradead.org X-Gm-Message-State: AOJu0YzBBPHN1AIMVdgd9D72uXOJbSjFQXMmngjfGa7NjUiniYoO6thy RPul6HZUD1ITh4SipBJLNVcfsRHeOQMiOMv2NByiRhs/8UKlz+G8gjEb X-Gm-Gg: AfdE7cnIJxod7W7dE93qVdsJ+T2XfeMSc5zn5qB48krlF04YVsuNZb4THo9pnDwdnhe qBSP7vjj/ILbY+8qEu7Q4vyKmGqqWew948OKWrxVUJynU5P7Ew8yMTbY+Ju4kIQHLaSZWdq8fzF RL7oDvf7zCIwp4H2WPiH+1WX+o85Ajtad9RX2qROnVUGTCo2+BBmfV4rlQmHQG4Jng2AhOWWNaB mB1LBQ9YUkqZGJDjtl11bJH+n9rGsjPxyR5iSRb2L0aJq/teCEEplddMs6i6zRDYwjVmSZQehGk moRBVml854kxqnV7QTqLuGRWA4kc4JN6cNLRQrVNrFSXOn8M/ZI86ku55vLOc3WWl7HgcyCN83q +gPVvksQp4n3VZKhB92w9fZlO6q+Pmgdr+PTB0XQDYOxwC58zEmxxtmyeupKhKKKzmryY2L5iFI kXb7UuosFt0u5gRrsZZN6hvism4TiD X-Received: by 2002:a05:7022:f694:b0:138:637:6227 with SMTP id a92af1059eb24-139dba0a865mr13084203c88.11.1782632094282; Sun, 28 Jun 2026 00:34:54 -0700 (PDT) Received: from computer ([2a09:bac5:3b4a:8aa::dd:15]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-139e42338f9sm19928106c88.0.2026.06.28.00.34.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jun 2026 00:34:53 -0700 (PDT) Date: Sun, 28 Jun 2026 13:04:42 +0530 From: Varun R Mallya To: Pu Lehui Cc: pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, memxor@gmail.com, bjorn@kernel.org, alex@ghiti.fr, martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org, emil@etsalapatis.com, puranjay@kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH bpf-next 2/3] riscv, bpf: Add support for BPF exceptions Message-ID: References: <20260621144259.288135-1-varunrmallya@gmail.com> <20260621144259.288135-3-varunrmallya@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260628_003456_400121_90D56601 X-CRM114-Status: GOOD ( 21.22 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVHVlLCBKdW4gMjMsIDIwMjYgYXQgMTA6MTE6NTdBTSArMDgwMCwgUHUgTGVodWkgd3JvdGU6 Cj4gCj4gV2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUgY29kZS4gUGxlYXNlIG1lcmdlIGl0LgoK TWFraW5nIHRoaXMgY2hhbmdlIGluIHRoZSBuZXh0IHZlcnNpb24hCgo+ID4gKwo+ID4gKwkJaWYg KCFhdXgtPmV4Y2VwdGlvbl9jYiAmJiBhdXgtPmV4Y2VwdGlvbl9ib3VuZGFyeSkgewo+ID4gKwkJ CS8qCj4gPiArCQkJICogQm91bmRhcnkgcHJvZ3JhbTogYWxsb2NhdGUgdGhlIGZyYW1lIGFuZCBz YXZlIHRoZQo+ID4gKwkJCSAqIGZ1bGwgY2FsbGVlLXNhdmVkIHNldCwgY2FwdHVyaW5nIHRoZSBj YWxsZXIncyB2YWx1ZXMuCj4gPiArCQkJICovCj4gPiArCQkJZW1pdF9hZGRpKFJWX1JFR19TUCwg UlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpOwo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKTsgaSsrKSB7Cj4gPiArCQkJCWVtaXRf c2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsCj4gPiArCQkJCQlydl9leGNlcHRpb25fY3NhdmVf cmVnc1tpXSwgY3R4KTsKPiA+ICsJCQkJc3RvcmVfb2Zmc2V0IC09IDg7Cj4gPiArCQkJfQo+ID4g KwkJCWVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpOwo+ ID4gKwkJfSBlbHNlIHsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIEV4Y2VwdGlvbiBjYWxsYmFjaywg cmV1c2UgdGhlIGJvdW5kYXJ5IHByb2dyYW0ncwo+ID4gKwkJCSAqIGZyYW1lLCB3aG9zZSBmcmFt ZSBwb2ludGVyIGlzIHBhc3NlZCBpbiBhMi4gU2V0dGluZwo+IAo+IHNvbWV0aGluZyBjb25mdXNl ZOKAlHdoeSBpcyBpdCBBMj8gSSBmZWVsIGxpa2UgSSBtaXNzZWQgc29tZXRoaW5nLgoKYnBmX3Ro cm93KCkgaW52b2tlcyB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFzIApicGZfZXhjZXB0aW9uX2Ni KGNvb2tpZSwgc3AsIGJwLCAwLCAwKSAsIHdob3NlIDNyZCBhcmd1bWVudCAod2hpY2gsCmFjY29y ZGluZyB0byBSSVNDLVYncyBjYWxsaW5nIGNvbnZlbnRpb24gcmVzaWRlcyBpbiBBMikgaXMgdGhl IGJvdW5kYXJ5CnByb2cncyBmcmFtZSBwb2ludGVyLiBTaW5jZSB0aGlzIGVsc2UgYnJhbmNoIGhh bmRsZXMKdGhlIGNhbGxiYWNrLCBpdCBleHBlY3RzIEEyIHRvIGhhdmUgdGhlIGZyYW1lIHBvaW50 ZXIuIFRoZSBhcm0KaW1wbGVtZW50YXRpb24gZG9lcyBzb21ldGhpbmcgdmVyeSBzaW1pbGFyIHdp dGggZW1pdChBNjRfTU9WKDEsIEE2NF9GUCwgQTY0X1IoMikpLCBjdHgpCndoZXJlIEE2NF9SKDIp IGlzIHRoZSB0aGlyZCBhcmcuCgo+ID4gKwkJCSAqIFNQID0gRlAgLSBzdGFja19hZGp1c3QgbGlu ZXMgdGhlIGVwaWxvZ3VlJ3MgbG9hZHMgdXAKPiA+ICsJCQkgKiB3aXRoIHRoZSByZWdpc3RlcnMg dGhlIGJvdW5kYXJ5IHNhdmVkLgo+ID4gKwkJCSAqLwo+ID4gKwkJCWVtaXRfbXYoUlZfUkVHX0ZQ LCBSVl9SRUdfQTIsIGN0eCk7Cj4gPiArCQkJZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX0ZQ LCAtc3RhY2tfYWRqdXN0LCBjdHgpOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZ290byB0YWlsX3Nl dHVwOwo+ID4gKwl9Cj4gPiArCj4gPiAgIAlpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKQo+ ID4gICAJCXN0YWNrX2FkanVzdCArPSA4Owo+ID4gICAJc3RhY2tfYWRqdXN0ICs9IDg7IC8qIFJW X1JFR19GUCAqLwo+ID4gQEAgLTIwODIsNiArMjE3Myw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9w cm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKQo+ID4g ICAJZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7Cj4g PiArdGFpbF9zZXR1cDoKPiA+ICAgCWlmIChicGZfc3RhY2tfYWRqdXN0KQo+ID4gICAJCWVtaXRf YWRkaShSVl9SRUdfUzUsIFJWX1JFR19TUCwgYnBmX3N0YWNrX2FkanVzdCwgY3R4KTsKPiA+IEBA IC0yMTU3LDMgKzIyNDksMTMgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQp Cj4gPiAgIHsKPiA+ICAgCXJldHVybiB0cnVlOwo+ID4gICB9Cj4gPiArCj4gPiArYm9vbCBicGZf aml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCkKPiA+ICt7Cj4gPiArCS8qCj4gPiArCSAqIGJw Zl90aHJvdygpIHVud2luZHMgYnkgd2Fsa2luZyB0aGUgZnJhbWUtcG9pbnRlciBjaGFpbiBmcm9t IGluc2lkZQo+ID4gKwkgKiB0aGUga2VybmVsIGJhY2sgaW50byB0aGUgQlBGIGZyYW1lcyAoc2Vl IGFyY2hfYnBmX3N0YWNrX3dhbGsoKSksIHNvCj4gPiArCSAqIGV4Y2VwdGlvbnMgcmVxdWlyZSB0 aGUgZnJhbWUtcG9pbnRlciB1bndpbmRlciB0byBiZSBlbmFibGVkLgo+ID4gKwkgKi8KPiA+ICsJ cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0ZSQU1FX1BPSU5URVIpOwo+IAo+IHJpc2N2IHNlbGVj dCBBUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlMsIHNvIHRoaXMgd2lsbCBhbHdheXMgdHJ1ZQoKSSBj aGVja2VkIHRoYXQgdGhlIGtlcm5lbCBjb21waWxlZCBldmVuIHdoZW4gSSB0dXJuZWQKQ09ORklH X0ZSQU1FX1BPSU5URVIgZXhwbGljaXRseSBvZmYsIHNvIG5vdCBnYXRpbmcgdGhpcwp3b3VsZCBi ZSBhIG1pc3Rha2UsIHJpZ2h0ID8gQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTIG1ha2VzCkNPTkZJ R19GUkFNRV9QT0lOVEVSIHVzZXIgc2VsZWN0YWJsZSBhbmQgbWFrZXMgaXQgZGVmYXVsdCB0bwp0 cnVlLCBidXQgaXQncyBub3QgYWx3YXlzIHRydWUuIFdoYXQgZG9lcyBmb3JjZSBpdCBpcyBQRVJG X0VWRU5UUz15IGJ1dCBpZgp0aGF0IHRvbyBpcyB0dXJuZWQgb2ZmLCB0aGVuIENPTkZJR19GUkFN RV9QT0lOVEVSIGNhbiBhbHNvIGJlIHR1cm5lZApvZmYuCgpUaGFua3MgZm9yIHRoZSByZXZpZXch IQotIFZhcnVuCj4gPiArfQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1yaXNjdgo=