[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 09:59:45 +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=YV9g7yqxFPl36v3hNmUDn+Q7GAWHyxK5zVvi2luVp54=; b=jw44Osxk92Ee1Vg7zbFpnnOkcc3+Z99TVvSPs22zjUaZ68/8cQYruN4ypL+elDiL5O+xxYDaD7poc+dQpzy7vDkmpMUZS0VcxYmaeXXgSHGqCdwOeLqsp/bp+YW7BbKBGsSXsrWoZ7y9vB9xz6vbGmv4XJK9RvQFMYkvigs6scKSHzZrk+h6wgWoYS88ctpJdXIrrpE3vwWg6gd4s5PQ4lP/RNQzfRwCP7Mo3xesaugFL8ePkYhH7ff6eXpo1xUAo2QjH2Au6+5ESimBwHxr1tYZXV4FzIGJ9bnwVSJ7wvEKOk6veXQi8NHacssCkj1vY2QtfHsRsY2Gz90En5bGSw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qFIRSb8dOb6VtGdXUpOdD7jrgdiAyBPknFGz/gpKUW7+Xg613+WPw2DdLQNdAYOidBUnkS2prE0r4tj/pDnxd5/M8dBqCY7lbnz6V41H7zmOZ6OOuAuINACrJKB+NMXA3QyAAAV5OFJELVrdx2nTVO93NYkbS6dok1SJJatnoZFv7+PZ/+O07sqiyTH8M/dycEN9yiWKH5Ri7AIPxDpSXwSP+KmLPmbAniRObK5b2ZqS10bSqr8r80M9CxLyVLDwcMmJsk4mJ6hKNOfBMSzwjjHR3/oO6Og8Taj23uO6uPBz6GPOua9T36kik2KE37Gzowwax1KHjeLDMoB3pQq2JQ==
  • 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:00:03 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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.


If you really want to go ahead with this patch, then make a  lr_mask_t
or the right type and don't double-code everything.

Ack

- Ayan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.