WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] RE: [Xen-changelog] [xen-unstable] x86/hvm: don't pass t

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>, "Cui, Dexuan" <dexuan.cui@xxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] RE: [Xen-changelog] [xen-unstable] x86/hvm: don't pass through port 0x80 in a few special cases
From: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Date: Thu, 25 Jun 2009 13:53:03 +0100
Cc:
Delivery-date: Thu, 25 Jun 2009 05:53:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <C66923D1.86AE%keir.fraser@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcnwtBB3KMYXC+cYTHO5ZPT62aL6NQEy56DwAAL4+b4AAhNgcA==
Thread-topic: [Xen-devel] RE: [Xen-changelog] [xen-unstable] x86/hvm: don't pass through port 0x80 in a few special cases
User-agent: Microsoft-Entourage/12.19.0.090515
Fixed as c/s 19842.

 -- Keir

On 25/06/2009 12:53, "Keir Fraser" <keir.fraser@xxxxxxxxxxxxx> wrote:

> 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



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>