cregit-Linux how code gets into the kernel

Release 4.14 arch/mn10300/kernel/cevt-mn10300.c

/* MN10300 clockevents
 *
 * Copyright (C) 2010 Red Hat, Inc. All Rights Reserved.
 * Written by Mark Salter (msalter@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public Licence
 * as published by the Free Software Foundation; either version
 * 2 of the Licence, or (at your option) any later version.
 */
#include <linux/clockchips.h>
#include <linux/interrupt.h>
#include <linux/percpu.h>
#include <linux/smp.h>
#include <asm/timex.h>
#include "internal.h"

#ifdef CONFIG_SMP
#if (CONFIG_NR_CPUS > 2) && !defined(CONFIG_GEENERIC_CLOCKEVENTS_BROADCAST)
#error "This doesn't scale well! Need per-core local timers."
#endif
#else /* CONFIG_SMP */

#define stop_jiffies_counter1()

#define reload_jiffies_counter1(x)

#define TMJC1IRQ TMJCIRQ
#endif



static int next_event(unsigned long delta, struct clock_event_device *evt) { unsigned int cpu = smp_processor_id(); if (cpu == 0) { stop_jiffies_counter(); reload_jiffies_counter(delta - 1); } else { stop_jiffies_counter1(); reload_jiffies_counter1(delta - 1); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mark Salter56100.00%1100.00%
Total56100.00%1100.00%

static DEFINE_PER_CPU(struct clock_event_device, mn10300_clockevent_device); static DEFINE_PER_CPU(struct irqaction, timer_irq);
static irqreturn_t timer_interrupt(int irq, void *dev_id) { struct clock_event_device *cd; unsigned int cpu = smp_processor_id(); if (cpu == 0) stop_jiffies_counter(); else stop_jiffies_counter1(); cd = &per_cpu(mn10300_clockevent_device, cpu); cd->event_handler(cd); return IRQ_HANDLED; }

Contributors

PersonTokensPropCommitsCommitProp
Mark Salter58100.00%1100.00%
Total58100.00%1100.00%


static void event_handler(struct clock_event_device *dev) { }

Contributors

PersonTokensPropCommitsCommitProp
Mark Salter10100.00%1100.00%
Total10100.00%1100.00%


static inline void setup_jiffies_interrupt(int irq, struct irqaction *action) { u16 tmp; setup_irq(irq, action); set_intr_level(irq, NUM2GxICR_LEVEL(CONFIG_TIMER_IRQ_LEVEL)); GxICR(irq) |= GxICR_ENABLE | GxICR_DETECT | GxICR_REQUEST; tmp = GxICR(irq); }

Contributors

PersonTokensPropCommitsCommitProp
Geert Uytterhoeven53100.00%1100.00%
Total53100.00%1100.00%


int __init init_clockevents(void) { struct clock_event_device *cd; struct irqaction *iact; unsigned int cpu = smp_processor_id(); cd = &per_cpu(mn10300_clockevent_device, cpu); if (cpu == 0) { stop_jiffies_counter(); cd->irq = TMJCIRQ; } else { stop_jiffies_counter1(); cd->irq = TMJC1IRQ; } cd->name = "Timestamp"; cd->features = CLOCK_EVT_FEAT_ONESHOT; /* Calculate shift/mult. We want to spawn at least 1 second */ clockevents_calc_mult_shift(cd, MN10300_JCCLK, 1); /* Calculate the min / max delta */ cd->max_delta_ns = clockevent_delta2ns(TMJCBR_MAX, cd); cd->max_delta_ticks = TMJCBR_MAX; cd->min_delta_ns = clockevent_delta2ns(100, cd); cd->min_delta_ticks = 100; cd->rating = 200; cd->cpumask = cpumask_of(smp_processor_id()); cd->event_handler = event_handler; cd->set_next_event = next_event; iact = &per_cpu(timer_irq, cpu); iact->flags = IRQF_SHARED | IRQF_TIMER; iact->handler = timer_interrupt; clockevents_register_device(cd); #if defined(CONFIG_SMP) && !defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) /* setup timer irq affinity so it only runs on this cpu */ { struct irq_data *data; data = irq_get_irq_data(cd->irq); cpumask_copy(irq_data_get_affinity_mask(data), cpumask_of(cpu)); iact->flags |= IRQF_NOBALANCING; } #endif if (cpu == 0) { reload_jiffies_counter(MN10300_JC_PER_HZ - 1); iact->name = "CPU0 Timer"; } else { reload_jiffies_counter1(MN10300_JC_PER_HZ - 1); iact->name = "CPU1 Timer"; } setup_jiffies_interrupt(cd->irq, iact); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mark Salter25290.97%120.00%
Nicolai Stange124.33%120.00%
Thomas Gleixner103.61%240.00%
Jiang Liu31.08%120.00%
Total277100.00%5100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Mark Salter45385.31%116.67%
Geert Uytterhoeven539.98%116.67%
Nicolai Stange122.26%116.67%
Thomas Gleixner101.88%233.33%
Jiang Liu30.56%116.67%
Total531100.00%6100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.