* [Qemu-devel] [PATCH] hw/pl031: Actually raise interrupt on timer expiry
@ 2012-02-14 17:40 Peter Maydell
2012-02-15 11:23 ` Andreas Färber
0 siblings, 1 reply; 3+ messages in thread
From: Peter Maydell @ 2012-02-14 17:40 UTC (permalink / raw)
To: qemu-devel; +Cc: patches
Fix a typo in pl031_interrupt() which meant we were setting a bit
in the interrupt mask rather than the interrupt status register
and thus not actually raising an interrupt. This fix allows the
rtctest program from the kernel's Documentation/rtc.txt to pass
rather than hanging.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Looks like our PL031 has always had this bug since it was added
in 2007... Daniel Forsgren reported this, suggested the fix and
pointed me at the test program. Thanks!
https://bugs.launchpad.net/qemu-linaro/+bug/931940
hw/pl031.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/pl031.c b/hw/pl031.c
index 8416a60..f06b5ae 100644
--- a/hw/pl031.c
+++ b/hw/pl031.c
@@ -76,7 +76,7 @@ static void pl031_interrupt(void * opaque)
{
pl031_state *s = (pl031_state *)opaque;
- s->im = 1;
+ s->is = 1;
DPRINTF("Alarm raised\n");
pl031_update(s);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] hw/pl031: Actually raise interrupt on timer expiry
2012-02-14 17:40 [Qemu-devel] [PATCH] hw/pl031: Actually raise interrupt on timer expiry Peter Maydell
@ 2012-02-15 11:23 ` Andreas Färber
2012-02-15 11:34 ` Peter Maydell
0 siblings, 1 reply; 3+ messages in thread
From: Andreas Färber @ 2012-02-15 11:23 UTC (permalink / raw)
To: Peter Maydell; +Cc: daniel.forsgren, qemu-devel, patches
Am 14.02.2012 18:40, schrieb Peter Maydell:
> Fix a typo in pl031_interrupt() which meant we were setting a bit
> in the interrupt mask rather than the interrupt status register
> and thus not actually raising an interrupt. This fix allows the
> rtctest program from the kernel's Documentation/rtc.txt to pass
> rather than hanging.
>
Reported-by: Daniel Forsgren <daniel.forsgren@enea.com>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Looks like our PL031 has always had this bug since it was added
> in 2007... Daniel Forsgren reported this, suggested the fix and
> pointed me at the test program. Thanks!
Down here the credit for the find gets lost.
> https://bugs.launchpad.net/qemu-linaro/+bug/931940
>
> hw/pl031.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/hw/pl031.c b/hw/pl031.c
> index 8416a60..f06b5ae 100644
> --- a/hw/pl031.c
> +++ b/hw/pl031.c
> @@ -76,7 +76,7 @@ static void pl031_interrupt(void * opaque)
> {
> pl031_state *s = (pl031_state *)opaque;
>
> - s->im = 1;
> + s->is = 1;
> DPRINTF("Alarm raised\n");
> pl031_update(s);
> }
So on RTC_ICR write s->is = 0; but it was never set elsewhere, so
RTC_RIS would always return 0.
Acked-by: Andreas Färber <afaerber@suse.de>
However, to facilitate future review of these non-telling fields I
propose the following documentation patch as a follow-up:
diff --git a/hw/pl031.c b/hw/pl031.c
index 8416a60..a20c625 100644
--- a/hw/pl031.c
+++ b/hw/pl031.c
@@ -32,6 +32,11 @@ do { printf("pl031: " fmt , ## __VA_ARGS__); } while (0)
#define RTC_MIS 0x18 /* Masked interrupt status register */
#define RTC_ICR 0x1c /* Interrupt clear register */
+/**
+ * pl031_state:
+ * @im: Interrupt mask.
+ * @is: Interrupt state.
+ */
typedef struct {
SysBusDevice busdev;
MemoryRegion iomem;
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] hw/pl031: Actually raise interrupt on timer expiry
2012-02-15 11:23 ` Andreas Färber
@ 2012-02-15 11:34 ` Peter Maydell
0 siblings, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2012-02-15 11:34 UTC (permalink / raw)
To: Andreas Färber; +Cc: daniel.forsgren, qemu-devel, patches
On 15 February 2012 11:23, Andreas Färber <afaerber@suse.de> wrote:
> Am 14.02.2012 18:40, schrieb Peter Maydell:
>> Fix a typo in pl031_interrupt() which meant we were setting a bit
>> in the interrupt mask rather than the interrupt status register
>> and thus not actually raising an interrupt. This fix allows the
>> rtctest program from the kernel's Documentation/rtc.txt to pass
>> rather than hanging.
>>
>
> Reported-by: Daniel Forsgren <daniel.forsgren@enea.com>
>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>> Looks like our PL031 has always had this bug since it was added
>> in 2007... Daniel Forsgren reported this, suggested the fix and
>> pointed me at the test program. Thanks!
>
> Down here the credit for the find gets lost.
>
>> https://bugs.launchpad.net/qemu-linaro/+bug/931940
>>
>> hw/pl031.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/hw/pl031.c b/hw/pl031.c
>> index 8416a60..f06b5ae 100644
>> --- a/hw/pl031.c
>> +++ b/hw/pl031.c
>> @@ -76,7 +76,7 @@ static void pl031_interrupt(void * opaque)
>> {
>> pl031_state *s = (pl031_state *)opaque;
>>
>> - s->im = 1;
>> + s->is = 1;
>> DPRINTF("Alarm raised\n");
>> pl031_update(s);
>> }
>
> So on RTC_ICR write s->is = 0; but it was never set elsewhere, so
> RTC_RIS would always return 0.
>
> Acked-by: Andreas Färber <afaerber@suse.de>
>
> However, to facilitate future review of these non-telling fields I
> propose the following documentation patch as a follow-up:
> +/**
> + * pl031_state:
> + * @im: Interrupt mask.
> + * @is: Interrupt state.
> + */
If they're that cryptic we should just rename them to int_mask
and int_status. Alternatively there's a good argument that
'im' should be 'imsc' since that's what the PL031 TRM calls
that register. By that logic 'is' would be 'ris'.
-- PMM
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-02-15 11:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-14 17:40 [Qemu-devel] [PATCH] hw/pl031: Actually raise interrupt on timer expiry Peter Maydell
2012-02-15 11:23 ` Andreas Färber
2012-02-15 11:34 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).