All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@qumranet.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Chris Wright <chrisw@redhat.com>, kvm-devel <kvm@vger.kernel.org>
Subject: Re: [patch 3/4] QEMU/KVM: non-virtualized ACPI PMTimer support
Date: Sun, 25 May 2008 13:18:46 +0300	[thread overview]
Message-ID: <48393D06.2060406@qumranet.com> (raw)
In-Reply-To: <20080525000036.645310064@localhost.localdomain>

Marcelo Tosatti wrote:
> QEMU support for direct pmtimer reads. Hopefully its safe, since its a
> read-only register ?
>
> With self-disable C2 + this I'm seeing less CPU usage when idle with
> CONFIG_CPU_IDLE enabled. Quite noticeable on SMP guests. Windows XP is
> comparable to standard (never seen it consume less than 10% either way,
> usually 20-30%).
>   

This is because the TPR optimization hack is disabled on smp.  You need 
a machine with FlexPriority to get usable smp Windows.

> On migration the destination host can either lack ACPI or have the timer
> in a different IO port, so emulation is necessary.
>
> Or luckily the pmtimer is in the same address. Since the 24-bit counter
> overflow period is only ~= 4.6 seconds, its probably worthwhile to wait
> for synchronization before restarting the guest. Not implemented though.
>
> Also simplify and fix the overflow emulation, which was happening every
> 2.3 seconds instead of the expected 4.6s. 
>
> Index: kvm-userspace.tip/bios/rombios32.c
> ===================================================================
> --- kvm-userspace.tip.orig/bios/rombios32.c
> +++ kvm-userspace.tip/bios/rombios32.c
> @@ -391,7 +391,7 @@ uint8_t bios_uuid[16];
>  unsigned long ebda_cur_addr;
>  #endif
>  int acpi_enabled;
> -uint32_t pm_io_base, smb_io_base;
> +uint32_t pm_io_base, pmtmr_base, smb_io_base;
>  int pm_sci_int;
>  unsigned long bios_table_cur_addr;
>  unsigned long bios_table_end_addr;
> @@ -819,6 +819,12 @@ static void pci_bios_init_device(PCIDevi
>          pci_config_writeb(d, PCI_INTERRUPT_LINE, 9);
>  
>          pm_io_base = PM_IO_BASE;
> +        pmtmr_base = cmos_readb(0x60);
> +        pmtmr_base |= cmos_readb(0x61) << 8;
> +        pmtmr_base |= cmos_readb(0x62) << 16;
> +        pmtmr_base |= cmos_readb(0x63) << 24;
> +        if (!pmtmr_base)
> +            pmtmr_base = pm_io_base + 0x08;
>   

You're splitting the ACPI ioport range into two.  I think the correct 
fix here is to have qemu supply a PMBA hint to the BIOS.  If the hint is 
present, the bios should locate pm_io_base there, and should also avoid 
placing other pio resources there.

> +static void schedule_pmtmr_sci(PIIX4PMState *s)
> +{
> +    int64_t expire_time;
> +    uint32_t pmtmr, left;
> +
> +    if (s->direct_access)
> +        qemu_kvm_get_pmtimer(&pmtmr);
> +    else
> +        pmtmr = get_pmtmr(s);
>   

get_pmtmr() should have this logic.

> +
> +    left = (1 << 24) - pmtmr;
>   

The docs say that SCI is generated when bit 23 toggles, not on 
overflow.  See TMROF_STS PIIX4 documentation.

In any case, this should be in a separate patch.

-- 
error compiling committee.c: too many arguments to function


  reply	other threads:[~2008-05-25 10:18 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-24 23:43 [patch 0/4] C2 "emulation" Marcelo Tosatti
2008-05-24 23:43 ` [patch 1/4] QEMU/KVM: self-disabling C2 emulation Marcelo Tosatti
2008-05-24 23:43 ` [patch 2/4] libkvm: KVM_GET_PMTIMER ioctl support Marcelo Tosatti
2008-05-24 23:43 ` [patch 3/4] QEMU/KVM: non-virtualized ACPI PMTimer support Marcelo Tosatti
2008-05-25 10:18   ` Avi Kivity [this message]
2008-05-25 16:32     ` Marcelo Tosatti
2008-05-26  8:16       ` Avi Kivity
2008-05-29 17:56     ` Marcelo Tosatti
2008-05-31  7:52       ` Avi Kivity
2008-05-25 10:19   ` Avi Kivity
2008-05-25 17:39     ` Marcelo Tosatti
2008-05-26  8:23       ` Avi Kivity
2008-05-24 23:43 ` [patch 4/4] KVM: allow direct access to PMTimer port Marcelo Tosatti
2008-05-25 10:04   ` Avi Kivity
2008-05-25 16:09     ` Marcelo Tosatti
2008-05-25 12:31   ` Avi Kivity
2008-05-25 16:12     ` Marcelo Tosatti
2008-05-26  8:03       ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48393D06.2060406@qumranet.com \
    --to=avi@qumranet.com \
    --cc=chrisw@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.