[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] ARM/vgic: Use for_each_set_bit() in vgic_set_irqs_pending()



commit 2387c460eb103a37f1772d82be91b67518522372
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Jun 19 01:58:35 2024 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Aug 23 21:50:57 2024 +0100

    ARM/vgic: Use for_each_set_bit() in vgic_set_irqs_pending()
    
    ... which is better optimised for scalar values, rather than using the
    arbitrary-sized bitmap helpers.
    
    For ARM32:
    
      add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-16 (-16)
      Function                                     old     new   delta
      vgic_set_irqs_pending                        284     268     -16
    
    including removing calls to _find_{first,next}_bit_le(), and two 
stack-spilled
    words too.
    
    For ARM64:
    
      add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-40 (-40)
      Function                                     old     new   delta
      vgic_set_irqs_pending                        268     228     -40
    
    including removing three calls to find_next_bit().
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
---
 xen/arch/arm/vgic.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
index 3fe1d89c4d..905e5eeb66 100644
--- a/xen/arch/arm/vgic.c
+++ b/xen/arch/arm/vgic.c
@@ -421,15 +421,13 @@ void vgic_enable_irqs(struct vcpu *v, uint32_t r, 
unsigned int n)
 
 void vgic_set_irqs_pending(struct vcpu *v, uint32_t r, unsigned int rank)
 {
-    const unsigned long mask = r;
-    unsigned int i;
     /* The first rank is always per-vCPU */
     bool private = rank == 0;
 
     /* LPIs will never be set pending via this function */
     ASSERT(!is_lpi(32 * rank + 31));
 
-    bitmap_for_each ( i, &mask, 32 )
+    for_each_set_bit ( i, r )
     {
         unsigned int irq = i + 32 * rank;
 
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

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