mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
[MIPS] IP27: Fix slice logic to work for arbitrary number of slices.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
84953b39f9
commit
725d7b36c3
1 changed files with 7 additions and 4 deletions
|
@ -131,12 +131,12 @@ static struct irq_chip rt_irq_type = {
|
||||||
static int rt_next_event(unsigned long delta, struct clock_event_device *evt)
|
static int rt_next_event(unsigned long delta, struct clock_event_device *evt)
|
||||||
{
|
{
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
int slice = cputoslice(cpu) == 0;
|
int slice putoslice(cpu);
|
||||||
unsigned long cnt;
|
unsigned long cnt;
|
||||||
|
|
||||||
cnt = LOCAL_HUB_L(PI_RT_COUNT);
|
cnt = LOCAL_HUB_L(PI_RT_COUNT);
|
||||||
cnt += delta;
|
cnt += delta;
|
||||||
LOCAL_HUB_S(slice ? PI_RT_COMPARE_A : PI_RT_COMPARE_B, cnt);
|
LOCAL_HUB_S(PI_RT_COMPARE_A + PI_COUNT_OFFSET * slice, cnt);
|
||||||
|
|
||||||
return LOCAL_HUB_L(PI_RT_COUNT) >= cnt ? -ETIME : 0;
|
return LOCAL_HUB_L(PI_RT_COUNT) >= cnt ? -ETIME : 0;
|
||||||
}
|
}
|
||||||
|
@ -164,9 +164,12 @@ static irqreturn_t hub_rt_counter_handler(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
struct clock_event_device *cd = dev_id;
|
struct clock_event_device *cd = dev_id;
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
int slice = cputoslice(cpu) == 0;
|
int slice = cputoslice(cpu);
|
||||||
|
|
||||||
LOCAL_HUB_S(slice ? PI_RT_PEND_A : PI_RT_PEND_B, 0); /* Ack */
|
/*
|
||||||
|
* Ack
|
||||||
|
*/
|
||||||
|
LOCAL_HUB_S(PI_RT_PEND_A + PI_COUNT_OFFSET * slice, cnt);
|
||||||
cd->event_handler(cd);
|
cd->event_handler(cd);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
Loading…
Reference in a new issue