[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] [RFC] tools/hvmloader: Control ACPI debugging using a platform flag



On Fri, Jan 17, 2014 at 02:54:58PM +0000, Andrew Cooper wrote:
> Since Qemu-trad
>   c/s 147f83f9b7d87a698c200c4f3eb2d36a0e4fe54b
>   "hw/piix4acpi: Make writes to ACPI_DBG_IO_ADDR actually work."
> 
> there has been quite a lot of extra logging appearing in the VM logs.
> 
> The hotplug debugging contributes 2 vmexits per slot per hotplug event, which
> are simply a waste of time unless a developer is trying to debug VM
> hotplugging problems.
> 
> Introduce a platform flag, "acpi-debug" to indicate in the AML whether
> debugging writes are wanted or not.

Oddly I don't see my response. But why not just do #ifdef DEBUG around
the hvmloader code, and this patch:


diff --git a/hw/piix4acpi.c b/hw/piix4acpi.c
index bf916d9..2b0ce32 100644
--- a/hw/piix4acpi.c
+++ b/hw/piix4acpi.c
@@ -287,7 +287,6 @@ static inline void clear_bit(uint8_t *map, int bit)
 static void acpi_dbg_writel(void *opaque, uint32_t addr, uint32_t val)
 {
     PIIX4ACPI_LOG(PIIX4ACPI_LOG_DEBUG, "ACPI: DBG: 0x%08x\n", val);
-    PIIX4ACPI_LOG(PIIX4ACPI_LOG_INFO, "ACPI:debug: write addr=0x%x, 
val=0x%x.\n", addr, val);
 }
 
 #ifdef CONFIG_PASSTHROUGH


That will it will only happen when you build with 'debug=y' or such.

> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Keir Fraser <keir@xxxxxxx>
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> CC: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> ---
>  docs/misc/xenstore-paths.markdown       |    1 +
>  tools/firmware/hvmloader/acpi/build.c   |    5 +++++
>  tools/firmware/hvmloader/acpi/dsdt.asl  |    1 +
>  tools/firmware/hvmloader/acpi/mk_dsdt.c |    6 ++++++
>  4 files changed, 13 insertions(+)
> 
> diff --git a/docs/misc/xenstore-paths.markdown 
> b/docs/misc/xenstore-paths.markdown
> index 70ab7f4..593a7b1 100644
> --- a/docs/misc/xenstore-paths.markdown
> +++ b/docs/misc/xenstore-paths.markdown
> @@ -190,6 +190,7 @@ Various platform properties.
>  * acpi -- is ACPI enabled for this domain
>  * acpi_s3 -- is ACPI S3 support enabled for this domain
>  * acpi_s4 -- is ACPI S4 support enabled for this domain
> +* acpi-debug -- whether the AML code should write debugging messages to qemu
>  
>  #### ~/platform/generation-id = INTEGER ":" INTEGER [HVM,INTERNAL]
>  
> diff --git a/tools/firmware/hvmloader/acpi/build.c 
> b/tools/firmware/hvmloader/acpi/build.c
> index f1dd3f0..59716bb 100644
> --- a/tools/firmware/hvmloader/acpi/build.c
> +++ b/tools/firmware/hvmloader/acpi/build.c
> @@ -47,6 +47,7 @@ struct acpi_info {
>      uint8_t  com2_present:1;    /* 0[1] - System has COM2? */
>      uint8_t  lpt1_present:1;    /* 0[2] - System has LPT1? */
>      uint8_t  hpet_present:1;    /* 0[3] - System has HPET? */
> +    uint8_t  acpi_debugging:1;  /* 0[4] - ACPI debugging enabled ? */
>      uint32_t pci_min, pci_len;  /* 4, 8 - PCI I/O hole boundaries */
>      uint32_t madt_csum_addr;    /* 12   - Address of MADT checksum */
>      uint32_t madt_lapic0_addr;  /* 16   - Address of first MADT LAPIC struct 
> */
> @@ -404,6 +405,7 @@ void acpi_build_tables(struct acpi_config *config, 
> unsigned int physical)
>      unsigned char       *dsdt;
>      unsigned long        secondary_tables[ACPI_MAX_SECONDARY_TABLES];
>      int                  nr_secondaries, i;
> +    const char          *xs_str;
>  
>      /* Allocate and initialise the acpi info area. */
>      mem_hole_populate_ram(ACPI_INFO_PHYSICAL_ADDRESS >> PAGE_SHIFT, 1);
> @@ -519,10 +521,13 @@ void acpi_build_tables(struct acpi_config *config, 
> unsigned int physical)
>      if ( !new_vm_gid(acpi_info) )
>          goto oom;
>  
> +    xs_str = xenstore_read("platform/acpi-debug", "0");
> +
>      acpi_info->com1_present = uart_exists(0x3f8);
>      acpi_info->com2_present = uart_exists(0x2f8);
>      acpi_info->lpt1_present = lpt_exists(0x378);
>      acpi_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS);
> +    acpi_info->acpi_debugging = (xs_str[0] == '1');
>      acpi_info->pci_min = pci_mem_start;
>      acpi_info->pci_len = pci_mem_end - pci_mem_start;
>  
> diff --git a/tools/firmware/hvmloader/acpi/dsdt.asl 
> b/tools/firmware/hvmloader/acpi/dsdt.asl
> index 247a8ad..e753286 100644
> --- a/tools/firmware/hvmloader/acpi/dsdt.asl
> +++ b/tools/firmware/hvmloader/acpi/dsdt.asl
> @@ -51,6 +51,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0)
>             UAR2, 1,
>             LTP1, 1,
>             HPET, 1,
> +           ADBG, 1,
>             Offset(4),
>             PMIN, 32,
>             PLEN, 32,
> diff --git a/tools/firmware/hvmloader/acpi/mk_dsdt.c 
> b/tools/firmware/hvmloader/acpi/mk_dsdt.c
> index a4b693b..3f0ca74 100644
> --- a/tools/firmware/hvmloader/acpi/mk_dsdt.c
> +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c
> @@ -347,14 +347,18 @@ int main(int argc, char **argv)
>              /* _SUN == dev */
>              stmt("Name", "_SUN, 0x%08x", slot >> 3);
>              push_block("Method", "_EJ0, 1");
> +            push_block("If", "LEqual( \\_SB.ADBG, ONE )");
>              stmt("Store", "0x%02x, \\_GPE.DPT1", slot);
>              stmt("Store", "0x88, \\_GPE.DPT2");
> +            pop_block();
>              stmt("Store", "0x%02x, \\_GPE.PH%02X", /* eject */
>                   (slot & 1) ? 0x10 : 0x01, slot & ~1);
>              pop_block();
>              push_block("Method", "_STA, 0");
> +            push_block("If", "LEqual( \\_SB.ADBG, ONE )");
>              stmt("Store", "0x%02x, \\_GPE.DPT1", slot);
>              stmt("Store", "0x89, \\_GPE.DPT2");
> +            pop_block();
>              if ( slot & 1 )
>                  stmt("ShiftRight", "0x4, \\_GPE.PH%02X, Local1", slot & ~1);
>              else
> @@ -426,8 +430,10 @@ int main(int argc, char **argv)
>          stmt("Store", "PSTB, Local1"); /* XXX: Store (PSTB, SLT) ? */
>          stmt("And", "Local1, 0xff, SLT");
>          /* Debug */
> +        push_block("If", "LEqual( \\_SB.ADBG, ONE )");
>          stmt("Store", "SLT, DPT1");
>          stmt("Store", "EVT, DPT2");
> +        pop_block();
>          /* Decision tree */
>          decision_tree(0x00, 0x100, "SLT", pci_hotplug_notify);
>          pop_block();
> -- 
> 1.7.10.4
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.