1. 12 6月, 2009 7 次提交
  2. 27 5月, 2009 1 次提交
  3. 19 4月, 2009 2 次提交
    • R
      lguest: fix guest crash on non-linear addresses in gdt pvops · a489f0b5
      Rusty Russell 提交于
      Fixes guest crash 'lguest: bad read address 0x4800000 len 256'
      
      The new per-cpu allocator ends up handing a non-linear address to
      write_gdt_entry.  We do __pa() on it, and hand it to the host, which
      kills us.
      
      I've long wanted to make the hypercall "LOAD_GDT_ENTRY" to match the IDT
      code, but had no pressing reason until now.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Cc: lguest@ozlabs.org
      a489f0b5
    • M
      lguest: fix crash on vmlinux images · 88df781a
      Matias Zabaljauregui 提交于
      Typical message: 'lguest: unhandled trap 6 at 0x418726 (0x0)'
      
      vmlinux guests were broken by 4cd8b5e2
      'lguest: use KVM hypercalls', which rewrites guest text from kvm hypercalls
      to trap 31.
      
      The Launcher mmaps the kernel image.  The Guest executes and
      immediately faults in the first text page (read-only).  Then it hits a
      hypercall, and we rewrite that hypercall, causing a copy-on-write.
      But the Guest pagetables still refer to the old page: we fault again,
      but as Host we see the hypercall already rewritten, and pass the fault
      back to the Guest.  The Guest hasn't set up an IDT yet, so we kill it.
      
      This doesn't happen with bzImages: they unpack themselves and so the
      text pages are already read-write.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Tested-by: NPatrick McHardy <kaber@trash.net>
      88df781a
  4. 30 3月, 2009 3 次提交
  5. 09 3月, 2009 1 次提交
    • R
      lguest: fix for CONFIG_SPARSE_IRQ=y · 6db6a5f3
      Rusty Russell 提交于
      Impact: remove lots of lguest boot WARN_ON() when CONFIG_SPARSE_IRQ=y
      
      We now need to call irq_to_desc_alloc_cpu() before
      set_irq_chip_and_handler_name(), but we can't do that from init_IRQ (no
      kmalloc available).
      
      So do it as we use interrupts instead.  Also means we only alloc for
      irqs we use, which was the intent of CONFIG_SPARSE_IRQ anyway.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Cc: Ingo Molnar <mingo@redhat.com>
      6db6a5f3
  6. 23 2月, 2009 1 次提交
    • I
      x86: remove the Voyager 32-bit subarch · 965c7eca
      Ingo Molnar 提交于
      Impact: remove unused/broken code
      
      The Voyager subarch last built successfully on the v2.6.26 kernel
      and has been stale since then and does not build on the v2.6.27,
      v2.6.28 and v2.6.29-rc5 kernels.
      
      No actual users beyond the maintainer reported this breakage.
      Patches were sent and most of the fixes were accepted but the
      discussion around how to do a few remaining issues cleanly
      fizzled out with no resolution and the code remained broken.
      
      In the v2.6.30 x86 tree development cycle 32-bit subarch support
      has been reworked and removed - and the Voyager code, beyond the
      build problems already known, needs serious and significant
      changes and probably a rewrite to support it.
      
      CONFIG_X86_VOYAGER has been marked BROKEN then. The maintainer has
      been notified but no patches have been sent so far to fix it.
      
      While all other subarchs have been converted to the new scheme,
      voyager is still broken. We'd prefer to receive patches which
      clean up the current situation in a constructive way, but even in
      case of removal there is no obstacle to add that support back
      after the issues have been sorted out in a mutually acceptable
      fashion.
      
      So remove this inactive code for now.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      965c7eca
  7. 30 1月, 2009 2 次提交
  8. 07 1月, 2009 1 次提交
  9. 30 12月, 2008 4 次提交
  10. 24 12月, 2008 1 次提交
    • Y
      x86: fix lguest used_vectors breakage, -v2 · b77b881f
      Yinghai Lu 提交于
      Impact: fix lguest, clean up
      
      32-bit lguest used used_vectors to record vectors, but that model of
      allocating vectors changed and got broken, after we changed vector
      allocation to a per_cpu array.
      
      Try enable that for 64bit, and the array is used for all vectors that
      are not managed by vector_irq per_cpu array.
      
      Also kill system_vectors[], that is now a duplication of the
      used_vectors bitmap.
      
      [ merged in cpus4096 due to io_apic.c cpumask changes. ]
      [ -v2, fix build failure ]
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      b77b881f
  11. 25 8月, 2008 1 次提交
  12. 12 8月, 2008 1 次提交
    • R
      lguest: use get_user_pages_fast() instead of get_user_pages() · 71a3f4ed
      Rusty Russell 提交于
      Using a simple page table thrashing program I measure a slight
      improvement.  The program creates five processes.  Each touches 1000
      pages then schedules the next process.  We repeat this 1000 times.  As
      lguest only caches 4 cr3 values, this rebuilds a lot of shadow page
      tables requiring virt->phys mappings.
      
      	Before: 5.93 seconds
      	After: 5.40 seconds
      
      (Counts of slow vs fastpath in this usage are 6092 and 2852462 respectively.)
      
      And more importantly for lguest, the code is simpler.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      71a3f4ed
  13. 29 7月, 2008 3 次提交
  14. 25 7月, 2008 2 次提交
  15. 11 7月, 2008 1 次提交
  16. 26 6月, 2008 1 次提交
  17. 20 6月, 2008 1 次提交
    • S
      x86: fix NULL pointer deref in __switch_to · 54481cf8
      Suresh Siddha 提交于
      I am able to reproduce the oops reported by Simon in __switch_to() with
      lguest.
      
      My debug showed that there is at least one lguest specific
      issue (which should be present in 2.6.25 and before aswell) and it got
      exposed with a kernel oops with the recent fpu dynamic allocation patches.
      
      In addition to the previous possible scenario (with fpu_counter), in the
      presence of lguest, it is possible that the cpu's TS bit it still set and the
      lguest launcher task's thread_info has TS_USEDFPU still set.
      
      This is because of the way the lguest launcher handling the guest's TS bit.
      (look at lguest_set_ts() in lguest_arch_run_guest()). This can result
      in a DNA fault while doing unlazy_fpu() in __switch_to(). This will
      end up causing a DNA fault in the context of new process thats
      getting context switched in (as opossed to handling DNA fault in the context
      of lguest launcher/helper process).
      
      This is wrong in both pre and post 2.6.25 kernels. In the recent
      2.6.26-rc series, this is showing up as NULL pointer dereferences or
      sleeping function called from atomic context(__switch_to()), as
      we free and dynamically allocate the FPU context for the newly
      created threads. Older kernels might show some FPU corruption for processes
      running inside of lguest.
      
      With the appended patch, my test system is running for more than 50 mins
      now. So atleast some of your oops (hopefully all!) should get fixed.
      Please give it a try. I will spend more time with this fix tomorrow.
      Reported-by: NSimon Holm Thøgersen <odie@cs.aau.dk>
      Reported-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NSuresh Siddha <suresh.b.siddha@intel.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      54481cf8
  18. 30 5月, 2008 2 次提交
    • R
      virtio: set device index in common code. · b769f579
      Rusty Russell 提交于
      Anthony Liguori points out that three different transports use the virtio code,
      but each one keeps its own counter to set the virtio_device's index field.  In
      theory (though not in current practice) this means that names could be
      duplicated, and that risk grows as more transports are created.
      
      So we move the selection of the unique virtio_device.index into the common code
      in virtio.c, which has the side-benefit of removing duplicate code.
      
      The only complexity is that lguest and S/390 use the index to uniquely identify
      the device in case of catastrophic failure before register_virtio_device() is
      called: now we use the offset within the descriptor page as a unique identifier
      for the printks.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Carsten Otte <cotte@de.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Chris Lalancette <clalance@redhat.com>
      Cc: Anthony Liguori <anthony@codemonkey.ws>
      b769f579
    • R
      lguest: use ioremap_cache, not ioremap · e27810f1
      Rusty Russell 提交于
      Thanks to Jon Corbet & LWN.  Only took me a day to join the dots.
      
      Host->Guest netcat before (with unnecessily large receive buffers):
      1073741824 bytes (1.1 GB) copied, 24.7528 seconds, 43.4 MB/s
      
      After:
      1073741824 bytes (1.1 GB) copied, 17.6369 seconds, 60.9 MB/s
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      e27810f1
  19. 27 5月, 2008 1 次提交
  20. 02 5月, 2008 4 次提交
    • R
      lguest: make Launcher see device status updates · a007a751
      Rusty Russell 提交于
      This brings us closer to Real Life, where we'd examine the device
      features once it's set the DRIVER_OK status bit.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      a007a751
    • R
      lguest: remove bogus NULL cpu check · 9f3f7467
      Rusty Russell 提交于
      If lg isn't NULL, and cpu_id is sane, &lg->cpus[cpu_id] can't be NULL.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      9f3f7467
    • R
      lguest: avoid using NR_CPUS as a bounds check. · 24adf127
      Rusty Russell 提交于
      NR_CPUS (being a host number) is an arbitrary limit for the Guest.
      Using the array size directly (which currently happes to be NR_CPUS)
      is more futureproof.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      24adf127
    • R
      virtio: explicit advertisement of driver features · c45a6816
      Rusty Russell 提交于
      A recent proposed feature addition to the virtio block driver revealed
      some flaws in the API: in particular, we assume that feature
      negotiation is complete once a driver's probe function returns.
      
      There is nothing in the API to require this, however, and even I
      didn't notice when it was violated.
      
      So instead, we require the driver to specify what features it supports
      in a table, we can then move the feature negotiation into the virtio
      core.  The intersection of device and driver features are presented in
      a new 'features' bitmap in the struct virtio_device.
      
      Note that this highlights the difference between Linux unsigned-long
      bitmaps where each unsigned long is in native endian, and a
      straight-forward little-endian array of bytes.
      
      Drivers can still remove feature bits in their probe routine if they
      really have to.
      
      API changes:
      - dev->config->feature() no longer gets and acks a feature.
      - drivers should advertise their features in the 'feature_table' field
      - use virtio_has_feature() for extra sanity when checking feature bits
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      c45a6816