cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

processor_idle.c (36241B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * processor_idle - idle state submodule to the ACPI processor driver
      4 *
      5 *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
      6 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
      7 *  Copyright (C) 2004, 2005 Dominik Brodowski <linux@brodo.de>
      8 *  Copyright (C) 2004  Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
      9 *  			- Added processor hotplug support
     10 *  Copyright (C) 2005  Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
     11 *  			- Added support for C3 on SMP
     12 */
     13#define pr_fmt(fmt) "ACPI: " fmt
     14
     15#include <linux/module.h>
     16#include <linux/acpi.h>
     17#include <linux/dmi.h>
     18#include <linux/sched.h>       /* need_resched() */
     19#include <linux/sort.h>
     20#include <linux/tick.h>
     21#include <linux/cpuidle.h>
     22#include <linux/cpu.h>
     23#include <linux/minmax.h>
     24#include <linux/perf_event.h>
     25#include <acpi/processor.h>
     26
     27/*
     28 * Include the apic definitions for x86 to have the APIC timer related defines
     29 * available also for UP (on SMP it gets magically included via linux/smp.h).
     30 * asm/acpi.h is not an option, as it would require more include magic. Also
     31 * creating an empty asm-ia64/apic.h would just trade pest vs. cholera.
     32 */
     33#ifdef CONFIG_X86
     34#include <asm/apic.h>
     35#include <asm/cpu.h>
     36#endif
     37
     38#define ACPI_IDLE_STATE_START	(IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX) ? 1 : 0)
     39
     40static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER;
     41module_param(max_cstate, uint, 0400);
     42static bool nocst __read_mostly;
     43module_param(nocst, bool, 0400);
     44static bool bm_check_disable __read_mostly;
     45module_param(bm_check_disable, bool, 0400);
     46
     47static unsigned int latency_factor __read_mostly = 2;
     48module_param(latency_factor, uint, 0644);
     49
     50static DEFINE_PER_CPU(struct cpuidle_device *, acpi_cpuidle_device);
     51
     52struct cpuidle_driver acpi_idle_driver = {
     53	.name =		"acpi_idle",
     54	.owner =	THIS_MODULE,
     55};
     56
     57#ifdef CONFIG_ACPI_PROCESSOR_CSTATE
     58static
     59DEFINE_PER_CPU(struct acpi_processor_cx * [CPUIDLE_STATE_MAX], acpi_cstate);
     60
     61static int disabled_by_idle_boot_param(void)
     62{
     63	return boot_option_idle_override == IDLE_POLL ||
     64		boot_option_idle_override == IDLE_HALT;
     65}
     66
     67/*
     68 * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3.
     69 * For now disable this. Probably a bug somewhere else.
     70 *
     71 * To skip this limit, boot/load with a large max_cstate limit.
     72 */
     73static int set_max_cstate(const struct dmi_system_id *id)
     74{
     75	if (max_cstate > ACPI_PROCESSOR_MAX_POWER)
     76		return 0;
     77
     78	pr_notice("%s detected - limiting to C%ld max_cstate."
     79		  " Override with \"processor.max_cstate=%d\"\n", id->ident,
     80		  (long)id->driver_data, ACPI_PROCESSOR_MAX_POWER + 1);
     81
     82	max_cstate = (long)id->driver_data;
     83
     84	return 0;
     85}
     86
     87static const struct dmi_system_id processor_power_dmi_table[] = {
     88	{ set_max_cstate, "Clevo 5600D", {
     89	  DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
     90	  DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")},
     91	 (void *)2},
     92	{ set_max_cstate, "Pavilion zv5000", {
     93	  DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
     94	  DMI_MATCH(DMI_PRODUCT_NAME,"Pavilion zv5000 (DS502A#ABA)")},
     95	 (void *)1},
     96	{ set_max_cstate, "Asus L8400B", {
     97	  DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
     98	  DMI_MATCH(DMI_PRODUCT_NAME,"L8400B series Notebook PC")},
     99	 (void *)1},
    100	{},
    101};
    102
    103
    104/*
    105 * Callers should disable interrupts before the call and enable
    106 * interrupts after return.
    107 */
    108static void __cpuidle acpi_safe_halt(void)
    109{
    110	if (!tif_need_resched()) {
    111		safe_halt();
    112		local_irq_disable();
    113	}
    114}
    115
    116#ifdef ARCH_APICTIMER_STOPS_ON_C3
    117
    118/*
    119 * Some BIOS implementations switch to C3 in the published C2 state.
    120 * This seems to be a common problem on AMD boxen, but other vendors
    121 * are affected too. We pick the most conservative approach: we assume
    122 * that the local APIC stops in both C2 and C3.
    123 */
    124static void lapic_timer_check_state(int state, struct acpi_processor *pr,
    125				   struct acpi_processor_cx *cx)
    126{
    127	struct acpi_processor_power *pwr = &pr->power;
    128	u8 type = local_apic_timer_c2_ok ? ACPI_STATE_C3 : ACPI_STATE_C2;
    129
    130	if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
    131		return;
    132
    133	if (boot_cpu_has_bug(X86_BUG_AMD_APIC_C1E))
    134		type = ACPI_STATE_C1;
    135
    136	/*
    137	 * Check, if one of the previous states already marked the lapic
    138	 * unstable
    139	 */
    140	if (pwr->timer_broadcast_on_state < state)
    141		return;
    142
    143	if (cx->type >= type)
    144		pr->power.timer_broadcast_on_state = state;
    145}
    146
    147static void __lapic_timer_propagate_broadcast(void *arg)
    148{
    149	struct acpi_processor *pr = (struct acpi_processor *) arg;
    150
    151	if (pr->power.timer_broadcast_on_state < INT_MAX)
    152		tick_broadcast_enable();
    153	else
    154		tick_broadcast_disable();
    155}
    156
    157static void lapic_timer_propagate_broadcast(struct acpi_processor *pr)
    158{
    159	smp_call_function_single(pr->id, __lapic_timer_propagate_broadcast,
    160				 (void *)pr, 1);
    161}
    162
    163/* Power(C) State timer broadcast control */
    164static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
    165					struct acpi_processor_cx *cx)
    166{
    167	return cx - pr->power.states >= pr->power.timer_broadcast_on_state;
    168}
    169
    170#else
    171
    172static void lapic_timer_check_state(int state, struct acpi_processor *pr,
    173				   struct acpi_processor_cx *cstate) { }
    174static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
    175
    176static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
    177					struct acpi_processor_cx *cx)
    178{
    179	return false;
    180}
    181
    182#endif
    183
    184#if defined(CONFIG_X86)
    185static void tsc_check_state(int state)
    186{
    187	switch (boot_cpu_data.x86_vendor) {
    188	case X86_VENDOR_HYGON:
    189	case X86_VENDOR_AMD:
    190	case X86_VENDOR_INTEL:
    191	case X86_VENDOR_CENTAUR:
    192	case X86_VENDOR_ZHAOXIN:
    193		/*
    194		 * AMD Fam10h TSC will tick in all
    195		 * C/P/S0/S1 states when this bit is set.
    196		 */
    197		if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
    198			return;
    199		fallthrough;
    200	default:
    201		/* TSC could halt in idle, so notify users */
    202		if (state > ACPI_STATE_C1)
    203			mark_tsc_unstable("TSC halts in idle");
    204	}
    205}
    206#else
    207static void tsc_check_state(int state) { return; }
    208#endif
    209
    210static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
    211{
    212
    213	if (!pr->pblk)
    214		return -ENODEV;
    215
    216	/* if info is obtained from pblk/fadt, type equals state */
    217	pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2;
    218	pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3;
    219
    220#ifndef CONFIG_HOTPLUG_CPU
    221	/*
    222	 * Check for P_LVL2_UP flag before entering C2 and above on
    223	 * an SMP system.
    224	 */
    225	if ((num_online_cpus() > 1) &&
    226	    !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
    227		return -ENODEV;
    228#endif
    229
    230	/* determine C2 and C3 address from pblk */
    231	pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4;
    232	pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5;
    233
    234	/* determine latencies from FADT */
    235	pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.c2_latency;
    236	pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.c3_latency;
    237
    238	/*
    239	 * FADT specified C2 latency must be less than or equal to
    240	 * 100 microseconds.
    241	 */
    242	if (acpi_gbl_FADT.c2_latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
    243		acpi_handle_debug(pr->handle, "C2 latency too large [%d]\n",
    244				  acpi_gbl_FADT.c2_latency);
    245		/* invalidate C2 */
    246		pr->power.states[ACPI_STATE_C2].address = 0;
    247	}
    248
    249	/*
    250	 * FADT supplied C3 latency must be less than or equal to
    251	 * 1000 microseconds.
    252	 */
    253	if (acpi_gbl_FADT.c3_latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
    254		acpi_handle_debug(pr->handle, "C3 latency too large [%d]\n",
    255				  acpi_gbl_FADT.c3_latency);
    256		/* invalidate C3 */
    257		pr->power.states[ACPI_STATE_C3].address = 0;
    258	}
    259
    260	acpi_handle_debug(pr->handle, "lvl2[0x%08x] lvl3[0x%08x]\n",
    261			  pr->power.states[ACPI_STATE_C2].address,
    262			  pr->power.states[ACPI_STATE_C3].address);
    263
    264	snprintf(pr->power.states[ACPI_STATE_C2].desc,
    265			 ACPI_CX_DESC_LEN, "ACPI P_LVL2 IOPORT 0x%x",
    266			 pr->power.states[ACPI_STATE_C2].address);
    267	snprintf(pr->power.states[ACPI_STATE_C3].desc,
    268			 ACPI_CX_DESC_LEN, "ACPI P_LVL3 IOPORT 0x%x",
    269			 pr->power.states[ACPI_STATE_C3].address);
    270
    271	return 0;
    272}
    273
    274static int acpi_processor_get_power_info_default(struct acpi_processor *pr)
    275{
    276	if (!pr->power.states[ACPI_STATE_C1].valid) {
    277		/* set the first C-State to C1 */
    278		/* all processors need to support C1 */
    279		pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
    280		pr->power.states[ACPI_STATE_C1].valid = 1;
    281		pr->power.states[ACPI_STATE_C1].entry_method = ACPI_CSTATE_HALT;
    282
    283		snprintf(pr->power.states[ACPI_STATE_C1].desc,
    284			 ACPI_CX_DESC_LEN, "ACPI HLT");
    285	}
    286	/* the C0 state only exists as a filler in our array */
    287	pr->power.states[ACPI_STATE_C0].valid = 1;
    288	return 0;
    289}
    290
    291static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
    292{
    293	int ret;
    294
    295	if (nocst)
    296		return -ENODEV;
    297
    298	ret = acpi_processor_evaluate_cst(pr->handle, pr->id, &pr->power);
    299	if (ret)
    300		return ret;
    301
    302	if (!pr->power.count)
    303		return -EFAULT;
    304
    305	pr->flags.has_cst = 1;
    306	return 0;
    307}
    308
    309static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
    310					   struct acpi_processor_cx *cx)
    311{
    312	static int bm_check_flag = -1;
    313	static int bm_control_flag = -1;
    314
    315
    316	if (!cx->address)
    317		return;
    318
    319	/*
    320	 * PIIX4 Erratum #18: We don't support C3 when Type-F (fast)
    321	 * DMA transfers are used by any ISA device to avoid livelock.
    322	 * Note that we could disable Type-F DMA (as recommended by
    323	 * the erratum), but this is known to disrupt certain ISA
    324	 * devices thus we take the conservative approach.
    325	 */
    326	else if (errata.piix4.fdma) {
    327		acpi_handle_debug(pr->handle,
    328				  "C3 not supported on PIIX4 with Type-F DMA\n");
    329		return;
    330	}
    331
    332	/* All the logic here assumes flags.bm_check is same across all CPUs */
    333	if (bm_check_flag == -1) {
    334		/* Determine whether bm_check is needed based on CPU  */
    335		acpi_processor_power_init_bm_check(&(pr->flags), pr->id);
    336		bm_check_flag = pr->flags.bm_check;
    337		bm_control_flag = pr->flags.bm_control;
    338	} else {
    339		pr->flags.bm_check = bm_check_flag;
    340		pr->flags.bm_control = bm_control_flag;
    341	}
    342
    343	if (pr->flags.bm_check) {
    344		if (!pr->flags.bm_control) {
    345			if (pr->flags.has_cst != 1) {
    346				/* bus mastering control is necessary */
    347				acpi_handle_debug(pr->handle,
    348						  "C3 support requires BM control\n");
    349				return;
    350			} else {
    351				/* Here we enter C3 without bus mastering */
    352				acpi_handle_debug(pr->handle,
    353						  "C3 support without BM control\n");
    354			}
    355		}
    356	} else {
    357		/*
    358		 * WBINVD should be set in fadt, for C3 state to be
    359		 * supported on when bm_check is not required.
    360		 */
    361		if (!(acpi_gbl_FADT.flags & ACPI_FADT_WBINVD)) {
    362			acpi_handle_debug(pr->handle,
    363					  "Cache invalidation should work properly"
    364					  " for C3 to be enabled on SMP systems\n");
    365			return;
    366		}
    367	}
    368
    369	/*
    370	 * Otherwise we've met all of our C3 requirements.
    371	 * Normalize the C3 latency to expidite policy.  Enable
    372	 * checking of bus mastering status (bm_check) so we can
    373	 * use this in our C3 policy
    374	 */
    375	cx->valid = 1;
    376
    377	/*
    378	 * On older chipsets, BM_RLD needs to be set
    379	 * in order for Bus Master activity to wake the
    380	 * system from C3.  Newer chipsets handle DMA
    381	 * during C3 automatically and BM_RLD is a NOP.
    382	 * In either case, the proper way to
    383	 * handle BM_RLD is to set it and leave it set.
    384	 */
    385	acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, 1);
    386
    387	return;
    388}
    389
    390static int acpi_cst_latency_cmp(const void *a, const void *b)
    391{
    392	const struct acpi_processor_cx *x = a, *y = b;
    393
    394	if (!(x->valid && y->valid))
    395		return 0;
    396	if (x->latency > y->latency)
    397		return 1;
    398	if (x->latency < y->latency)
    399		return -1;
    400	return 0;
    401}
    402static void acpi_cst_latency_swap(void *a, void *b, int n)
    403{
    404	struct acpi_processor_cx *x = a, *y = b;
    405
    406	if (!(x->valid && y->valid))
    407		return;
    408	swap(x->latency, y->latency);
    409}
    410
    411static int acpi_processor_power_verify(struct acpi_processor *pr)
    412{
    413	unsigned int i;
    414	unsigned int working = 0;
    415	unsigned int last_latency = 0;
    416	unsigned int last_type = 0;
    417	bool buggy_latency = false;
    418
    419	pr->power.timer_broadcast_on_state = INT_MAX;
    420
    421	for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
    422		struct acpi_processor_cx *cx = &pr->power.states[i];
    423
    424		switch (cx->type) {
    425		case ACPI_STATE_C1:
    426			cx->valid = 1;
    427			break;
    428
    429		case ACPI_STATE_C2:
    430			if (!cx->address)
    431				break;
    432			cx->valid = 1;
    433			break;
    434
    435		case ACPI_STATE_C3:
    436			acpi_processor_power_verify_c3(pr, cx);
    437			break;
    438		}
    439		if (!cx->valid)
    440			continue;
    441		if (cx->type >= last_type && cx->latency < last_latency)
    442			buggy_latency = true;
    443		last_latency = cx->latency;
    444		last_type = cx->type;
    445
    446		lapic_timer_check_state(i, pr, cx);
    447		tsc_check_state(cx->type);
    448		working++;
    449	}
    450
    451	if (buggy_latency) {
    452		pr_notice("FW issue: working around C-state latencies out of order\n");
    453		sort(&pr->power.states[1], max_cstate,
    454		     sizeof(struct acpi_processor_cx),
    455		     acpi_cst_latency_cmp,
    456		     acpi_cst_latency_swap);
    457	}
    458
    459	lapic_timer_propagate_broadcast(pr);
    460
    461	return (working);
    462}
    463
    464static int acpi_processor_get_cstate_info(struct acpi_processor *pr)
    465{
    466	unsigned int i;
    467	int result;
    468
    469
    470	/* NOTE: the idle thread may not be running while calling
    471	 * this function */
    472
    473	/* Zero initialize all the C-states info. */
    474	memset(pr->power.states, 0, sizeof(pr->power.states));
    475
    476	result = acpi_processor_get_power_info_cst(pr);
    477	if (result == -ENODEV)
    478		result = acpi_processor_get_power_info_fadt(pr);
    479
    480	if (result)
    481		return result;
    482
    483	acpi_processor_get_power_info_default(pr);
    484
    485	pr->power.count = acpi_processor_power_verify(pr);
    486
    487	/*
    488	 * if one state of type C2 or C3 is available, mark this
    489	 * CPU as being "idle manageable"
    490	 */
    491	for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
    492		if (pr->power.states[i].valid) {
    493			pr->power.count = i;
    494			pr->flags.power = 1;
    495		}
    496	}
    497
    498	return 0;
    499}
    500
    501/**
    502 * acpi_idle_bm_check - checks if bus master activity was detected
    503 */
    504static int acpi_idle_bm_check(void)
    505{
    506	u32 bm_status = 0;
    507
    508	if (bm_check_disable)
    509		return 0;
    510
    511	acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
    512	if (bm_status)
    513		acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_STATUS, 1);
    514	/*
    515	 * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect
    516	 * the true state of bus mastering activity; forcing us to
    517	 * manually check the BMIDEA bit of each IDE channel.
    518	 */
    519	else if (errata.piix4.bmisx) {
    520		if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01)
    521		    || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01))
    522			bm_status = 1;
    523	}
    524	return bm_status;
    525}
    526
    527static void wait_for_freeze(void)
    528{
    529#ifdef	CONFIG_X86
    530	/* No delay is needed if we are in guest */
    531	if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
    532		return;
    533#endif
    534	/* Dummy wait op - must do something useless after P_LVL2 read
    535	   because chipsets cannot guarantee that STPCLK# signal
    536	   gets asserted in time to freeze execution properly. */
    537	inl(acpi_gbl_FADT.xpm_timer_block.address);
    538}
    539
    540/**
    541 * acpi_idle_do_entry - enter idle state using the appropriate method
    542 * @cx: cstate data
    543 *
    544 * Caller disables interrupt before call and enables interrupt after return.
    545 */
    546static void __cpuidle acpi_idle_do_entry(struct acpi_processor_cx *cx)
    547{
    548	perf_lopwr_cb(true);
    549
    550	if (cx->entry_method == ACPI_CSTATE_FFH) {
    551		/* Call into architectural FFH based C-state */
    552		acpi_processor_ffh_cstate_enter(cx);
    553	} else if (cx->entry_method == ACPI_CSTATE_HALT) {
    554		acpi_safe_halt();
    555	} else {
    556		/* IO port based C-state */
    557		inb(cx->address);
    558		wait_for_freeze();
    559	}
    560
    561	perf_lopwr_cb(false);
    562}
    563
    564/**
    565 * acpi_idle_play_dead - enters an ACPI state for long-term idle (i.e. off-lining)
    566 * @dev: the target CPU
    567 * @index: the index of suggested state
    568 */
    569static int acpi_idle_play_dead(struct cpuidle_device *dev, int index)
    570{
    571	struct acpi_processor_cx *cx = per_cpu(acpi_cstate[index], dev->cpu);
    572
    573	ACPI_FLUSH_CPU_CACHE();
    574
    575	while (1) {
    576
    577		if (cx->entry_method == ACPI_CSTATE_HALT)
    578			safe_halt();
    579		else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) {
    580			inb(cx->address);
    581			wait_for_freeze();
    582		} else
    583			return -ENODEV;
    584
    585#if defined(CONFIG_X86) && defined(CONFIG_HOTPLUG_CPU)
    586		cond_wakeup_cpu0();
    587#endif
    588	}
    589
    590	/* Never reached */
    591	return 0;
    592}
    593
    594static bool acpi_idle_fallback_to_c1(struct acpi_processor *pr)
    595{
    596	return IS_ENABLED(CONFIG_HOTPLUG_CPU) && !pr->flags.has_cst &&
    597		!(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED);
    598}
    599
    600static int c3_cpu_count;
    601static DEFINE_RAW_SPINLOCK(c3_lock);
    602
    603/**
    604 * acpi_idle_enter_bm - enters C3 with proper BM handling
    605 * @drv: cpuidle driver
    606 * @pr: Target processor
    607 * @cx: Target state context
    608 * @index: index of target state
    609 */
    610static int acpi_idle_enter_bm(struct cpuidle_driver *drv,
    611			       struct acpi_processor *pr,
    612			       struct acpi_processor_cx *cx,
    613			       int index)
    614{
    615	static struct acpi_processor_cx safe_cx = {
    616		.entry_method = ACPI_CSTATE_HALT,
    617	};
    618
    619	/*
    620	 * disable bus master
    621	 * bm_check implies we need ARB_DIS
    622	 * bm_control implies whether we can do ARB_DIS
    623	 *
    624	 * That leaves a case where bm_check is set and bm_control is not set.
    625	 * In that case we cannot do much, we enter C3 without doing anything.
    626	 */
    627	bool dis_bm = pr->flags.bm_control;
    628
    629	/* If we can skip BM, demote to a safe state. */
    630	if (!cx->bm_sts_skip && acpi_idle_bm_check()) {
    631		dis_bm = false;
    632		index = drv->safe_state_index;
    633		if (index >= 0) {
    634			cx = this_cpu_read(acpi_cstate[index]);
    635		} else {
    636			cx = &safe_cx;
    637			index = -EBUSY;
    638		}
    639	}
    640
    641	if (dis_bm) {
    642		raw_spin_lock(&c3_lock);
    643		c3_cpu_count++;
    644		/* Disable bus master arbitration when all CPUs are in C3 */
    645		if (c3_cpu_count == num_online_cpus())
    646			acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1);
    647		raw_spin_unlock(&c3_lock);
    648	}
    649
    650	rcu_idle_enter();
    651
    652	acpi_idle_do_entry(cx);
    653
    654	rcu_idle_exit();
    655
    656	/* Re-enable bus master arbitration */
    657	if (dis_bm) {
    658		raw_spin_lock(&c3_lock);
    659		acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
    660		c3_cpu_count--;
    661		raw_spin_unlock(&c3_lock);
    662	}
    663
    664	return index;
    665}
    666
    667static int acpi_idle_enter(struct cpuidle_device *dev,
    668			   struct cpuidle_driver *drv, int index)
    669{
    670	struct acpi_processor_cx *cx = per_cpu(acpi_cstate[index], dev->cpu);
    671	struct acpi_processor *pr;
    672
    673	pr = __this_cpu_read(processors);
    674	if (unlikely(!pr))
    675		return -EINVAL;
    676
    677	if (cx->type != ACPI_STATE_C1) {
    678		if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check)
    679			return acpi_idle_enter_bm(drv, pr, cx, index);
    680
    681		/* C2 to C1 demotion. */
    682		if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) {
    683			index = ACPI_IDLE_STATE_START;
    684			cx = per_cpu(acpi_cstate[index], dev->cpu);
    685		}
    686	}
    687
    688	if (cx->type == ACPI_STATE_C3)
    689		ACPI_FLUSH_CPU_CACHE();
    690
    691	acpi_idle_do_entry(cx);
    692
    693	return index;
    694}
    695
    696static int acpi_idle_enter_s2idle(struct cpuidle_device *dev,
    697				  struct cpuidle_driver *drv, int index)
    698{
    699	struct acpi_processor_cx *cx = per_cpu(acpi_cstate[index], dev->cpu);
    700
    701	if (cx->type == ACPI_STATE_C3) {
    702		struct acpi_processor *pr = __this_cpu_read(processors);
    703
    704		if (unlikely(!pr))
    705			return 0;
    706
    707		if (pr->flags.bm_check) {
    708			u8 bm_sts_skip = cx->bm_sts_skip;
    709
    710			/* Don't check BM_STS, do an unconditional ARB_DIS for S2IDLE */
    711			cx->bm_sts_skip = 1;
    712			acpi_idle_enter_bm(drv, pr, cx, index);
    713			cx->bm_sts_skip = bm_sts_skip;
    714
    715			return 0;
    716		} else {
    717			ACPI_FLUSH_CPU_CACHE();
    718		}
    719	}
    720	acpi_idle_do_entry(cx);
    721
    722	return 0;
    723}
    724
    725static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
    726					   struct cpuidle_device *dev)
    727{
    728	int i, count = ACPI_IDLE_STATE_START;
    729	struct acpi_processor_cx *cx;
    730	struct cpuidle_state *state;
    731
    732	if (max_cstate == 0)
    733		max_cstate = 1;
    734
    735	for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
    736		state = &acpi_idle_driver.states[count];
    737		cx = &pr->power.states[i];
    738
    739		if (!cx->valid)
    740			continue;
    741
    742		per_cpu(acpi_cstate[count], dev->cpu) = cx;
    743
    744		if (lapic_timer_needs_broadcast(pr, cx))
    745			state->flags |= CPUIDLE_FLAG_TIMER_STOP;
    746
    747		if (cx->type == ACPI_STATE_C3) {
    748			state->flags |= CPUIDLE_FLAG_TLB_FLUSHED;
    749			if (pr->flags.bm_check)
    750				state->flags |= CPUIDLE_FLAG_RCU_IDLE;
    751		}
    752
    753		count++;
    754		if (count == CPUIDLE_STATE_MAX)
    755			break;
    756	}
    757
    758	if (!count)
    759		return -EINVAL;
    760
    761	return 0;
    762}
    763
    764static int acpi_processor_setup_cstates(struct acpi_processor *pr)
    765{
    766	int i, count;
    767	struct acpi_processor_cx *cx;
    768	struct cpuidle_state *state;
    769	struct cpuidle_driver *drv = &acpi_idle_driver;
    770
    771	if (max_cstate == 0)
    772		max_cstate = 1;
    773
    774	if (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX)) {
    775		cpuidle_poll_state_init(drv);
    776		count = 1;
    777	} else {
    778		count = 0;
    779	}
    780
    781	for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
    782		cx = &pr->power.states[i];
    783
    784		if (!cx->valid)
    785			continue;
    786
    787		state = &drv->states[count];
    788		snprintf(state->name, CPUIDLE_NAME_LEN, "C%d", i);
    789		strlcpy(state->desc, cx->desc, CPUIDLE_DESC_LEN);
    790		state->exit_latency = cx->latency;
    791		state->target_residency = cx->latency * latency_factor;
    792		state->enter = acpi_idle_enter;
    793
    794		state->flags = 0;
    795		if (cx->type == ACPI_STATE_C1 || cx->type == ACPI_STATE_C2 ||
    796		    cx->type == ACPI_STATE_C3) {
    797			state->enter_dead = acpi_idle_play_dead;
    798			if (cx->type != ACPI_STATE_C3)
    799				drv->safe_state_index = count;
    800		}
    801		/*
    802		 * Halt-induced C1 is not good for ->enter_s2idle, because it
    803		 * re-enables interrupts on exit.  Moreover, C1 is generally not
    804		 * particularly interesting from the suspend-to-idle angle, so
    805		 * avoid C1 and the situations in which we may need to fall back
    806		 * to it altogether.
    807		 */
    808		if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr))
    809			state->enter_s2idle = acpi_idle_enter_s2idle;
    810
    811		count++;
    812		if (count == CPUIDLE_STATE_MAX)
    813			break;
    814	}
    815
    816	drv->state_count = count;
    817
    818	if (!count)
    819		return -EINVAL;
    820
    821	return 0;
    822}
    823
    824static inline void acpi_processor_cstate_first_run_checks(void)
    825{
    826	static int first_run;
    827
    828	if (first_run)
    829		return;
    830	dmi_check_system(processor_power_dmi_table);
    831	max_cstate = acpi_processor_cstate_check(max_cstate);
    832	if (max_cstate < ACPI_C_STATES_MAX)
    833		pr_notice("processor limited to max C-state %d\n", max_cstate);
    834
    835	first_run++;
    836
    837	if (nocst)
    838		return;
    839
    840	acpi_processor_claim_cst_control();
    841}
    842#else
    843
    844static inline int disabled_by_idle_boot_param(void) { return 0; }
    845static inline void acpi_processor_cstate_first_run_checks(void) { }
    846static int acpi_processor_get_cstate_info(struct acpi_processor *pr)
    847{
    848	return -ENODEV;
    849}
    850
    851static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
    852					   struct cpuidle_device *dev)
    853{
    854	return -EINVAL;
    855}
    856
    857static int acpi_processor_setup_cstates(struct acpi_processor *pr)
    858{
    859	return -EINVAL;
    860}
    861
    862#endif /* CONFIG_ACPI_PROCESSOR_CSTATE */
    863
    864struct acpi_lpi_states_array {
    865	unsigned int size;
    866	unsigned int composite_states_size;
    867	struct acpi_lpi_state *entries;
    868	struct acpi_lpi_state *composite_states[ACPI_PROCESSOR_MAX_POWER];
    869};
    870
    871static int obj_get_integer(union acpi_object *obj, u32 *value)
    872{
    873	if (obj->type != ACPI_TYPE_INTEGER)
    874		return -EINVAL;
    875
    876	*value = obj->integer.value;
    877	return 0;
    878}
    879
    880static int acpi_processor_evaluate_lpi(acpi_handle handle,
    881				       struct acpi_lpi_states_array *info)
    882{
    883	acpi_status status;
    884	int ret = 0;
    885	int pkg_count, state_idx = 1, loop;
    886	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
    887	union acpi_object *lpi_data;
    888	struct acpi_lpi_state *lpi_state;
    889
    890	status = acpi_evaluate_object(handle, "_LPI", NULL, &buffer);
    891	if (ACPI_FAILURE(status)) {
    892		acpi_handle_debug(handle, "No _LPI, giving up\n");
    893		return -ENODEV;
    894	}
    895
    896	lpi_data = buffer.pointer;
    897
    898	/* There must be at least 4 elements = 3 elements + 1 package */
    899	if (!lpi_data || lpi_data->type != ACPI_TYPE_PACKAGE ||
    900	    lpi_data->package.count < 4) {
    901		pr_debug("not enough elements in _LPI\n");
    902		ret = -ENODATA;
    903		goto end;
    904	}
    905
    906	pkg_count = lpi_data->package.elements[2].integer.value;
    907
    908	/* Validate number of power states. */
    909	if (pkg_count < 1 || pkg_count != lpi_data->package.count - 3) {
    910		pr_debug("count given by _LPI is not valid\n");
    911		ret = -ENODATA;
    912		goto end;
    913	}
    914
    915	lpi_state = kcalloc(pkg_count, sizeof(*lpi_state), GFP_KERNEL);
    916	if (!lpi_state) {
    917		ret = -ENOMEM;
    918		goto end;
    919	}
    920
    921	info->size = pkg_count;
    922	info->entries = lpi_state;
    923
    924	/* LPI States start at index 3 */
    925	for (loop = 3; state_idx <= pkg_count; loop++, state_idx++, lpi_state++) {
    926		union acpi_object *element, *pkg_elem, *obj;
    927
    928		element = &lpi_data->package.elements[loop];
    929		if (element->type != ACPI_TYPE_PACKAGE || element->package.count < 7)
    930			continue;
    931
    932		pkg_elem = element->package.elements;
    933
    934		obj = pkg_elem + 6;
    935		if (obj->type == ACPI_TYPE_BUFFER) {
    936			struct acpi_power_register *reg;
    937
    938			reg = (struct acpi_power_register *)obj->buffer.pointer;
    939			if (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO &&
    940			    reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)
    941				continue;
    942
    943			lpi_state->address = reg->address;
    944			lpi_state->entry_method =
    945				reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE ?
    946				ACPI_CSTATE_FFH : ACPI_CSTATE_SYSTEMIO;
    947		} else if (obj->type == ACPI_TYPE_INTEGER) {
    948			lpi_state->entry_method = ACPI_CSTATE_INTEGER;
    949			lpi_state->address = obj->integer.value;
    950		} else {
    951			continue;
    952		}
    953
    954		/* elements[7,8] skipped for now i.e. Residency/Usage counter*/
    955
    956		obj = pkg_elem + 9;
    957		if (obj->type == ACPI_TYPE_STRING)
    958			strlcpy(lpi_state->desc, obj->string.pointer,
    959				ACPI_CX_DESC_LEN);
    960
    961		lpi_state->index = state_idx;
    962		if (obj_get_integer(pkg_elem + 0, &lpi_state->min_residency)) {
    963			pr_debug("No min. residency found, assuming 10 us\n");
    964			lpi_state->min_residency = 10;
    965		}
    966
    967		if (obj_get_integer(pkg_elem + 1, &lpi_state->wake_latency)) {
    968			pr_debug("No wakeup residency found, assuming 10 us\n");
    969			lpi_state->wake_latency = 10;
    970		}
    971
    972		if (obj_get_integer(pkg_elem + 2, &lpi_state->flags))
    973			lpi_state->flags = 0;
    974
    975		if (obj_get_integer(pkg_elem + 3, &lpi_state->arch_flags))
    976			lpi_state->arch_flags = 0;
    977
    978		if (obj_get_integer(pkg_elem + 4, &lpi_state->res_cnt_freq))
    979			lpi_state->res_cnt_freq = 1;
    980
    981		if (obj_get_integer(pkg_elem + 5, &lpi_state->enable_parent_state))
    982			lpi_state->enable_parent_state = 0;
    983	}
    984
    985	acpi_handle_debug(handle, "Found %d power states\n", state_idx);
    986end:
    987	kfree(buffer.pointer);
    988	return ret;
    989}
    990
    991/*
    992 * flat_state_cnt - the number of composite LPI states after the process of flattening
    993 */
    994static int flat_state_cnt;
    995
    996/**
    997 * combine_lpi_states - combine local and parent LPI states to form a composite LPI state
    998 *
    999 * @local: local LPI state
   1000 * @parent: parent LPI state
   1001 * @result: composite LPI state
   1002 */
   1003static bool combine_lpi_states(struct acpi_lpi_state *local,
   1004			       struct acpi_lpi_state *parent,
   1005			       struct acpi_lpi_state *result)
   1006{
   1007	if (parent->entry_method == ACPI_CSTATE_INTEGER) {
   1008		if (!parent->address) /* 0 means autopromotable */
   1009			return false;
   1010		result->address = local->address + parent->address;
   1011	} else {
   1012		result->address = parent->address;
   1013	}
   1014
   1015	result->min_residency = max(local->min_residency, parent->min_residency);
   1016	result->wake_latency = local->wake_latency + parent->wake_latency;
   1017	result->enable_parent_state = parent->enable_parent_state;
   1018	result->entry_method = local->entry_method;
   1019
   1020	result->flags = parent->flags;
   1021	result->arch_flags = parent->arch_flags;
   1022	result->index = parent->index;
   1023
   1024	strlcpy(result->desc, local->desc, ACPI_CX_DESC_LEN);
   1025	strlcat(result->desc, "+", ACPI_CX_DESC_LEN);
   1026	strlcat(result->desc, parent->desc, ACPI_CX_DESC_LEN);
   1027	return true;
   1028}
   1029
   1030#define ACPI_LPI_STATE_FLAGS_ENABLED			BIT(0)
   1031
   1032static void stash_composite_state(struct acpi_lpi_states_array *curr_level,
   1033				  struct acpi_lpi_state *t)
   1034{
   1035	curr_level->composite_states[curr_level->composite_states_size++] = t;
   1036}
   1037
   1038static int flatten_lpi_states(struct acpi_processor *pr,
   1039			      struct acpi_lpi_states_array *curr_level,
   1040			      struct acpi_lpi_states_array *prev_level)
   1041{
   1042	int i, j, state_count = curr_level->size;
   1043	struct acpi_lpi_state *p, *t = curr_level->entries;
   1044
   1045	curr_level->composite_states_size = 0;
   1046	for (j = 0; j < state_count; j++, t++) {
   1047		struct acpi_lpi_state *flpi;
   1048
   1049		if (!(t->flags & ACPI_LPI_STATE_FLAGS_ENABLED))
   1050			continue;
   1051
   1052		if (flat_state_cnt >= ACPI_PROCESSOR_MAX_POWER) {
   1053			pr_warn("Limiting number of LPI states to max (%d)\n",
   1054				ACPI_PROCESSOR_MAX_POWER);
   1055			pr_warn("Please increase ACPI_PROCESSOR_MAX_POWER if needed.\n");
   1056			break;
   1057		}
   1058
   1059		flpi = &pr->power.lpi_states[flat_state_cnt];
   1060
   1061		if (!prev_level) { /* leaf/processor node */
   1062			memcpy(flpi, t, sizeof(*t));
   1063			stash_composite_state(curr_level, flpi);
   1064			flat_state_cnt++;
   1065			continue;
   1066		}
   1067
   1068		for (i = 0; i < prev_level->composite_states_size; i++) {
   1069			p = prev_level->composite_states[i];
   1070			if (t->index <= p->enable_parent_state &&
   1071			    combine_lpi_states(p, t, flpi)) {
   1072				stash_composite_state(curr_level, flpi);
   1073				flat_state_cnt++;
   1074				flpi++;
   1075			}
   1076		}
   1077	}
   1078
   1079	kfree(curr_level->entries);
   1080	return 0;
   1081}
   1082
   1083int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
   1084{
   1085	return -EOPNOTSUPP;
   1086}
   1087
   1088static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
   1089{
   1090	int ret, i;
   1091	acpi_status status;
   1092	acpi_handle handle = pr->handle, pr_ahandle;
   1093	struct acpi_device *d = NULL;
   1094	struct acpi_lpi_states_array info[2], *tmp, *prev, *curr;
   1095
   1096	/* make sure our architecture has support */
   1097	ret = acpi_processor_ffh_lpi_probe(pr->id);
   1098	if (ret == -EOPNOTSUPP)
   1099		return ret;
   1100
   1101	if (!osc_pc_lpi_support_confirmed)
   1102		return -EOPNOTSUPP;
   1103
   1104	if (!acpi_has_method(handle, "_LPI"))
   1105		return -EINVAL;
   1106
   1107	flat_state_cnt = 0;
   1108	prev = &info[0];
   1109	curr = &info[1];
   1110	handle = pr->handle;
   1111	ret = acpi_processor_evaluate_lpi(handle, prev);
   1112	if (ret)
   1113		return ret;
   1114	flatten_lpi_states(pr, prev, NULL);
   1115
   1116	status = acpi_get_parent(handle, &pr_ahandle);
   1117	while (ACPI_SUCCESS(status)) {
   1118		d = acpi_fetch_acpi_dev(pr_ahandle);
   1119		handle = pr_ahandle;
   1120
   1121		if (strcmp(acpi_device_hid(d), ACPI_PROCESSOR_CONTAINER_HID))
   1122			break;
   1123
   1124		/* can be optional ? */
   1125		if (!acpi_has_method(handle, "_LPI"))
   1126			break;
   1127
   1128		ret = acpi_processor_evaluate_lpi(handle, curr);
   1129		if (ret)
   1130			break;
   1131
   1132		/* flatten all the LPI states in this level of hierarchy */
   1133		flatten_lpi_states(pr, curr, prev);
   1134
   1135		tmp = prev, prev = curr, curr = tmp;
   1136
   1137		status = acpi_get_parent(handle, &pr_ahandle);
   1138	}
   1139
   1140	pr->power.count = flat_state_cnt;
   1141	/* reset the index after flattening */
   1142	for (i = 0; i < pr->power.count; i++)
   1143		pr->power.lpi_states[i].index = i;
   1144
   1145	/* Tell driver that _LPI is supported. */
   1146	pr->flags.has_lpi = 1;
   1147	pr->flags.power = 1;
   1148
   1149	return 0;
   1150}
   1151
   1152int __weak acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi)
   1153{
   1154	return -ENODEV;
   1155}
   1156
   1157/**
   1158 * acpi_idle_lpi_enter - enters an ACPI any LPI state
   1159 * @dev: the target CPU
   1160 * @drv: cpuidle driver containing cpuidle state info
   1161 * @index: index of target state
   1162 *
   1163 * Return: 0 for success or negative value for error
   1164 */
   1165static int acpi_idle_lpi_enter(struct cpuidle_device *dev,
   1166			       struct cpuidle_driver *drv, int index)
   1167{
   1168	struct acpi_processor *pr;
   1169	struct acpi_lpi_state *lpi;
   1170
   1171	pr = __this_cpu_read(processors);
   1172
   1173	if (unlikely(!pr))
   1174		return -EINVAL;
   1175
   1176	lpi = &pr->power.lpi_states[index];
   1177	if (lpi->entry_method == ACPI_CSTATE_FFH)
   1178		return acpi_processor_ffh_lpi_enter(lpi);
   1179
   1180	return -EINVAL;
   1181}
   1182
   1183static int acpi_processor_setup_lpi_states(struct acpi_processor *pr)
   1184{
   1185	int i;
   1186	struct acpi_lpi_state *lpi;
   1187	struct cpuidle_state *state;
   1188	struct cpuidle_driver *drv = &acpi_idle_driver;
   1189
   1190	if (!pr->flags.has_lpi)
   1191		return -EOPNOTSUPP;
   1192
   1193	for (i = 0; i < pr->power.count && i < CPUIDLE_STATE_MAX; i++) {
   1194		lpi = &pr->power.lpi_states[i];
   1195
   1196		state = &drv->states[i];
   1197		snprintf(state->name, CPUIDLE_NAME_LEN, "LPI-%d", i);
   1198		strlcpy(state->desc, lpi->desc, CPUIDLE_DESC_LEN);
   1199		state->exit_latency = lpi->wake_latency;
   1200		state->target_residency = lpi->min_residency;
   1201		if (lpi->arch_flags)
   1202			state->flags |= CPUIDLE_FLAG_TIMER_STOP;
   1203		state->enter = acpi_idle_lpi_enter;
   1204		drv->safe_state_index = i;
   1205	}
   1206
   1207	drv->state_count = i;
   1208
   1209	return 0;
   1210}
   1211
   1212/**
   1213 * acpi_processor_setup_cpuidle_states- prepares and configures cpuidle
   1214 * global state data i.e. idle routines
   1215 *
   1216 * @pr: the ACPI processor
   1217 */
   1218static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
   1219{
   1220	int i;
   1221	struct cpuidle_driver *drv = &acpi_idle_driver;
   1222
   1223	if (!pr->flags.power_setup_done || !pr->flags.power)
   1224		return -EINVAL;
   1225
   1226	drv->safe_state_index = -1;
   1227	for (i = ACPI_IDLE_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
   1228		drv->states[i].name[0] = '\0';
   1229		drv->states[i].desc[0] = '\0';
   1230	}
   1231
   1232	if (pr->flags.has_lpi)
   1233		return acpi_processor_setup_lpi_states(pr);
   1234
   1235	return acpi_processor_setup_cstates(pr);
   1236}
   1237
   1238/**
   1239 * acpi_processor_setup_cpuidle_dev - prepares and configures CPUIDLE
   1240 * device i.e. per-cpu data
   1241 *
   1242 * @pr: the ACPI processor
   1243 * @dev : the cpuidle device
   1244 */
   1245static int acpi_processor_setup_cpuidle_dev(struct acpi_processor *pr,
   1246					    struct cpuidle_device *dev)
   1247{
   1248	if (!pr->flags.power_setup_done || !pr->flags.power || !dev)
   1249		return -EINVAL;
   1250
   1251	dev->cpu = pr->id;
   1252	if (pr->flags.has_lpi)
   1253		return acpi_processor_ffh_lpi_probe(pr->id);
   1254
   1255	return acpi_processor_setup_cpuidle_cx(pr, dev);
   1256}
   1257
   1258static int acpi_processor_get_power_info(struct acpi_processor *pr)
   1259{
   1260	int ret;
   1261
   1262	ret = acpi_processor_get_lpi_info(pr);
   1263	if (ret)
   1264		ret = acpi_processor_get_cstate_info(pr);
   1265
   1266	return ret;
   1267}
   1268
   1269int acpi_processor_hotplug(struct acpi_processor *pr)
   1270{
   1271	int ret = 0;
   1272	struct cpuidle_device *dev;
   1273
   1274	if (disabled_by_idle_boot_param())
   1275		return 0;
   1276
   1277	if (!pr->flags.power_setup_done)
   1278		return -ENODEV;
   1279
   1280	dev = per_cpu(acpi_cpuidle_device, pr->id);
   1281	cpuidle_pause_and_lock();
   1282	cpuidle_disable_device(dev);
   1283	ret = acpi_processor_get_power_info(pr);
   1284	if (!ret && pr->flags.power) {
   1285		acpi_processor_setup_cpuidle_dev(pr, dev);
   1286		ret = cpuidle_enable_device(dev);
   1287	}
   1288	cpuidle_resume_and_unlock();
   1289
   1290	return ret;
   1291}
   1292
   1293int acpi_processor_power_state_has_changed(struct acpi_processor *pr)
   1294{
   1295	int cpu;
   1296	struct acpi_processor *_pr;
   1297	struct cpuidle_device *dev;
   1298
   1299	if (disabled_by_idle_boot_param())
   1300		return 0;
   1301
   1302	if (!pr->flags.power_setup_done)
   1303		return -ENODEV;
   1304
   1305	/*
   1306	 * FIXME:  Design the ACPI notification to make it once per
   1307	 * system instead of once per-cpu.  This condition is a hack
   1308	 * to make the code that updates C-States be called once.
   1309	 */
   1310
   1311	if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) {
   1312
   1313		/* Protect against cpu-hotplug */
   1314		cpus_read_lock();
   1315		cpuidle_pause_and_lock();
   1316
   1317		/* Disable all cpuidle devices */
   1318		for_each_online_cpu(cpu) {
   1319			_pr = per_cpu(processors, cpu);
   1320			if (!_pr || !_pr->flags.power_setup_done)
   1321				continue;
   1322			dev = per_cpu(acpi_cpuidle_device, cpu);
   1323			cpuidle_disable_device(dev);
   1324		}
   1325
   1326		/* Populate Updated C-state information */
   1327		acpi_processor_get_power_info(pr);
   1328		acpi_processor_setup_cpuidle_states(pr);
   1329
   1330		/* Enable all cpuidle devices */
   1331		for_each_online_cpu(cpu) {
   1332			_pr = per_cpu(processors, cpu);
   1333			if (!_pr || !_pr->flags.power_setup_done)
   1334				continue;
   1335			acpi_processor_get_power_info(_pr);
   1336			if (_pr->flags.power) {
   1337				dev = per_cpu(acpi_cpuidle_device, cpu);
   1338				acpi_processor_setup_cpuidle_dev(_pr, dev);
   1339				cpuidle_enable_device(dev);
   1340			}
   1341		}
   1342		cpuidle_resume_and_unlock();
   1343		cpus_read_unlock();
   1344	}
   1345
   1346	return 0;
   1347}
   1348
   1349static int acpi_processor_registered;
   1350
   1351int acpi_processor_power_init(struct acpi_processor *pr)
   1352{
   1353	int retval;
   1354	struct cpuidle_device *dev;
   1355
   1356	if (disabled_by_idle_boot_param())
   1357		return 0;
   1358
   1359	acpi_processor_cstate_first_run_checks();
   1360
   1361	if (!acpi_processor_get_power_info(pr))
   1362		pr->flags.power_setup_done = 1;
   1363
   1364	/*
   1365	 * Install the idle handler if processor power management is supported.
   1366	 * Note that we use previously set idle handler will be used on
   1367	 * platforms that only support C1.
   1368	 */
   1369	if (pr->flags.power) {
   1370		/* Register acpi_idle_driver if not already registered */
   1371		if (!acpi_processor_registered) {
   1372			acpi_processor_setup_cpuidle_states(pr);
   1373			retval = cpuidle_register_driver(&acpi_idle_driver);
   1374			if (retval)
   1375				return retval;
   1376			pr_debug("%s registered with cpuidle\n",
   1377				 acpi_idle_driver.name);
   1378		}
   1379
   1380		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
   1381		if (!dev)
   1382			return -ENOMEM;
   1383		per_cpu(acpi_cpuidle_device, pr->id) = dev;
   1384
   1385		acpi_processor_setup_cpuidle_dev(pr, dev);
   1386
   1387		/* Register per-cpu cpuidle_device. Cpuidle driver
   1388		 * must already be registered before registering device
   1389		 */
   1390		retval = cpuidle_register_device(dev);
   1391		if (retval) {
   1392			if (acpi_processor_registered == 0)
   1393				cpuidle_unregister_driver(&acpi_idle_driver);
   1394			return retval;
   1395		}
   1396		acpi_processor_registered++;
   1397	}
   1398	return 0;
   1399}
   1400
   1401int acpi_processor_power_exit(struct acpi_processor *pr)
   1402{
   1403	struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
   1404
   1405	if (disabled_by_idle_boot_param())
   1406		return 0;
   1407
   1408	if (pr->flags.power) {
   1409		cpuidle_unregister_device(dev);
   1410		acpi_processor_registered--;
   1411		if (acpi_processor_registered == 0)
   1412			cpuidle_unregister_driver(&acpi_idle_driver);
   1413	}
   1414
   1415	pr->flags.power_setup_done = 0;
   1416	return 0;
   1417}