[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH] arm/gic: Optimize lr_mask type based on GIC version
- To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
- From: "Halder, Ayan Kumar" <ayankuma@xxxxxxx>
- Date: Fri, 6 Mar 2026 10:18:22 +0000
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=citrix.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JHJpJPaHeMHdAig7u/9nZjXOciwLCEHjlAbgze5OIEU=; b=E2bmtWgfoGARZLv+97nr56GW0YPLKXWOWWErD2ewoVsyVEblMyjh5YKOu5DNsUVwM3iPVep+ESEWnPOSOIfVpL1sodZBjc70VtbMTJHzvh4GLmEorPlA2qdiWC/p9zeXB/iSyX0oieOaNMDJIf0pRQRUuLg3q4Z+HkKiVjXQ4m89rzmObEpu6LS2oawS6yDXhhG1bkNlIvBYzlwTApoexAlnrqU/Bl/fKlmAayOua/aA8QMRZZhotciE5Y5Rb1aALENMIoeAqD2OLWGiIbEitcj+PbuNTgDyp3i9kzljQI5435nSreu+6poN2xmP0VNBaUTWlhZYc3F+NA8wcC5Jcw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JsMPAvc714BoDP31KokAY6Hchxukt089s6vIp/SqO/DqMWGuVKwIiH1eQqxcUMp+I5LTQw4MTZ64LKhhIF88p4AlGdNN3mHt/UxC4FEZvcTJMWZXQT060MSFu1i030MlR9rfmUkRhig3iPoRKkEwRApmxyA/CFq+22iH4Y9hvOmcwCamqEMy4ygbhJCGQGEfNbClkIMdAe1smXpLxMC8YpuM85G4WnDuxjzpMSNp4vue4GSxmMVD2gz1irHBIwSOlN3d6C8TKoSeYqOJrhIdRzNxwkPMpIbbhzyDZCk2xARJJjcfAgMsyVajMTM9GuGrm79N0y/udnOuI17rl3qBOQ==
- Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
- Delivery-date: Fri, 06 Mar 2026 10:18:37 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
Hi Andrew,
On 06/03/2026 10:02, Andrew Cooper wrote:
On 06/03/2026 9:59 am, Halder, Ayan Kumar wrote:
Hi Andrew,
On 05/03/2026 23:01, Andrew Cooper wrote:
On 05/03/2026 7:57 pm, Ayan Kumar Halder wrote:
The lr_mask bitmap tracks which List Registers (LRs) are in use for
virtual interrupt injection. Previously, lr_mask always used uint64_t
(8 bytes) to support the maximum number of LRs across both GIC
versions.
However, GICv2 and GICv3 have different hardware limits:
- GICv3: ICH_VTR_EL2[3:0] encodes LR count -> max 16 LRs (4 bits)
- GICv2: GICH_VTR[5:0] encodes LR count -> max 64 LRs (6 bits)
This patch introduces conditional compilation to optimize lr_mask size:
- CONFIG_GICV3=y: Use uint16_t (2 bytes) - sufficient for 16 LRs
- CONFIG_GICV3=n: Use uint64_t (8 bytes) - required for 64 LRs
With this, parameter 'lr' in gicv3_ich_read_lr(), gicv3_ich_write_lr()
cannot have a value > 15. Thus, it should not possible to hit the
BUG() in the default case.
Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
What does this actually get you?
Because it doesn't actually eliminate the BUG()s you reference.
As lr is obtained from lr_mask, see the snippet from gic_find_unused_lr()
for_each_set_bit ( used_lr, *lr_mask )
{
struct gic_lr lr_val;
gic_hw_ops->read_lr(used_lr, &lr_val);
if ( lr_val.virq == p->irq )
return used_lr;
}
If lr_mask is 16 bits, then used_lr should not exceed 15. That is my
thinking.
Sure, but what does that actually get you?
Right now, it just gives me a justification why a certain code path
(invoking BUG()) will never be executed. My aim here is to reduce the
chances hitting this runtime BUG(). However ...
It doesn't get you a compiled difference. It can't DCE the boundary checks.
if there can be a better approach, I am open for it.
- Ayan
|