summaryrefslogtreecommitdiffstats
path: root/kernel/context_tracking.c
AgeCommit message (Expand)Author
2020-02-14context-tracking: Introduce CONFIG_HAVE_TIF_NOHZFrederic Weisbecker
2019-10-29context_tracking: Rename context_tracking_is_enabled() => context_tracking_en...Frederic Weisbecker
2019-05-21treewide: Add SPDX license identifier for missed filesThomas Gleixner
2015-11-24context_tracking: Switch to new static_branch APIAndy Lutomirski
2015-11-10context_tracking: avoid irq_save/irq_restore on guest entry and exitPaolo Bonzini
2015-11-10context_tracking: remove duplicate enabled checkPaolo Bonzini
2015-05-07context_tracking: Inherit TIF_NOHZ through forks instead of context switchesFrederic Weisbecker
2015-05-07context_tracking: Protect against recursionFrederic Weisbecker
2015-03-09context_tracking: Export context_tracking_user_enter/exitRik van Riel
2015-03-09context_tracking: Run vtime_user_enter/exit only when state == CONTEXT_USERRik van Riel
2015-03-09context_tracking: Generalize context tracking APIs to support user and guestRik van Riel
2015-03-09context_tracking: Rename context symbols to prepare for transition stateFrederic Weisbecker
2014-10-28sched: stop the unbound recursion in preempt_schedule_context()Oleg Nesterov
2014-06-14x86/kprobes: Fix build errors and blacklist context_track_userMasami Hiramatsu
2014-05-05asmlinkage: Add explicit __visible to drivers/*, lib/*, kernel/*Andi Kleen
2013-12-02context_tracking: Wrap static key check into more intuitive function nameFrederic Weisbecker
2013-10-09Merge tag 'v3.12-rc4' into sched/coreIngo Molnar
2013-09-27arm: Fix build error with context tracking callsFrederic Weisbecker
2013-09-25sched: Extract the basic add/sub preempt_count modifiersPeter Zijlstra
2013-08-14context_tracking: User/kernel broundary cross trace eventsFrederic Weisbecker
2013-08-14context_tracking: Optimize context switch off case with static keysFrederic Weisbecker
2013-08-14context_tracking: Optimize guest APIs off case with static keyFrederic Weisbecker
2013-08-14context_tracking: Optimize main APIs off case with static keyFrederic Weisbecker
2013-08-14context_tracking: Ground setup for static key useFrederic Weisbecker
2013-08-13nohz: Only enable context tracking on full dynticks CPUsFrederic Weisbecker
2013-08-13context_tracking: Fix runtime CPU off-caseFrederic Weisbecker
2013-08-13context_tracing: Fix guest accounting with native vtimeFrederic Weisbecker
2013-08-13sched: Consolidate open coded preemptible() checksFrederic Weisbecker
2013-06-20Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/k...Linus Torvalds
2013-06-19tracing/context-tracking: Add preempt_schedule_context() for tracingSteven Rostedt
2013-05-31kvm: Move guest entry/exit APIs to context_trackingFrederic Weisbecker
2013-02-19Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/ker...Linus Torvalds
2013-01-27cputime: Safely read cputime of full dynticks CPUsFrederic Weisbecker
2013-01-27cputime: Generic on-demand virtual cputime accountingFrederic Weisbecker
2013-01-26context_tracking: Add comments on interface and internalsFrederic Weisbecker
2013-01-26context_tracking: Export context state for generic vtimeFrederic Weisbecker
2012-11-30context_tracking: New context tracking susbsystemFrederic Weisbecker
clude "flipper-pic.h" #include "hlwd-pic.h" #include "usbgecko_udbg.h" /* control block */ #define HW_CTRL_COMPATIBLE "nintendo,hollywood-control" #define HW_CTRL_RESETS 0x94 #define HW_CTRL_RESETS_SYS (1<<0) /* gpio */ #define HW_GPIO_COMPATIBLE "nintendo,hollywood-gpio" #define HW_GPIO_BASE(idx) (idx * 0x20) #define HW_GPIO_OUT(idx) (HW_GPIO_BASE(idx) + 0) #define HW_GPIO_DIR(idx) (HW_GPIO_BASE(idx) + 4) #define HW_GPIO_OWNER (HW_GPIO_BASE(1) + 0x1c) #define HW_GPIO_SHUTDOWN (1<<1) #define HW_GPIO_SLOT_LED (1<<5) #define HW_GPIO_SENSOR_BAR (1<<8) static void __iomem *hw_ctrl; static void __iomem *hw_gpio; unsigned long wii_hole_start; unsigned long wii_hole_size; static int __init page_aligned(unsigned long x) { return !(x & (PAGE_SIZE-1)); } void __init wii_memory_fixups(void) { struct memblock_region *p = memblock.memory.regions; BUG_ON(memblock.memory.cnt != 2); BUG_ON(!page_aligned(p[0].base) || !page_aligned(p[1].base)); /* determine hole */ wii_hole_start = ALIGN(p[0].base + p[0].size, PAGE_SIZE); wii_hole_size = p[1].base - wii_hole_start; } unsigned long __init wii_mmu_mapin_mem2(unsigned long top) { unsigned long delta, size, bl; unsigned long max_size = (256<<20); /* MEM2 64MB@0x10000000 */ delta = wii_hole_start + wii_hole_size; size = top - delta; if (__map_without_bats) return delta; for (bl = 128<<10; bl < max_size; bl <<= 1) { if (bl * 2 > size) break; } setbat(4, PAGE_OFFSET+delta, delta, bl, PAGE_KERNEL_X); return delta + bl; } static void __noreturn wii_spin(void) { local_irq_disable(); for (;;) cpu_relax(); } static void __iomem *wii_ioremap_hw_regs(char *name, char *compatible) { void __iomem *hw_regs = NULL; struct device_node *np; struct resource res; int error = -ENODEV; np = of_find_compatible_node(NULL, NULL, compatible); if (!np) { pr_err("no compatible node found for %s\n", compatible); goto out; } error = of_address_to_resource(np, 0, &res); if (error) { pr_err("no valid reg found for %s\n", np->name); goto out_put; } hw_regs = ioremap(res.start, resource_size(&res)); if (hw_regs) { pr_info("%s at 0x%pa mapped to 0x%p\n", name, &res.start, hw_regs); } out_put: of_node_put(np); out: return hw_regs; } static void __init wii_setup_arch(void) { hw_ctrl = wii_ioremap_hw_regs("hw_ctrl", HW_CTRL_COMPATIBLE); hw_gpio = wii_ioremap_hw_regs("hw_gpio", HW_GPIO_COMPATIBLE); if (hw_gpio) { /* turn off the front blue led and IR light */ clrbits32(hw_gpio + HW_GPIO_OUT(0), HW_GPIO_SLOT_LED | HW_GPIO_SENSOR_BAR); } } static void __noreturn wii_restart(char *cmd) { local_irq_disable(); if (hw_ctrl) { /* clear the system reset pin to cause a reset */ clrbits32(hw_ctrl + HW_CTRL_RESETS, HW_CTRL_RESETS_SYS); } wii_spin(); } static void wii_power_off(void) { local_irq_disable(); if (hw_gpio) { /* * set the owner of the shutdown pin to ARM, because it is * accessed through the registers for the ARM, below */ clrbits32(hw_gpio + HW_GPIO_OWNER, HW_GPIO_SHUTDOWN); /* make sure that the poweroff GPIO is configured as output */ setbits32(hw_gpio + HW_GPIO_DIR(1), HW_GPIO_SHUTDOWN); /* drive the poweroff GPIO high */ setbits32(hw_gpio + HW_GPIO_OUT(1), HW_GPIO_SHUTDOWN); } wii_spin(); } static void __noreturn wii_halt(void) { if (ppc_md.restart) ppc_md.restart(NULL); wii_spin(); } static void __init wii_pic_probe(void) { flipper_pic_probe(); hlwd_pic_probe(); } static int __init wii_probe(void) { if (!of_machine_is_compatible("nintendo,wii")) return 0; pm_power_off = wii_power_off; ug_udbg_init(); return 1; } static void wii_shutdown(void) { hlwd_quiesce(); flipper_quiesce(); } define_machine(wii) { .name = "wii", .probe = wii_probe, .setup_arch = wii_setup_arch, .restart = wii_restart, .halt = wii_halt, .init_IRQ = wii_pic_probe, .get_irq = flipper_pic_get_irq, .calibrate_decr = generic_calibrate_decr, .progress = udbg_progress, .machine_shutdown = wii_shutdown, }; static const struct of_device_id wii_of_bus[] = { { .compatible = "nintendo,hollywood", }, { }, }; static int __init wii_device_probe(void) { if (!machine_is(wii)) return 0; of_platform_populate(NULL, wii_of_bus, NULL, NULL); return 0; } device_initcall(wii_device_probe);