I will fix, thanks.
K.
On 25/06/2009 11:50, "Cui, Dexuan" <dexuan.cui@xxxxxxxxx> wrote:
>> +__initcall(check_port80);
> Hi Jan,
> Actually this is executed too late:
>
> The global flag 'hvm_port80_allowed' is used in __start_xen() ->
> identify_cpu() -> init_intel() -> start_vmx() -> hvm_enable().
>
> And later, in __start_xen() -> do_initcalls(0 -> check_port80(),
> hvm_port80_allowed could be set to 0.
>
> Thanks,
> -- Dexuan
>
>
>
> -----Original Message-----
> From: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
> [mailto:xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Xen
> patchbot-unstable
> Sent: 2009?6?19? 15:56
> To: xen-changelog@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-changelog] [xen-unstable] x86/hvm: don't pass through port 0x80
> in a few special cases
>
> # HG changeset patch
> # User Keir Fraser <keir.fraser@xxxxxxxxxx>
> # Date 1245156733 -3600
> # Node ID cb6f8a34b59af59b08c016a64afaba5e71cec79c
> # Parent 133c889c21a7596be60ab2a79d51b4ce9ded4521
> x86/hvm: don't pass through port 0x80 in a few special cases
>
> In a recent commit (99f85a28a78e96d28907fe036e1671a218fee597), KVM
> disabled the passthrough of this port due to known problems on certain
> HP laptops (see
> http://lkml.indiana.edu/hypermail/linux/kernel/0712.3/0872.html
> and http://lkml.indiana.edu/hypermail/linux/kernel/0801.0/2388.html).
>
> For Xen, don't do this globally, but rather based on a DMI black list.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
> ---
> xen/arch/x86/hvm/Makefile | 1
> xen/arch/x86/hvm/hvm.c | 5 +-
> xen/arch/x86/hvm/quirks.c | 93
> ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 98 insertions(+), 1 deletion(-)
>
> diff -r 133c889c21a7 -r cb6f8a34b59a xen/arch/x86/hvm/Makefile
> --- a/xen/arch/x86/hvm/Makefile Tue Jun 16 13:41:17 2009 +0100
> +++ b/xen/arch/x86/hvm/Makefile Tue Jun 16 13:52:13 2009 +0100
> @@ -9,6 +9,7 @@ obj-y += irq.o
> obj-y += irq.o
> obj-y += mtrr.o
> obj-y += pmtimer.o
> +obj-y += quirks.o
> obj-y += rtc.o
> obj-y += hpet.o
> obj-y += vpt.o
> diff -r 133c889c21a7 -r cb6f8a34b59a xen/arch/x86/hvm/hvm.c
> --- a/xen/arch/x86/hvm/hvm.c Tue Jun 16 13:41:17 2009 +0100
> +++ b/xen/arch/x86/hvm/hvm.c Tue Jun 16 13:52:13 2009 +0100
> @@ -71,6 +71,8 @@ unsigned long __attribute__ ((__section_
>
> void hvm_enable(struct hvm_function_table *fns)
> {
> + extern int hvm_port80_allowed;
> +
> BUG_ON(hvm_enabled);
> printk("HVM: %s enabled\n", fns->name);
>
> @@ -79,7 +81,8 @@ void hvm_enable(struct hvm_function_tabl
> * often used for I/O delays, but the vmexits simply slow things down).
> */
> memset(hvm_io_bitmap, ~0, sizeof(hvm_io_bitmap));
> - __clear_bit(0x80, hvm_io_bitmap);
> + if ( hvm_port80_allowed )
> + __clear_bit(0x80, hvm_io_bitmap);
> __clear_bit(0xed, hvm_io_bitmap);
>
> hvm_funcs = *fns;
> diff -r 133c889c21a7 -r cb6f8a34b59a xen/arch/x86/hvm/quirks.c
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/xen/arch/x86/hvm/quirks.c Tue Jun 16 13:52:13 2009 +0100
> @@ -0,0 +1,93 @@
> +/****************************************************************************
> **
> + * x86/hvm/quirks.c
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
> + * more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> with
> + * this program; if not, write to the Free Software Foundation, Inc., 59
> Temple
> + * Place - Suite 330, Boston, MA 02111-1307 USA.
> + */
> +
> +#include <xen/config.h>
> +#include <xen/types.h>
> +#include <xen/init.h>
> +#include <xen/lib.h>
> +#include <xen/dmi.h>
> +
> +int hvm_port80_allowed = -1;
> +boolean_param("hvm_port80", hvm_port80_allowed);
> +
> +static int __init dmi_hvm_deny_port80(/*const*/ struct dmi_system_id *id)
> +{
> + printk(XENLOG_WARNING "%s: port 0x80 access %s allowed for HVM guests\n",
> + id->ident, hvm_port80_allowed > 0 ? "forcibly" : "not");
> +
> + if ( hvm_port80_allowed < 0 )
> + hvm_port80_allowed = 0;
> +
> + return 0;
> +}
> +
> +static int __init check_port80(void)
> +{
> + /*
> + * Quirk table for systems that misbehave (lock up, etc.) if port
> + * 0x80 is used:
> + */
> + static struct dmi_system_id __initdata hvm_no_port80_dmi_table[] =
> + {
> + {
> + .callback = dmi_hvm_deny_port80,
> + .ident = "Compaq Presario V6000",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
> + DMI_MATCH(DMI_BOARD_NAME, "30B7")
> + }
> + },
> + {
> + .callback = dmi_hvm_deny_port80,
> + .ident = "HP Pavilion dv9000z",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
> + DMI_MATCH(DMI_BOARD_NAME, "30B9")
> + }
> + },
> + {
> + .callback = dmi_hvm_deny_port80,
> + .ident = "HP Pavilion dv6000",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
> + DMI_MATCH(DMI_BOARD_NAME, "30B8")
> + }
> + },
> + {
> + .callback = dmi_hvm_deny_port80,
> + .ident = "HP Pavilion tx1000",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
> + DMI_MATCH(DMI_BOARD_NAME, "30BF")
> + }
> + },
> + {
> + .callback = dmi_hvm_deny_port80,
> + .ident = "Presario F700",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
> + DMI_MATCH(DMI_BOARD_NAME, "30D3")
> + }
> + },
> + { }
> + };
> +
> + dmi_check_system(hvm_no_port80_dmi_table);
> +
> + return 0;
> +}
> +__initcall(check_port80);
>
> _______________________________________________
> Xen-changelog mailing list
> Xen-changelog@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-changelog
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|