diff mbox

[v5,10/12] hw/mips: malta: Add KVM support

Message ID 53A3FE04.9030703@imgtec.com
State New
Headers show

Commit Message

James Hogan June 20, 2014, 9:25 a.m. UTC
On 19/06/14 22:47, Aurelien Jarno wrote:
> On Thu, Jun 19, 2014 at 12:34:24PM -0700, Sanjay Lal wrote:
>>
>> On Jun 19, 2014, at 9:27 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
>>
>>> On Tue, Jun 17, 2014 at 11:10:35PM +0100, James Hogan wrote:
>>>> In KVM mode the bootrom is loaded and executed from the last 1MB of
>>>> DRAM.
>>>
>>> What is the reason for that? I am not opposed to that, but if it is
>>> really needed, it means that loading a bootloader into the flash area
>>> (for example YAMON) won't work and that this should be forbidden to the
>>> user.
>>>
>>
>> In trap and emulate mode, both the kernel and userland run in user mode on the processor. Virtual addresses >= 0x80000000 are only accessible in kernel mode, and the default flash area (VA: 0xbfc00000/PA: 0x1fc00000) falls in this range.
>>
>> We therefore decided to relocate the bootloader to the last 1MB of RAM.  This area is excluded from the RAM ranges supplied to the kernel, so it should not be accessible to the user.
>>
> 
> Thanks for the explanation. It means we should disable the support for
> booting from the flash (using -pflash) in KVM mode, as it would simply
> not work.
> 

Hi Aurelien,

Is this fixup to the malta patch the sort of thing you had in mind? If
so I'll generate a v6 patchset with it.

Cheers
James

Comments

Paolo Bonzini June 20, 2014, 11:11 a.m. UTC | #1
Il 20/06/2014 11:25, James Hogan ha scritto:
> On 19/06/14 22:47, Aurelien Jarno wrote:
>> On Thu, Jun 19, 2014 at 12:34:24PM -0700, Sanjay Lal wrote:
>>>
>>> On Jun 19, 2014, at 9:27 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
>>>
>>>> On Tue, Jun 17, 2014 at 11:10:35PM +0100, James Hogan wrote:
>>>>> In KVM mode the bootrom is loaded and executed from the last 1MB of
>>>>> DRAM.
>>>>
>>>> What is the reason for that? I am not opposed to that, but if it is
>>>> really needed, it means that loading a bootloader into the flash area
>>>> (for example YAMON) won't work and that this should be forbidden to the
>>>> user.
>>>>
>>>
>>> In trap and emulate mode, both the kernel and userland run in user mode on the processor. Virtual addresses >= 0x80000000 are only accessible in kernel mode, and the default flash area (VA: 0xbfc00000/PA: 0x1fc00000) falls in this range.
>>>
>>> We therefore decided to relocate the bootloader to the last 1MB of RAM.  This area is excluded from the RAM ranges supplied to the kernel, so it should not be accessible to the user.
>>>
>>
>> Thanks for the explanation. It means we should disable the support for
>> booting from the flash (using -pflash) in KVM mode, as it would simply
>> not work.
>>
>
> Hi Aurelien,
>
> Is this fixup to the malta patch the sort of thing you had in mind? If
> so I'll generate a v6 patchset with it.

It looks like this.  No hurry, it can go in after the main series; just 
git-send-email it so it gets noticed and has a proper commit message.

Paolo
Aurelien Jarno June 20, 2014, 11:20 a.m. UTC | #2
On Fri, Jun 20, 2014 at 10:25:24AM +0100, James Hogan wrote:
> On 19/06/14 22:47, Aurelien Jarno wrote:
> > On Thu, Jun 19, 2014 at 12:34:24PM -0700, Sanjay Lal wrote:
> >>
> >> On Jun 19, 2014, at 9:27 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> >>
> >>> On Tue, Jun 17, 2014 at 11:10:35PM +0100, James Hogan wrote:
> >>>> In KVM mode the bootrom is loaded and executed from the last 1MB of
> >>>> DRAM.
> >>>
> >>> What is the reason for that? I am not opposed to that, but if it is
> >>> really needed, it means that loading a bootloader into the flash area
> >>> (for example YAMON) won't work and that this should be forbidden to the
> >>> user.
> >>>
> >>
> >> In trap and emulate mode, both the kernel and userland run in user mode on the processor. Virtual addresses >= 0x80000000 are only accessible in kernel mode, and the default flash area (VA: 0xbfc00000/PA: 0x1fc00000) falls in this range.
> >>
> >> We therefore decided to relocate the bootloader to the last 1MB of RAM.  This area is excluded from the RAM ranges supplied to the kernel, so it should not be accessible to the user.
> >>
> > 
> > Thanks for the explanation. It means we should disable the support for
> > booting from the flash (using -pflash) in KVM mode, as it would simply
> > not work.
> > 
> 
> Hi Aurelien,
> 
> Is this fixup to the malta patch the sort of thing you had in mind? If
> so I'll generate a v6 patchset with it.
> 
> Cheers
> James
> 
> diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
> index 8bc5392b4223..91b0ce566111 100644
> --- a/hw/mips/mips_malta.c
> +++ b/hw/mips/mips_malta.c
> @@ -1052,6 +1052,12 @@ void mips_malta_init(MachineState *machine)
>                               bootloader_run_addr, kernel_entry);
>          }
>      } else {
> +        /* The flash region isn't executable from a KVM T&E guest */
> +        if (kvm_enabled()) {
> +            error_report("KVM enabled but no -kernel argument was specified. "
> +                         "Booting from flash is not supported with KVM T&E.");
> +            exit(1);
> +        }
>          /* Load firmware from flash. */
>          if (!dinfo) {
>              /* Load a BIOS image. */
> 

This looks fine to me.
diff mbox

Patch

diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
index 8bc5392b4223..91b0ce566111 100644
--- a/hw/mips/mips_malta.c
+++ b/hw/mips/mips_malta.c
@@ -1052,6 +1052,12 @@  void mips_malta_init(MachineState *machine)
                              bootloader_run_addr, kernel_entry);
         }
     } else {
+        /* The flash region isn't executable from a KVM T&E guest */
+        if (kvm_enabled()) {
+            error_report("KVM enabled but no -kernel argument was specified. "
+                         "Booting from flash is not supported with KVM T&E.");
+            exit(1);
+        }
         /* Load firmware from flash. */
         if (!dinfo) {
             /* Load a BIOS image. */