mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
x86/apic: KVM: Move apic_find_highest_vector() to a common header
In preparation for using apic_find_highest_vector() in Secure AVIC guest APIC driver, move it and associated macros to apic.h. No functional change intended. Acked-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com> Link: https://lore.kernel.org/r/20250709033242.267892-11-Neeraj.Upadhyay@amd.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
b5f8980f29
commit
39e81633f6
|
|
@ -503,6 +503,28 @@ static inline bool is_vector_pending(unsigned int vector)
|
|||
return lapic_vector_set_in_irr(vector) || pi_pending_this_cpu(vector);
|
||||
}
|
||||
|
||||
#define MAX_APIC_VECTOR 256
|
||||
#define APIC_VECTORS_PER_REG 32
|
||||
|
||||
/*
|
||||
* Vector states are maintained by APIC in 32-bit registers that are
|
||||
* 16 bytes aligned. The status of each vector is kept in a single
|
||||
* bit.
|
||||
*/
|
||||
static inline int apic_find_highest_vector(void *bitmap)
|
||||
{
|
||||
int vec;
|
||||
u32 *reg;
|
||||
|
||||
for (vec = MAX_APIC_VECTOR - APIC_VECTORS_PER_REG; vec >= 0; vec -= APIC_VECTORS_PER_REG) {
|
||||
reg = bitmap + APIC_VECTOR_TO_REG_OFFSET(vec);
|
||||
if (*reg)
|
||||
return __fls(*reg) + vec;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Warm reset vector position:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <linux/export.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/apic.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/mce.h>
|
||||
#include <asm/msr.h>
|
||||
|
|
@ -55,9 +56,6 @@
|
|||
/* 14 is the version for Xeon and Pentium 8.4.8*/
|
||||
#define APIC_VERSION 0x14UL
|
||||
#define LAPIC_MMIO_LENGTH (1 << 12)
|
||||
/* followed define is not in apicdef.h */
|
||||
#define MAX_APIC_VECTOR 256
|
||||
#define APIC_VECTORS_PER_REG 32
|
||||
|
||||
/*
|
||||
* Enable local APIC timer advancement (tscdeadline mode only) with adaptive
|
||||
|
|
@ -616,20 +614,6 @@ static const unsigned int apic_lvt_mask[KVM_APIC_MAX_NR_LVT_ENTRIES] = {
|
|||
[LVT_CMCI] = LVT_MASK | APIC_MODE_MASK
|
||||
};
|
||||
|
||||
static int apic_find_highest_vector(void *bitmap)
|
||||
{
|
||||
int vec;
|
||||
u32 *reg;
|
||||
|
||||
for (vec = MAX_APIC_VECTOR - APIC_VECTORS_PER_REG; vec >= 0; vec -= APIC_VECTORS_PER_REG) {
|
||||
reg = bitmap + APIC_VECTOR_TO_REG_OFFSET(vec);
|
||||
if (*reg)
|
||||
return __fls(*reg) + vec;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static u8 count_vectors(void *bitmap)
|
||||
{
|
||||
int vec;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user