From a8a6b0b1d9b4c35f69f5ab872c2fb8ea5a296c1e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 26 Oct 2010 14:22:13 -0700 Subject: [PATCH] --- yaml --- r: 217499 b: refs/heads/master c: 96e9694df446d1154ec2f4fdba8908588b9cba38 h: refs/heads/master i: 217497: 57ee5d3dc3e3ccecba6d17f88e0192717ee7d203 217495: f947b61caed58424ed1a16c5b9d5bef86963be83 v: v3 --- [refs] | 2 +- trunk/drivers/char/hpet.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 010c1475a8e5..e87625a1a00a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a56d5318716d120e040294bb258901ba89fb9c90 +refs/heads/master: 96e9694df446d1154ec2f4fdba8908588b9cba38 diff --git a/trunk/drivers/char/hpet.c b/trunk/drivers/char/hpet.c index 84e6a7e673b7..a2cbb828e92a 100644 --- a/trunk/drivers/char/hpet.c +++ b/trunk/drivers/char/hpet.c @@ -465,6 +465,21 @@ static int hpet_ioctl_ieon(struct hpet_dev *devp) if (irq) { unsigned long irq_flags; + if (devp->hd_flags & HPET_SHARED_IRQ) { + /* + * To prevent the interrupt handler from seeing an + * unwanted interrupt status bit, program the timer + * so that it will not fire in the near future ... + */ + writel(readl(&timer->hpet_config) & ~Tn_TYPE_CNF_MASK, + &timer->hpet_config); + write_counter(read_counter(&hpet->hpet_mc), + &timer->hpet_compare); + /* ... and clear any left-over status. */ + isr = 1 << (devp - devp->hd_hpets->hp_dev); + writel(isr, &hpet->hpet_isr); + } + sprintf(devp->hd_name, "hpet%d", (int)(devp - hpetp->hp_dev)); irq_flags = devp->hd_flags & HPET_SHARED_IRQ ? IRQF_SHARED : IRQF_DISABLED;