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

idle.c (963B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * The idle loop for all SuperH platforms.
      4 *
      5 *  Copyright (C) 2002 - 2009  Paul Mundt
      6 */
      7#include <linux/module.h>
      8#include <linux/init.h>
      9#include <linux/mm.h>
     10#include <linux/pm.h>
     11#include <linux/tick.h>
     12#include <linux/preempt.h>
     13#include <linux/thread_info.h>
     14#include <linux/irqflags.h>
     15#include <linux/smp.h>
     16#include <linux/atomic.h>
     17#include <asm/smp.h>
     18#include <asm/bl_bit.h>
     19
     20static void (*sh_idle)(void);
     21
     22void default_idle(void)
     23{
     24	set_bl_bit();
     25	raw_local_irq_enable();
     26	/* Isn't this racy ? */
     27	cpu_sleep();
     28	clear_bl_bit();
     29}
     30
     31void arch_cpu_idle_dead(void)
     32{
     33	play_dead();
     34}
     35
     36void arch_cpu_idle(void)
     37{
     38	sh_idle();
     39}
     40
     41void __init select_idle_routine(void)
     42{
     43	/*
     44	 * If a platform has set its own idle routine, leave it alone.
     45	 */
     46	if (!sh_idle)
     47		sh_idle = default_idle;
     48}
     49
     50void stop_this_cpu(void *unused)
     51{
     52	local_irq_disable();
     53	set_cpu_online(smp_processor_id(), false);
     54
     55	for (;;)
     56		cpu_sleep();
     57}