diff mbox

PPC: sPAPR: Only use getpagesize() when we run with kvm

Message ID 84321264-D994-4CB4-8D55-CD238AA504F7@suse.de
State New
Headers show

Commit Message

Alexander Graf Feb. 21, 2014, 10:49 a.m. UTC
On 21.02.2014, at 11:36, Peter Maydell <peter.maydell@linaro.org> wrote:

> On 21 February 2014 09:41, Alexander Graf <agraf@suse.de> wrote:
>> We currently size the msi window trap page according to the host's page
>> size so that we poke a working hole into a memory slot in case we overlap.
>> 
>> However, this is only ever necessary with KVM active. Without KVM, we should
>> rather try to be host platform agnostic and use a constant size: 4k.
>> 
>> This fixes a build breakage on win32 hosts.
> 
> Unfortunately it doesn't:
> 
> cam-vm-266:precise:qemu$ make -C build/w32
> make: Entering directory `/home/petmay01/linaro/qemu-from-laptop/qemu/build/w32'
>  CC    ppc64-softmmu/hw/ppc/spapr_pci.o
> cc1: warnings being treated as errors
> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c: In
> function ‘spapr_pci_msi_init’:
> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
> warning: implicit declaration of function ‘getpagesize’
> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
> warning: nested extern declaration of ‘getpagesize’
> 
> The compiler complains that there's no declaration
> of the function you're trying to call before it gets
> around to deciding whether it can eliminate the code
> as unreachable.

Meh. How about this?


Alex

Comments

Peter Maydell Feb. 21, 2014, 10:56 a.m. UTC | #1
On 21 February 2014 10:49, Alexander Graf <agraf@suse.de> wrote:
>
> On 21.02.2014, at 11:36, Peter Maydell <peter.maydell@linaro.org> wrote:
>
>> On 21 February 2014 09:41, Alexander Graf <agraf@suse.de> wrote:
>>> This fixes a build breakage on win32 hosts.
>>
>> Unfortunately it doesn't:
>>
>> cam-vm-266:precise:qemu$ make -C build/w32
>> make: Entering directory `/home/petmay01/linaro/qemu-from-laptop/qemu/build/w32'
>>  CC    ppc64-softmmu/hw/ppc/spapr_pci.o
>> cc1: warnings being treated as errors
>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c: In
>> function ‘spapr_pci_msi_init’:
>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
>> warning: implicit declaration of function ‘getpagesize’
>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
>> warning: nested extern declaration of ‘getpagesize’
>>
>> The compiler complains that there's no declaration
>> of the function you're trying to call before it gets
>> around to deciding whether it can eliminate the code
>> as unreachable.
>
> Meh. How about this?

Yep, CONFIG_KVM is a sufficiently big hammer to fix this :-)

thanks
-- PMM
Alexander Graf Feb. 21, 2014, 11:17 a.m. UTC | #2
> Am 21.02.2014 um 11:56 schrieb Peter Maydell <peter.maydell@linaro.org>:
> 
>> On 21 February 2014 10:49, Alexander Graf <agraf@suse.de> wrote:
>> 
>>> On 21.02.2014, at 11:36, Peter Maydell <peter.maydell@linaro.org> wrote:
>>> 
>>>> On 21 February 2014 09:41, Alexander Graf <agraf@suse.de> wrote:
>>>> This fixes a build breakage on win32 hosts.
>>> 
>>> Unfortunately it doesn't:
>>> 
>>> cam-vm-266:precise:qemu$ make -C build/w32
>>> make: Entering directory `/home/petmay01/linaro/qemu-from-laptop/qemu/build/w32'
>>> CC    ppc64-softmmu/hw/ppc/spapr_pci.o
>>> cc1: warnings being treated as errors
>>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c: In
>>> function ‘spapr_pci_msi_init’:
>>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
>>> warning: implicit declaration of function ‘getpagesize’
>>> /home/petmay01/linaro/qemu-from-laptop/qemu/hw/ppc/spapr_pci.c:486:
>>> warning: nested extern declaration of ‘getpagesize’
>>> 
>>> The compiler complains that there's no declaration
>>> of the function you're trying to call before it gets
>>> around to deciding whether it can eliminate the code
>>> as unreachable.
>> 
>> Meh. How about this?
> 
> Yep, CONFIG_KVM is a sufficiently big hammer to fix this :-)

Awesome. Queued to ppc-next.

Alex

> 
> thanks
> -- PMM
diff mbox

Patch

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 66ddf10..5f302ba 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -469,6 +469,8 @@  static const MemoryRegionOps spapr_msi_ops = {

 void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr)
 {
+    uint64_t window_size = 4096;
+
     /*
      * As MSI/MSIX interrupts trigger by writing at MSI/MSIX vectors,
      * we need to allocate some memory to catch those writes coming
@@ -476,10 +478,19 @@  void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr)
      * As MSIMessage:addr is going to be the same and MSIMessage:data
      * is going to be a VIRQ number, 4 bytes of the MSI MR will only
      * be used.
+     *
+     * For KVM we want to ensure that this memory is a full page so that
+     * our memory slot is of page size granularity.
      */
+#ifdef CONFIG_KVM
+    if (kvm_enabled()) {
+        window_size = getpagesize();
+    }
+#endif
+
     spapr->msi_win_addr = addr;
     memory_region_init_io(&spapr->msiwindow, NULL, &spapr_msi_ops, spapr,
-                          "msi", getpagesize());
+                          "msi", window_size);
     memory_region_add_subregion(get_system_memory(), spapr->msi_win_addr,
                                 &spapr->msiwindow);
 }