From nobody Fri Dec 19 20:57:57 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 8C5101DB13A for ; Wed, 15 Oct 2025 19:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558237; cv=none; b=nzi0AQ9I2G21vJ0EM/8Bre6DIYZ1vnDQE7PlYsMD1iGwbLuxg41nJRObjDInK0jCdX3Y1oy4WlORuO9jVx6skPdTYOqw4UzKmV9i6ost9fkgWOb/hS0c/wOoWMhtNsyAwBhMEL9ND7yR6oMJtuAS3MRs4guH1yfswzNcQTOO84w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558237; c=relaxed/simple; bh=MLXPF0QgxbIeETXLyqX3g4+Bs0uPMnPTEoY8SSMui54=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XaGVhVus8UVfW8SQzO9eiZPyEqjj74WDEXv2uOS77wooY7cKBCojyhYMrrPBhHKzliSmiXI9TI1k6fUEYIEF3efjuRTYaCfJMjRKT+Uopk19+1jCFeqxuH0fw2ofKr61Ig5PiDr7Enf890WciAhO8v63fbWJ4fRZSr29PLVBMYE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=mYb4vZj1; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="mYb4vZj1" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-7a213c3c3f5so2559b3a.3 for ; Wed, 15 Oct 2025 12:57:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1760558235; x=1761163035; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VigWJ0s8yQhr+m/VwpfA3DOr5u41jNPv40KwlpsnDE4=; b=mYb4vZj1Ntt/7kOk/fwAdhgnDoqmElQW4EiBMlc1alUL4tkbhXbKo5by+wtzvWcdUK K1/Y9AcjPu13oPs09y9saN9uv4jwlr3sekV0J57wAdhur+2zjX3tFftQNrbdyHcmVn0E F7H5XxYH5wiAqr7OUQnSe97quk4DkJ65ugpUnD8FNWpQ+/EY6eCckQ0b7duiAgrbJhzL N0oIsfl1wR5gHYcxIo7aYILagn0x/0t5gmNQ7u+eQUVK5aL3ekvut+8Rx+cqFGjHjyVU IoXoah2vGJVaAMMs3inMLHxROobK9NzBiL8hhC7HCzojKvUrVW2x6RzKFnLPMI4NfZCt nJ3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760558235; x=1761163035; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VigWJ0s8yQhr+m/VwpfA3DOr5u41jNPv40KwlpsnDE4=; b=DAoY6VV6p8x9V8Yy2RfajEt9AoIL+5awh2T4GpP5zQyT6fWY4RxVx+Hh2SNKokZIVz MGD7UzeAFwjFVUL5PhlCWoksNyVCOfGu0Kj7NtOqUezy28mh3Sng69t/Uoz9E+ey5kZX Snc5LrfYl6f9599g4jTH3bpI9mLkktcB7rrUJIzY87O+HALedlw+Y1sS9HC6TxJOmpFF /Nhj2PK6nXmz2Jq7vX8IipD/1zvAtyBGX5aoM/9kg4sFp1JRLlLF26CNOXTqMjzknxJA znat6WXaBJwzcx3jnEuod0gmhx6aIoCt/cACoQAYgk1vBUtOiDJwxY8IGf8Bw77oRsR3 9MJw== X-Forwarded-Encrypted: i=1; AJvYcCXlnFoU5p7/OcLQ48A9YXYCVvTMbWHfrNnHo7GPEahEYnDKwCAuPhOlldozNSbdEl/HoWlpnWx3pYHe+Sw=@vger.kernel.org X-Gm-Message-State: AOJu0YxV94JY1HQVcwyqgOFBvrM1L23XWe/c7py8dUEqe0leDON1YmjE RDG4b5mQs5AfFzkG1T67wkjHzNbRa2VqnolTdCu/PpwQ0e73Ha8vd2mdFoDquwliTi0= X-Gm-Gg: ASbGncsgf/cHc/qaPoU1O9ogzYQ/FBgKnwqlHMhsMJaFIq1Zi3TwIG0YzfnaJBRStJG 7YHzpH2sqFTfkXGcaZQctAPGBDdTV4T1CIoQicWi/UnuERfkyfzlx9wZ/ufdqOi+irmtZzU0JTF 3WzHcgGBNQO0cL3stsUw6Eatqbju0/QlVNk4TpjDTljt3CP5y/h9N9CpWMIssG76aW+dfeLQEUJ 8Wf1RsOqGrSopPOyaFRnkkK/RUpkU6PBHfB5Yev4yNBcbXey2/jcbltTCdJKru9JXKamM+ZdXb/ mwYYhPfHBBbp2xd+jEc8lVONu/b07sAEeEmABMowPjrCAkoNlcUcsO3nHsZdhJjs8UNvAWc1UIk 8YGcZ3UXAXaP90uOY9+w/m356Nm9lo8uBabrx2AOSU+eXb5TKacmne0ijxAgAJORqs0A4+n7jpw == X-Google-Smtp-Source: AGHT+IEyhAaC9z/YrPh8+QNDt58P5aYq0LIPPVePEvsYRW59ZLwjyZl10FeM552odxwsndFYq3etqg== X-Received: by 2002:a05:6a00:3ccd:b0:771:fdd9:efa0 with SMTP id d2e1a72fcca58-7938723b3a3mr38560001b3a.15.1760558234951; Wed, 15 Oct 2025 12:57:14 -0700 (PDT) Received: from sw06.internal.sifive.com ([4.53.31.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7992b06075fsm20151322b3a.17.2025.10.15.12.57.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 12:57:14 -0700 (PDT) From: Samuel Holland To: Anup Patel , Thomas Gleixner Cc: Palmer Dabbelt , linux-kernel@vger.kernel.org, Alexandre Ghiti , linux-riscv@lists.infradead.org, Paul Walmsley , Samuel Holland , Albert Ou Subject: [PATCH 1/4] irqchip/riscv-imsic: Remove redundant irq_data lookups Date: Wed, 15 Oct 2025 12:55:12 -0700 Message-ID: <20251015195712.3813004-2-samuel.holland@sifive.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20251015195712.3813004-1-samuel.holland@sifive.com> References: <20251015195712.3813004-1-samuel.holland@sifive.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" imsic_irq_set_affinity() already takes the irq_data pointer as a parameter, so it is pointless to look it up again from the IRQ number. Signed-off-by: Samuel Holland --- drivers/irqchip/irq-riscv-imsic-platform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-riscv-imsic-platform.c b/drivers/irqchip/i= rq-riscv-imsic-platform.c index 643c8e459611..7228a33f6c37 100644 --- a/drivers/irqchip/irq-riscv-imsic-platform.c +++ b/drivers/irqchip/irq-riscv-imsic-platform.c @@ -158,11 +158,11 @@ static int imsic_irq_set_affinity(struct irq_data *d,= const struct cpumask *mask tmp_vec.local_id =3D new_vec->local_id; =20 /* Point device to the temporary vector */ - imsic_msi_update_msg(irq_get_irq_data(d->irq), &tmp_vec); + imsic_msi_update_msg(d, &tmp_vec); } =20 /* Point device to the new vector */ - imsic_msi_update_msg(irq_get_irq_data(d->irq), new_vec); + imsic_msi_update_msg(d, new_vec); =20 /* Update irq descriptors with the new vector */ d->chip_data =3D new_vec; --=20 2.47.2 From nobody Fri Dec 19 20:57:57 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 D5A7D304BCD for ; Wed, 15 Oct 2025 19:57:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558238; cv=none; b=iMGOhtGoILSRlSkLxT4YBAiyfKvq/EdnMjkaVPwLNoqWLEDckWlucWXrtmwbTBcCEkpi7Btil3oLJFyx+y3fz4bKz7CQTz+ddQsc/XEg5zLHpbQdkSKWYcgHmCcyeq9hk8JVcZWAz1qpHo7+M6kEmUGw12PXrK/8Y4N6oCRzvG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558238; c=relaxed/simple; bh=6jmAs8WhhU9CSJ3TuowwyM4AJQMjc7pSJd+2ezFEaKY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qhy0phcvoO8QyMUYURwVjcgrSEHYBLRqsyUAvs4Ug3EySYYatOVPuqpTeA58nmrerMjGtyohv/RjFVCx0XTOr+Y5RHATlPFW8b/ypAJxMvPiL67RNPNjmbprbMVr1jeUt53M7ZrQyOUPfCJ8Dzu1NXIAzvNY6O+T9WoWgzJGfS0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=QLJuXvK2; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="QLJuXvK2" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-76e2ea933b7so1524664b3a.1 for ; Wed, 15 Oct 2025 12:57:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1760558236; x=1761163036; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2XXJNRa+a1EmBL15srEVpdMPkO8sE1KKJAIBSS6n0KY=; b=QLJuXvK2u5p34miN3WCr9VaQ+Ze7c+MaCpZEytu51ZNk2BqUhdP03xpczMJnocoTnL qyqFyhvId13B5EMSdlLlSQHwkHZ7VWdfxzRNYuvypJgJbK8HXxnfdbSf1zkxLXbebg2t N1ztoCFF4P+9pLS0T0lTzVjmFX1ViIgEw/U+m0r7pDIwanAAGFbBCWgxsufy5cybUKZI bF66FB5/KonYJLk/OVHMBz45GHKBm756UPhv8GXeq4SO+MJCzXPoHSxPMpJPlsztvgXY v2bHuI9n80EpGiJ0spoyqLERdOiWb1egtMyobRfiEwnb5WXAsUx7TAeQYimqsETKz+Uo x6Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760558236; x=1761163036; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2XXJNRa+a1EmBL15srEVpdMPkO8sE1KKJAIBSS6n0KY=; b=W66Ol1NniE7VTyAucLE8iYzhknDAIDKhnW24bHNy/2NSCbxWj3B2tIQpfqjfTmiOJV yZYo3rALzgyUa6KBQw7cgRQ+1jwfpKInDGnTQcV5ky3fULrIztNTAMlW2/SkHfjUoZqG mcDkT5MDjdihrtIs0e2SJkVq78hWHqNwkp5orsJQd8A/2SRXqfJ83Dtg5flrwTZF1TKa wf3kXUIqkcB/8WMZPDtiUJefpHri7Y5GeeJW3KW5W/JItuFncSvUrYID0q/OR4zvDocx g5nOVKJTyYZwG4WqA6dEozWXAvuBL9Qh5U9Ii9NWQMSyJOH49aVIJUqKEi/QGxxWQE4Y /ocA== X-Forwarded-Encrypted: i=1; AJvYcCUi+6Ct8GyPhzN5RZiA5t57g91hQ4YgqW4sV1l3qNyMejGJkpYpkRokr3/dDTGNrbiqMEHhvWaiYKnuido=@vger.kernel.org X-Gm-Message-State: AOJu0YyPoMNR1W5SII1hojFx7EW3mPPqb+YfDegDqwxgxuLsjTVG05AE MgN+GV4iqI+gr67lx4l8tFC4UzDJr0p8RQbqTlttg3horAolTlJvS9HFTESP6zXqlIf4bgX1Swo vWfe5 X-Gm-Gg: ASbGncvB6rrz4l+ihmP3TQ2jnf0+ZKgo3zF1XCs0mOwby2gWU2KqTwTwfWWkoo2PWXV xozRfKV3UwnRRR4C90sMoUpn3hipKIlVdCvurrYRCPmsvIbBK0Ino3AszXUJchy/KvnUO9c4Ruk 2dIheelalir6KVt4BSH9a+KWSLZR59W1lLDAS0vIYVmqtubUR1m6SLzDsj/qe7Sx29ZPh+Hox/E bFnpcUXZhmq8aKOVf6XCo9hohq0VNKMuHFEDaus59kzO6TDbvEkztG1m54RrDBhQPFi/Uv/BGP9 Aj/Mszl9eFWw3N9gstsQyV1SPBfN/p0ns2Y31QLGSaavIVAfBuYiPsqna2nrTWg1gI+Knxs75f+ mTF0/N0nP/I2w5etEbKLvB8nkgrO6za0CbdXH5Nx+MzZGvq9VpKDkQG+CfteXf3FoDtvTOemc1g == X-Google-Smtp-Source: AGHT+IFYzvKYJ39wIxnM+7RE1dPFgDr4+Lj3QmztieH+Js7P0YTUrQYUELqiUNF31KEmW0OEISH7cA== X-Received: by 2002:a05:6a20:42a3:b0:32b:8022:15 with SMTP id adf61e73a8af0-33495c20923mr1630846637.3.1760558236034; Wed, 15 Oct 2025 12:57:16 -0700 (PDT) Received: from sw06.internal.sifive.com ([4.53.31.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7992b06075fsm20151322b3a.17.2025.10.15.12.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 12:57:15 -0700 (PDT) From: Samuel Holland To: Anup Patel , Thomas Gleixner Cc: Palmer Dabbelt , linux-kernel@vger.kernel.org, Alexandre Ghiti , linux-riscv@lists.infradead.org, Paul Walmsley , Samuel Holland , Albert Ou Subject: [PATCH 2/4] irqchip/riscv-imsic: Embed the vector array in lpriv Date: Wed, 15 Oct 2025 12:55:13 -0700 Message-ID: <20251015195712.3813004-3-samuel.holland@sifive.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20251015195712.3813004-1-samuel.holland@sifive.com> References: <20251015195712.3813004-1-samuel.holland@sifive.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reduce pointer chasing and the number of allocations by using a flexible array member for the vector array instead of a separate allocation. Signed-off-by: Samuel Holland --- drivers/irqchip/irq-riscv-imsic-state.c | 10 ++-------- drivers/irqchip/irq-riscv-imsic-state.h | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-= riscv-imsic-state.c index dc95ad856d80..9a499efdebe3 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.c +++ b/drivers/irqchip/irq-riscv-imsic-state.c @@ -487,7 +487,6 @@ static void __init imsic_local_cleanup(void) lpriv =3D per_cpu_ptr(imsic->lpriv, cpu); =20 bitmap_free(lpriv->dirty_bitmap); - kfree(lpriv->vectors); } =20 free_percpu(imsic->lpriv); @@ -501,7 +500,8 @@ static int __init imsic_local_init(void) int cpu, i; =20 /* Allocate per-CPU private state */ - imsic->lpriv =3D alloc_percpu(typeof(*imsic->lpriv)); + imsic->lpriv =3D __alloc_percpu(struct_size(imsic->lpriv, vectors, global= ->nr_ids + 1), + __alignof__(*imsic->lpriv)); if (!imsic->lpriv) return -ENOMEM; =20 @@ -521,12 +521,6 @@ static int __init imsic_local_init(void) timer_setup(&lpriv->timer, imsic_local_timer_callback, TIMER_PINNED); #endif =20 - /* Allocate vector array */ - lpriv->vectors =3D kcalloc(global->nr_ids + 1, sizeof(*lpriv->vectors), - GFP_KERNEL); - if (!lpriv->vectors) - goto fail_local_cleanup; - /* Setup vector array */ for (i =3D 0; i <=3D global->nr_ids; i++) { vec =3D &lpriv->vectors[i]; diff --git a/drivers/irqchip/irq-riscv-imsic-state.h b/drivers/irqchip/irq-= riscv-imsic-state.h index 57f951952b0c..196457f1bbca 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.h +++ b/drivers/irqchip/irq-riscv-imsic-state.h @@ -40,7 +40,7 @@ struct imsic_local_priv { #endif =20 /* Local vector table */ - struct imsic_vector *vectors; + struct imsic_vector vectors[]; }; =20 struct imsic_priv { --=20 2.47.2 From nobody Fri Dec 19 20:57:57 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 EE92F308F0E for ; Wed, 15 Oct 2025 19:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558239; cv=none; b=t0d/iKnkdgkeoAmb7V8HBayuqkGC2TlIR9eMPm7JO5NEjLJ3lla4SnMdFpEmI1PO0b3FyAS8zJmhWZAY7MrXmQ5hqGx6qSy/eK0V0p4aULbYeY2YobD/PqKDD2WEHmurYtJQ34twhr87Te7boJoffwtKaNWuWPL01GfKuGdGEfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558239; c=relaxed/simple; bh=OtY2VdHR/b8VDb3iySDv/ds6N3IRVMqPPn4yU4l9FG8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bP8EV+d4xcm/Ccw8ZaNsYoBcikBFTj2FF6W2UsfHB1qqxykw/ndURr180Bq1otfHcyW/chxCimA1jLKpyEqr6w+0zlxYIdoJpHLxviGNX4iBT5OqdVY6uR9MaBcCIbzij+eUTyqdYQ2EmQMGiMcNtwfP9S8jm2m/AYot/ppIyEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=gZ5i6yi7; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="gZ5i6yi7" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-7811fa91774so20276b3a.0 for ; Wed, 15 Oct 2025 12:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1760558237; x=1761163037; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P1cXGjl5LALpTkEmKF1wH+9n+RdSexytoXIs7SXyiuk=; b=gZ5i6yi7Xsy13XtgqnJ3Q9oslkvyOOqNi8HD3VoUsEO1cpeMNYhGbKMnPXe5qvnz5Z 6GCxQI3hXQbBtpD2t4+cokCiA/QMCbnuZW2ZJzhIg9+byM4Vr1fwOuXqSDKXVsd4HwX1 Yja6H5djrj4e8CUpO8BeJcUR1iLNerqs13zBLW4rvzV41+vKPnHkMIoaPoad74EKRaNx x/5vyjPsblGxuZw3nmM1/i6gbusEN6XHTAXUph58Vgfn08FwLv2we1g/jyuf/5a8mHBA pvkDsrcunxFUYpqBBHZ1VPr5bg914dlI34ZuwPkIjcY3EtFsvmPf+jczwsmW1nryk0Kd JeyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760558237; x=1761163037; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P1cXGjl5LALpTkEmKF1wH+9n+RdSexytoXIs7SXyiuk=; b=dHIgEBVSKKtDBsLrSOeWGiPdZpYHJusWY26ezBOSVJwY52I5Ty3+NcUBexaOlwTv8n kzFRnRyLz7WLMw/jkVz51nWyt+Kyzvv68KlZFFSyBNe6umQqjRSYBQNQ8ZThcuBqqoxl DyZkQfvOTrdlT+UGDwVyJ8rqCyz1LTK4NQe928ieoSbpgdfVZlrKjkr29SJBw6XQNvEF osJGYTkaImdYLkWH3I0KzL249Cn4EdnfsUKv8wWOexUbOJJ+n3hnC0L7ZtAnqgqsatnq bstwHIBUYNCrXKsQrJkAN9bH0oooEr656mgZoB3zyUEY4ucN3FcFvptppuZU8Wd9oKeq /m8g== X-Forwarded-Encrypted: i=1; AJvYcCWMo5A2ZF9tAciZxDYL376OHrgCv+6XK7htyoZE+awoTwK8M8cgol/bcqUNIdr9zTE+crpJ4AHrzs71YM8=@vger.kernel.org X-Gm-Message-State: AOJu0YxTtao8sw3kakbmcNKeqdc3ePnGr29fl9iW9vELdPEXkPgiu8d4 fgbrhlM+Jg6Ya6XkN4pWQ6uL2QNwTmjxX7pf0/wJFkMfMi6adhAZ3c3LJNgSdORDMDE= X-Gm-Gg: ASbGnctCGVUvoXlsrntuyPQQ7sr5BnGQrh2AUVv+BlS/GdsKJla6Q0hx/EbWY6KN//1 4FVY+HN5R44pygu1/AFu7ZHZND7T5d3yLit9h/Z56ELLub0pJKahgPJcQ33ogAOFnHIqd9vgnZP Y/bclVeaxRGh40ZkXxMbR5WIyT92ZJZzGrN9bPyzc6Xk3z1KjFqJrQk95CcYGiT4Im7skUbK71L fC9Cow7uxBgDOnQOmBqOXQOd3HQpgEREbQvqIkqFUQpSRXG1YHyQbQjUAXz6fgxcIXJWtzOK6mw v+NAGd2khMe0u1TYY/1jFfGqwzOI3X+7SClOLrUKH7eB5h5Gw5zliYSBJJUTdEW8Kd3sR9HIqae 1SIiDsw67W9AQvMdnu/AqylMTxHf6tGVqdJ28VwXdQCLyFP64QuX3qDnDI9zz672L5vdOc8rX5g == X-Google-Smtp-Source: AGHT+IFLZrPjORuUwaeRdJWDWHubXFyOAKctiPm3J2eMbE7qpSS37pMYp1CngUyq68x7ODSrNq0gxQ== X-Received: by 2002:a05:6a21:9993:b0:2e4:9004:530c with SMTP id adf61e73a8af0-32da8206d98mr40544884637.17.1760558237119; Wed, 15 Oct 2025 12:57:17 -0700 (PDT) Received: from sw06.internal.sifive.com ([4.53.31.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7992b06075fsm20151322b3a.17.2025.10.15.12.57.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 12:57:16 -0700 (PDT) From: Samuel Holland To: Anup Patel , Thomas Gleixner Cc: Palmer Dabbelt , linux-kernel@vger.kernel.org, Alexandre Ghiti , linux-riscv@lists.infradead.org, Paul Walmsley , Samuel Holland , Albert Ou Subject: [PATCH 3/4] irqchip/riscv-imsic: Inline imsic_vector_from_local_id() Date: Wed, 15 Oct 2025 12:55:14 -0700 Message-ID: <20251015195712.3813004-4-samuel.holland@sifive.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20251015195712.3813004-1-samuel.holland@sifive.com> References: <20251015195712.3813004-1-samuel.holland@sifive.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This function is only called from one place, which is in the IRQ handling hot path. Inline it to improve code generation and to take advantage of this_cpu operations. lpriv and imsic->base_domain can never be NULL because irq_set_chained_handler() is called after they are allocated. Signed-off-by: Samuel Holland --- drivers/irqchip/irq-riscv-imsic-early.c | 11 +++-------- drivers/irqchip/irq-riscv-imsic-state.c | 10 ---------- drivers/irqchip/irq-riscv-imsic-state.h | 2 -- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/drivers/irqchip/irq-riscv-imsic-early.c b/drivers/irqchip/irq-= riscv-imsic-early.c index 2c4c682627b8..6bac67cc0b6d 100644 --- a/drivers/irqchip/irq-riscv-imsic-early.c +++ b/drivers/irqchip/irq-riscv-imsic-early.c @@ -91,9 +91,8 @@ static int __init imsic_ipi_domain_init(void) { return 0;= } */ static void imsic_handle_irq(struct irq_desc *desc) { + struct imsic_local_priv *lpriv =3D this_cpu_ptr(imsic->lpriv); struct irq_chip *chip =3D irq_desc_get_chip(desc); - int cpu =3D smp_processor_id(); - struct imsic_vector *vec; unsigned long local_id; =20 /* @@ -113,16 +112,12 @@ static void imsic_handle_irq(struct irq_desc *desc) continue; } =20 - if (unlikely(!imsic->base_domain)) - continue; - - vec =3D imsic_vector_from_local_id(cpu, local_id); - if (!vec) { + if (unlikely(local_id > imsic->global.nr_ids)) { pr_warn_ratelimited("vector not found for local ID 0x%lx\n", local_id); continue; } =20 - generic_handle_irq(vec->irq); + generic_handle_irq(lpriv->vectors[local_id].irq); } =20 chained_irq_exit(chip, desc); diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-= riscv-imsic-state.c index 9a499efdebe3..385368052d5c 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.c +++ b/drivers/irqchip/irq-riscv-imsic-state.c @@ -434,16 +434,6 @@ void imsic_vector_debug_show_summary(struct seq_file *= m, int ind) } #endif =20 -struct imsic_vector *imsic_vector_from_local_id(unsigned int cpu, unsigned= int local_id) -{ - struct imsic_local_priv *lpriv =3D per_cpu_ptr(imsic->lpriv, cpu); - - if (!lpriv || imsic->global.nr_ids < local_id) - return NULL; - - return &lpriv->vectors[local_id]; -} - struct imsic_vector *imsic_vector_alloc(unsigned int irq, const struct cpu= mask *mask) { struct imsic_vector *vec =3D NULL; diff --git a/drivers/irqchip/irq-riscv-imsic-state.h b/drivers/irqchip/irq-= riscv-imsic-state.h index 196457f1bbca..6332501dcbd8 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.h +++ b/drivers/irqchip/irq-riscv-imsic-state.h @@ -95,8 +95,6 @@ static inline struct imsic_vector *imsic_vector_get_move(= struct imsic_vector *ve void imsic_vector_force_move_cleanup(struct imsic_vector *vec); void imsic_vector_move(struct imsic_vector *old_vec, struct imsic_vector *= new_vec); =20 -struct imsic_vector *imsic_vector_from_local_id(unsigned int cpu, unsigned= int local_id); - struct imsic_vector *imsic_vector_alloc(unsigned int irq, const struct cpu= mask *mask); void imsic_vector_free(struct imsic_vector *vector); =20 --=20 2.47.2 From nobody Fri Dec 19 20:57:57 2025 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 3FC8F30C36E for ; Wed, 15 Oct 2025 19:57:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558241; cv=none; b=nRhQ3g5ECunuHM+W9RRzd2WPwOVqgBMtTJSkNPwTb+FEnRXlkTd3BhSfZDuWStW3zloEg9gsaahr32bPLToeLTgYUTlYz+4t6/0AlFYNm9OwkEmpdrDnVaaDOr2wBb/gzUj0YMNJn8bjyMEFqAh0dbfG3JN/8dbD5ZhNbimvQJc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760558241; c=relaxed/simple; bh=Nkic0FtET94irIFY4HGDaRKQwLjCuCRJNbjooCsCJ0I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PWZVurfb3zAyROQzZ1GvKGPtcSZP5mgNols7YsNjg5qSCOMmq+dpLV1g/6FLQphs4ucznl2Q20PmWt2vYx/5DGIajsuCBkHIhk4hYguhJHIegzDqEFWAJH0lIvUtP9FzvPBagoBzh4jHdKlyFNmzU4qsp48KercdvM7sV6WrfNM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=eS/iiid/; arc=none smtp.client-ip=209.85.210.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="eS/iiid/" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-78125ed4052so25695b3a.0 for ; Wed, 15 Oct 2025 12:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1760558238; x=1761163038; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6+g8lhoHRY5Iwc3gNxWC8a/yM7D/uKYdnjVnSP6JGxc=; b=eS/iiid/STw22y1fdKhWfrllffB46nObHUTBVYA+rAzgjgli2r6aKLz4xQtc9Pw2TJ CHZWWCrKLgXDxQ1FsSanXdfyyj3uDHu3dzCakUyVCJB/NqG6x5m/bve2qiyA2lODqrkO j74OgnnWTUlRTZ/PsPxY372LMHiqyETUvNFVbpMknu4JoqHMWRPqT0irGYExmTaPLwj5 6FpOXU4QaxfYYyPTmzegU5ku8iPb0Ql0+hpqSxmYPUV1PYJsq1vZOEgcNkafD5AJkJuI JhENakcZwdmK3XxkWZPu+3dZuz83ZeQEhsFtrlRzfJp452kPldQPKVWXSVxQxB3dYlf8 qofg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760558238; x=1761163038; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6+g8lhoHRY5Iwc3gNxWC8a/yM7D/uKYdnjVnSP6JGxc=; b=I374DoLKsIrFAXt7QwYAQhfodCNUkY00PVbX55PbtPD4T+tWqUcLTrskIGrdnyeH0k AclOorQF412o2GPl0Xkx1pG7ibcPJarih6AI+1WKGk0oSdvkd3A4Dx7kweBsjfE+ujva fHFhvnxhohtW16gajc97fdsXjb4HPme7QFhlY251TmFw9IDgi2JdbEX0NM1zqEhvHGK5 bEvavra466Vba8Xh7A04du54FzSBd/RmzZJLzjqDnH1Cjikh01KGnAAZZqaAHC3aQxQq mvCcsnOTZY6zfM4Tw8PQ90xiria/yTh8tHH2xKAMVA2oPafIKCK2FeOFkskVu4NeGsf4 1EzQ== X-Forwarded-Encrypted: i=1; AJvYcCVeH7Ji1/BeCemvVeG75MgtMlK/DoUPvCp8NXJ9oQb0iFI++FGZQ4wLtNBdE1B7qojgQjS0ZVgK/8s9BDk=@vger.kernel.org X-Gm-Message-State: AOJu0YzADJDAybPPOEoXGsApcq4E+py5po8Eoc2MvBY4UJ04/skjS8bJ aNV1RPESUmM6jiaA8CJtDj4DkgPJBRDE74g+6Ae0WPtIQTDxuZq2PR6oLECxeq2/d0M= X-Gm-Gg: ASbGncsIew55Wuez/HPFhRqL5L6HMSeOs1BUxhDFU8K9uREOo6+3EkiKhdIlXjV6dfR 3sXrKsCF4K121mtpBw6j41duhwVfb40e6uP+xhikb/33LFfy5ehJ0ZR2nvRb22qt2qAe6KsMUXl +XulEZOy0gU8IHbKFf/R0Yq0zNG/qpLNKlEElb17yQuq6W+FltFzk3oj3GDoSZ0JKBCBxSxin3U C8X+ueALGL+jj623q8boTOiORZIG5CDVXZZRybYXXHxE62jbvic3afNOmg8ect1bsSxVKrg1xNR eSdVwEdiuiF/BrELr8QXkJAfND93vO3fjCNffD/Tfzw7I1uFX05yl8xgJD3kX8UvnqySmusrjCk k9tyagpoPyOX6KsnbX0TCXBQllIpldcLoatA2K3OpJvSP+JHQauxr3q12/ENha8CkIpVDnXYv6l v50TShDUZMRb0Uc18ekbtGPw== X-Google-Smtp-Source: AGHT+IEKQ+uDEI7W9I1l+VaCyNVgX9OC+Z12nOqaxOeClud0KyIU0We9Y4LSjxHB28Nwak6ZUg9h4Q== X-Received: by 2002:a05:6a00:2e13:b0:781:1771:c12c with SMTP id d2e1a72fcca58-7938269d8b7mr37200981b3a.0.1760558238577; Wed, 15 Oct 2025 12:57:18 -0700 (PDT) Received: from sw06.internal.sifive.com ([4.53.31.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7992b06075fsm20151322b3a.17.2025.10.15.12.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 12:57:17 -0700 (PDT) From: Samuel Holland To: Anup Patel , Thomas Gleixner Cc: Palmer Dabbelt , linux-kernel@vger.kernel.org, Alexandre Ghiti , linux-riscv@lists.infradead.org, Paul Walmsley , Samuel Holland , Albert Ou Subject: [PATCH 4/4] irqchip/riscv-imsic: Remove irq_desc lookup from hot path Date: Wed, 15 Oct 2025 12:55:15 -0700 Message-ID: <20251015195712.3813004-5-samuel.holland@sifive.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20251015195712.3813004-1-samuel.holland@sifive.com> References: <20251015195712.3813004-1-samuel.holland@sifive.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The IMSIC driver uses the IRQ matrix allocator, so there is an arbitrary mapping from the per-CPU interrupt identity to the global irq number. As a result, the driver maintains a table of vectors so it can look up the virq number during interrupt handling. The driver uses the virq for one main purpose: it gets passed to generic_handle_irq(), which then uses it to look up the irq_desc in the sparse_irqs tree. Taking inspiration from the loongarch AVEC irqchip driver, skip the tree lookup by storing a pointer to the irq_desc in the vector table and calling generic_handle_irq_desc() directly. Signed-off-by: Samuel Holland --- drivers/irqchip/irq-riscv-imsic-early.c | 2 +- drivers/irqchip/irq-riscv-imsic-platform.c | 7 ++++--- drivers/irqchip/irq-riscv-imsic-state.c | 10 +++++----- drivers/irqchip/irq-riscv-imsic-state.h | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/irqchip/irq-riscv-imsic-early.c b/drivers/irqchip/irq-= riscv-imsic-early.c index 6bac67cc0b6d..f3afcfa3242d 100644 --- a/drivers/irqchip/irq-riscv-imsic-early.c +++ b/drivers/irqchip/irq-riscv-imsic-early.c @@ -117,7 +117,7 @@ static void imsic_handle_irq(struct irq_desc *desc) continue; } =20 - generic_handle_irq(lpriv->vectors[local_id].irq); + generic_handle_irq_desc(lpriv->vectors[local_id].desc); } =20 chained_irq_exit(chip, desc); diff --git a/drivers/irqchip/irq-riscv-imsic-platform.c b/drivers/irqchip/i= rq-riscv-imsic-platform.c index 7228a33f6c37..89618d2791c2 100644 --- a/drivers/irqchip/irq-riscv-imsic-platform.c +++ b/drivers/irqchip/irq-riscv-imsic-platform.c @@ -131,7 +131,7 @@ static int imsic_irq_set_affinity(struct irq_data *d, c= onst struct cpumask *mask return -EBUSY; =20 /* Get a new vector on the desired set of CPUs */ - new_vec =3D imsic_vector_alloc(old_vec->irq, mask_val); + new_vec =3D imsic_vector_alloc(old_vec->desc, mask_val); if (!new_vec) return -ENOSPC; =20 @@ -225,13 +225,14 @@ static struct irq_chip imsic_irq_base_chip =3D { static int imsic_irq_domain_alloc(struct irq_domain *domain, unsigned int = virq, unsigned int nr_irqs, void *args) { + struct irq_data *data =3D irq_get_irq_data(virq); struct imsic_vector *vec; =20 /* Multi-MSI is not supported yet. */ if (nr_irqs > 1) return -EOPNOTSUPP; =20 - vec =3D imsic_vector_alloc(virq, cpu_online_mask); + vec =3D imsic_vector_alloc(irq_data_to_desc(data), cpu_online_mask); if (!vec) return -ENOSPC; =20 @@ -239,7 +240,7 @@ static int imsic_irq_domain_alloc(struct irq_domain *do= main, unsigned int virq, handle_edge_irq, NULL, NULL); irq_set_noprobe(virq); irq_set_affinity(virq, cpu_online_mask); - irq_data_update_effective_affinity(irq_get_irq_data(virq), cpumask_of(vec= ->cpu)); + irq_data_update_effective_affinity(data, cpumask_of(vec->cpu)); =20 return 0; } diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-= riscv-imsic-state.c index 385368052d5c..f37800da3746 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.c +++ b/drivers/irqchip/irq-riscv-imsic-state.c @@ -179,7 +179,8 @@ static bool __imsic_local_sync(struct imsic_local_priv = *lpriv) tvec =3D vec->local_id =3D=3D mvec->local_id ? NULL : &lpriv->vectors[mvec->local_id]; =20 - if (tvec && !irq_can_move_in_process_context(irq_get_irq_data(vec->irq)= ) && + if (tvec && + !irq_can_move_in_process_context(irq_desc_get_irq_data(vec->desc)) = && __imsic_id_read_clear_pending(tvec->local_id)) { /* Retrigger temporary vector if it was already in-use */ if (READ_ONCE(tvec->enable)) { @@ -434,7 +435,7 @@ void imsic_vector_debug_show_summary(struct seq_file *m= , int ind) } #endif =20 -struct imsic_vector *imsic_vector_alloc(unsigned int irq, const struct cpu= mask *mask) +struct imsic_vector *imsic_vector_alloc(struct irq_desc *desc, const struc= t cpumask *mask) { struct imsic_vector *vec =3D NULL; struct imsic_local_priv *lpriv; @@ -450,7 +451,7 @@ struct imsic_vector *imsic_vector_alloc(unsigned int ir= q, const struct cpumask * =20 lpriv =3D per_cpu_ptr(imsic->lpriv, cpu); vec =3D &lpriv->vectors[local_id]; - vec->irq =3D irq; + vec->desc =3D desc; vec->enable =3D false; vec->move_next =3D NULL; vec->move_prev =3D NULL; @@ -463,7 +464,7 @@ void imsic_vector_free(struct imsic_vector *vec) unsigned long flags; =20 raw_spin_lock_irqsave(&imsic->matrix_lock, flags); - vec->irq =3D 0; + vec->desc =3D NULL; irq_matrix_free(imsic->matrix, vec->cpu, vec->local_id, false); raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags); } @@ -516,7 +517,6 @@ static int __init imsic_local_init(void) vec =3D &lpriv->vectors[i]; vec->cpu =3D cpu; vec->local_id =3D i; - vec->irq =3D 0; } } =20 diff --git a/drivers/irqchip/irq-riscv-imsic-state.h b/drivers/irqchip/irq-= riscv-imsic-state.h index 6332501dcbd8..a09dd140461b 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.h +++ b/drivers/irqchip/irq-riscv-imsic-state.h @@ -20,7 +20,7 @@ struct imsic_vector { unsigned int cpu; unsigned int local_id; /* Details saved by driver in the vector */ - unsigned int irq; + struct irq_desc *desc; /* Details accessed using local lock held */ bool enable; struct imsic_vector *move_next; @@ -95,7 +95,7 @@ static inline struct imsic_vector *imsic_vector_get_move(= struct imsic_vector *ve void imsic_vector_force_move_cleanup(struct imsic_vector *vec); void imsic_vector_move(struct imsic_vector *old_vec, struct imsic_vector *= new_vec); =20 -struct imsic_vector *imsic_vector_alloc(unsigned int irq, const struct cpu= mask *mask); +struct imsic_vector *imsic_vector_alloc(struct irq_desc *desc, const struc= t cpumask *mask); void imsic_vector_free(struct imsic_vector *vector); =20 void imsic_vector_debug_show(struct seq_file *m, struct imsic_vector *vec,= int ind); --=20 2.47.2