Patchwork Add pvevent device driver

login
register
mail settings
Submitter Hu Tao
Date March 14, 2013, 8:48 a.m.
Message ID <1363250927-20298-1-git-send-email-hutao@cn.fujitsu.com>
Download mbox | patch
Permalink /patch/227496/
State New
Headers show

Comments

Hu Tao - March 14, 2013, 8:48 a.m.
pvevent device is used to notify host(qemu) when guest panic
happens.

ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
Gleb Natapov - March 14, 2013, 8:57 a.m.
On Thu, Mar 14, 2013 at 04:48:47PM +0800, Hu Tao wrote:
> pvevent device is used to notify host(qemu) when guest panic
> happens.
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
>  src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> index 23761db..d083245 100644
> --- a/src/acpi-dsdt-isa.dsl
> +++ b/src/acpi-dsdt-isa.dsl
> @@ -99,4 +99,34 @@ Scope(\_SB.PCI0.ISA) {
>              IRQNoFlags() { 3 }
>          })
>      }
> +
> +    Device(PEVT) {
> +        Name(_HID, "MSFT0001")
We cannot use MSFT!

> +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
IO port should be received form QEMU by fw_cfg and patched here at run time.

> +        Field(PEOR, ByteAcc, NoLock, Preserve) {
> +            PEPT,   8,
> +        }
> +
> +        Method(_STA, 0, NotSerialized) {
> +            Store(PEPT, Local0)
> +            If (LEqual(Local0, Zero)) {
> +                Return (0x00)
> +            } Else {
> +                Return (0x0F)
> +            }
> +        }
No probing. If QEMU does not provide IO port function should be patched
to return zero.

> +
> +        Method(RDPT, 0, NotSerialized) {
> +            Store(PEPT, Local0)
> +            Return (Local0)
> +        }
> +
> +        Method(WRPT, 1, NotSerialized) {
> +            Store(Arg0, PEPT)
> +        }
> +
> +        Name(_CRS, ResourceTemplate() {
> +            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> +        })
> +    }
>  }
> -- 
> 1.8.1.4

--
			Gleb.
Paolo Bonzini - March 14, 2013, 9:15 a.m.
Il 14/03/2013 09:48, Hu Tao ha scritto:
> pvevent device is used to notify host(qemu) when guest panic
> happens.
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
>  src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> index 23761db..d083245 100644
> --- a/src/acpi-dsdt-isa.dsl
> +++ b/src/acpi-dsdt-isa.dsl
> @@ -99,4 +99,34 @@ Scope(\_SB.PCI0.ISA) {
>              IRQNoFlags() { 3 }
>          })
>      }
> +
> +    Device(PEVT) {
> +        Name(_HID, "MSFT0001")
> +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> +        Field(PEOR, ByteAcc, NoLock, Preserve) {
> +            PEPT,   8,
> +        }
> +
> +        Method(_STA, 0, NotSerialized) {
> +            Store(PEPT, Local0)
> +            If (LEqual(Local0, Zero)) {
> +                Return (0x00)
> +            } Else {
> +                Return (0x0F)
> +            }
> +        }
> +
> +        Method(RDPT, 0, NotSerialized) {
> +            Store(PEPT, Local0)
> +            Return (Local0)
> +        }
> +
> +        Method(WRPT, 1, NotSerialized) {
> +            Store(Arg0, PEPT)
> +        }
> +
> +        Name(_CRS, ResourceTemplate() {
> +            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> +        })
> +    }
>  }
> 

I like the idea of using methods in the DSDT to isolate from the actual
implementation of the device.  I don't see a huge problem with the
probing, but Gleb does so please go on with the fw_cfg part.

Paolo
Gleb Natapov - March 14, 2013, 9:17 a.m.
On Thu, Mar 14, 2013 at 10:15:02AM +0100, Paolo Bonzini wrote:
> Il 14/03/2013 09:48, Hu Tao ha scritto:
> > pvevent device is used to notify host(qemu) when guest panic
> > happens.
> > 
> > ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html
> > 
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > ---
> >  src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> > 
> > diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> > index 23761db..d083245 100644
> > --- a/src/acpi-dsdt-isa.dsl
> > +++ b/src/acpi-dsdt-isa.dsl
> > @@ -99,4 +99,34 @@ Scope(\_SB.PCI0.ISA) {
> >              IRQNoFlags() { 3 }
> >          })
> >      }
> > +
> > +    Device(PEVT) {
> > +        Name(_HID, "MSFT0001")
> > +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> > +        Field(PEOR, ByteAcc, NoLock, Preserve) {
> > +            PEPT,   8,
> > +        }
> > +
> > +        Method(_STA, 0, NotSerialized) {
> > +            Store(PEPT, Local0)
> > +            If (LEqual(Local0, Zero)) {
> > +                Return (0x00)
> > +            } Else {
> > +                Return (0x0F)
> > +            }
> > +        }
> > +
> > +        Method(RDPT, 0, NotSerialized) {
> > +            Store(PEPT, Local0)
> > +            Return (Local0)
> > +        }
> > +
> > +        Method(WRPT, 1, NotSerialized) {
> > +            Store(Arg0, PEPT)
> > +        }
> > +
> > +        Name(_CRS, ResourceTemplate() {
> > +            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> > +        })
> > +    }
> >  }
> > 
> 
> I like the idea of using methods in the DSDT to isolate from the actual
> implementation of the device.  I don't see a huge problem with the
> probing, but Gleb does so please go on with the fw_cfg part.
> 
Using methods is very nice idea indeed.

--
			Gleb.
Hu Tao - March 14, 2013, 9:33 a.m.
On Thu, Mar 14, 2013 at 10:57:18AM +0200, Gleb Natapov wrote:
> On Thu, Mar 14, 2013 at 04:48:47PM +0800, Hu Tao wrote:
> > pvevent device is used to notify host(qemu) when guest panic
> > happens.
> > 
> > ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html
> > 
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > ---
> >  src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> > 
> > diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> > index 23761db..d083245 100644
> > --- a/src/acpi-dsdt-isa.dsl
> > +++ b/src/acpi-dsdt-isa.dsl
> > @@ -99,4 +99,34 @@ Scope(\_SB.PCI0.ISA) {
> >              IRQNoFlags() { 3 }
> >          })
> >      }
> > +
> > +    Device(PEVT) {
> > +        Name(_HID, "MSFT0001")
> We cannot use MSFT!

OK, I see now, we have to use QEMU0001 or like. More question: if I
request ACPI ID: QEMU  from pnpid@microsoft.com, who should be CCed,
Anthony, qemu-list or any others?


> 
> > +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> IO port should be received form QEMU by fw_cfg and patched here at run time.

If I'm right, io port can be passed to seabios through fw_cfg file
interface, but I'm still figuring out how to patch DSDT here and below at
run time.  Maybe build_ssdt() is close to this.

> 
> > +        Field(PEOR, ByteAcc, NoLock, Preserve) {
> > +            PEPT,   8,
> > +        }
> > +
> > +        Method(_STA, 0, NotSerialized) {
> > +            Store(PEPT, Local0)
> > +            If (LEqual(Local0, Zero)) {
> > +                Return (0x00)
> > +            } Else {
> > +                Return (0x0F)
> > +            }
> > +        }
> No probing. If QEMU does not provide IO port function should be patched
> to return zero.
> 
> > +
> > +        Method(RDPT, 0, NotSerialized) {
> > +            Store(PEPT, Local0)
> > +            Return (Local0)
> > +        }
> > +
> > +        Method(WRPT, 1, NotSerialized) {
> > +            Store(Arg0, PEPT)
> > +        }
> > +
> > +        Name(_CRS, ResourceTemplate() {
> > +            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> > +        })
> > +    }
> >  }
> > -- 
> > 1.8.1.4
> 
> --
> 			Gleb.
Gleb Natapov - March 14, 2013, 9:37 a.m.
On Thu, Mar 14, 2013 at 05:33:19PM +0800, Hu Tao wrote:
> On Thu, Mar 14, 2013 at 10:57:18AM +0200, Gleb Natapov wrote:
> > On Thu, Mar 14, 2013 at 04:48:47PM +0800, Hu Tao wrote:
> > > pvevent device is used to notify host(qemu) when guest panic
> > > happens.
> > > 
> > > ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg02293.html
> > > 
> > > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > > ---
> > >  src/acpi-dsdt-isa.dsl | 30 ++++++++++++++++++++++++++++++
> > >  1 file changed, 30 insertions(+)
> > > 
> > > diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> > > index 23761db..d083245 100644
> > > --- a/src/acpi-dsdt-isa.dsl
> > > +++ b/src/acpi-dsdt-isa.dsl
> > > @@ -99,4 +99,34 @@ Scope(\_SB.PCI0.ISA) {
> > >              IRQNoFlags() { 3 }
> > >          })
> > >      }
> > > +
> > > +    Device(PEVT) {
> > > +        Name(_HID, "MSFT0001")
> > We cannot use MSFT!
> 
> OK, I see now, we have to use QEMU0001 or like. More question: if I
> request ACPI ID: QEMU  from pnpid@microsoft.com, who should be CCed,
> Anthony, qemu-list or any others?
> 
Cannot really answer that. I do not think mailing list should be
included. My be Anthony should request the ID on behalf of QEMU project.

> 
> > 
> > > +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> > IO port should be received form QEMU by fw_cfg and patched here at run time.
> 
> If I'm right, io port can be passed to seabios through fw_cfg file
> interface, but I'm still figuring out how to patch DSDT here and below at
> run time.  Maybe build_ssdt() is close to this.
> 
Yes, we already are doing similar things in build_ssdt().

--
			Gleb.
David Woodhouse - March 14, 2013, 10:08 a.m.
On Thu, 2013-03-14 at 10:57 +0200, Gleb Natapov wrote:
> 
> > +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> IO port should be received form QEMU by fw_cfg and patched here at run
> time.

Pfft. ACPI table should be received from QEMU. :)
Gleb Natapov - March 14, 2013, 10:11 a.m.
On Thu, Mar 14, 2013 at 10:08:09AM +0000, David Woodhouse wrote:
> On Thu, 2013-03-14 at 10:57 +0200, Gleb Natapov wrote:
> > 
> > > +        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> > IO port should be received form QEMU by fw_cfg and patched here at run
> > time.
> 
> Pfft. ACPI table should be received from QEMU. :)
> 
That's the feature that, as far as I understand, everyone agreed upon,
but since we want to apply these patches before that feature is here we
will have to do it old fashioned way for now.

--
			Gleb.

Patch

diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
index 23761db..d083245 100644
--- a/src/acpi-dsdt-isa.dsl
+++ b/src/acpi-dsdt-isa.dsl
@@ -99,4 +99,34 @@  Scope(\_SB.PCI0.ISA) {
             IRQNoFlags() { 3 }
         })
     }
+
+    Device(PEVT) {
+        Name(_HID, "MSFT0001")
+        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
+        Field(PEOR, ByteAcc, NoLock, Preserve) {
+            PEPT,   8,
+        }
+
+        Method(_STA, 0, NotSerialized) {
+            Store(PEPT, Local0)
+            If (LEqual(Local0, Zero)) {
+                Return (0x00)
+            } Else {
+                Return (0x0F)
+            }
+        }
+
+        Method(RDPT, 0, NotSerialized) {
+            Store(PEPT, Local0)
+            Return (Local0)
+        }
+
+        Method(WRPT, 1, NotSerialized) {
+            Store(Arg0, PEPT)
+        }
+
+        Name(_CRS, ResourceTemplate() {
+            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
+        })
+    }
 }