mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/HPET: avoid an indirect call
When this code was written, indirect branches still weren't considered much of a problem (besides being a little slower). Instead of a function pointer, pass a boolean to _disable_pit_irq(), thus allowing to eliminate two ENDBR (one of them in .text). Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
467ae515ca
commit
730d2637a8
3 files changed
+10
-10
No files matched your search
+2
-2
@@ -563,7 +563,7 @@ static void cf_check handle_rtc_once(uint8_t index, uint8_t value)
|
||||
}
|
||||
}
|
||||
|
||||
void __init cf_check hpet_broadcast_init(void)
|
||||
void __init hpet_broadcast_init(void)
|
||||
{
|
||||
u64 hpet_rate = hpet_setup();
|
||||
u32 hpet_id, cfg;
|
||||
@@ -634,7 +634,7 @@ void __init cf_check hpet_broadcast_init(void)
|
||||
hpet_events->flags = HPET_EVT_LEGACY;
|
||||
}
|
||||
|
||||
void cf_check hpet_broadcast_resume(void)
|
||||
void hpet_broadcast_resume(void)
|
||||
{
|
||||
u32 cfg;
|
||||
unsigned int i, n;
|
||||
|
||||
@@ -89,8 +89,8 @@ void hpet_disable_legacy_replacement_mode(void);
|
||||
* Temporarily use an HPET event counter for timer interrupt handling,
|
||||
* rather than using the LAPIC timer. Used for Cx state entry.
|
||||
*/
|
||||
void cf_check hpet_broadcast_init(void);
|
||||
void cf_check hpet_broadcast_resume(void);
|
||||
void hpet_broadcast_init(void);
|
||||
void hpet_broadcast_resume(void);
|
||||
void cf_check hpet_broadcast_enter(void);
|
||||
void cf_check hpet_broadcast_exit(void);
|
||||
int hpet_broadcast_is_available(void);
|
||||
|
||||
+6
-6
@@ -2427,7 +2427,7 @@ void __init early_time_init(void)
|
||||
}
|
||||
|
||||
/* keep pit enabled for pit_broadcast working while cpuidle enabled */
|
||||
static int _disable_pit_irq(void(*hpet_broadcast_setup)(void))
|
||||
static int _disable_pit_irq(bool init)
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
@@ -2442,13 +2442,13 @@ static int _disable_pit_irq(void(*hpet_broadcast_setup)(void))
|
||||
*/
|
||||
if ( cpuidle_using_deep_cstate() && !boot_cpu_has(X86_FEATURE_ARAT) )
|
||||
{
|
||||
hpet_broadcast_setup();
|
||||
init ? hpet_broadcast_init() : hpet_broadcast_resume();
|
||||
if ( !hpet_broadcast_is_available() )
|
||||
{
|
||||
if ( xen_cpuidle > 0 )
|
||||
{
|
||||
printk("%ps() failed, turning to PIT broadcast\n",
|
||||
hpet_broadcast_setup);
|
||||
printk("hpet_broadcast_%s() failed, turning to PIT broadcast\n",
|
||||
init ? "init" : "resume");
|
||||
return -1;
|
||||
}
|
||||
ret = 0;
|
||||
@@ -2465,7 +2465,7 @@ static int _disable_pit_irq(void(*hpet_broadcast_setup)(void))
|
||||
|
||||
static int __init cf_check disable_pit_irq(void)
|
||||
{
|
||||
if ( !_disable_pit_irq(hpet_broadcast_init) )
|
||||
if ( !_disable_pit_irq(true) )
|
||||
{
|
||||
xen_cpuidle = 0;
|
||||
printk("CPUIDLE: disabled due to no HPET. "
|
||||
@@ -2526,7 +2526,7 @@ int time_resume(void)
|
||||
|
||||
resume_platform_timer();
|
||||
|
||||
if ( !_disable_pit_irq(hpet_broadcast_resume) )
|
||||
if ( !_disable_pit_irq(false) )
|
||||
BUG();
|
||||
|
||||
init_percpu_time();
|
||||
|
||||