qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15
@ 2016-01-15 18:00 Paolo Bonzini
  2016-01-15 18:00 ` [Qemu-devel] [PULL v2 02/15] target-i386: do not duplicate page protection checks Paolo Bonzini
  2016-01-18  9:33 ` [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Peter Maydell
  0 siblings, 2 replies; 3+ messages in thread
From: Paolo Bonzini @ 2016-01-15 18:00 UTC (permalink / raw)
  To: qemu-devel

The following changes since commit 5a57acb66f19ee52723aa05b8afbbc41c3e9ec99:

  Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160115' into staging (2016-01-15 15:49:43 +0000)

are available in the git repository at:


  git://github.com/bonzini/qemu.git tags/for-upstream

for you to fetch changes up to fefd749ce29837d399a38d6052ca9968fa7352e7:

  qemu-char: do not leak QemuMutex when freeing a character device (2016-01-15 18:58:02 +0100)

----------------------------------------------------------------
* qemu-char logfile facility
* NBD coroutine based negotiation
* bugfixes

----------------------------------------------------------------
Cao jin (1):
      SCSI device: fix to incomplete QOMify

Daniel P. Berrange (2):
      qemu-char: delete send_all/recv_all helper methods
      qemu-char: add logfile facility to all chardev backends

Fam Zheng (3):
      nbd: Always call "close_fn" in nbd_client_new
      nbd: Split nbd.c
      nbd-server: Coroutine based negotiation

P J P (2):
      i386: avoid null pointer dereference
      scsi: initialise info object with appropriate size

Paolo Bonzini (5):
      scsi: revert change to scsi_req_cancel_async and add assertions
      target-i386: do not duplicate page protection checks
      nbd-server: do not check request length except for reads and writes
      nbd-server: do not exit on failed memory allocation
      qemu-char: do not leak QemuMutex when freeing a character device

Shmulik Ladkani (1):
      vmw_pvscsi: x-disable-pcie, x-old-pci-configuration back-compat props are 2.5 specific

Zhu Lingshan (1):
      iscsi: send readcapacity10 when readcapacity16 failed

 MAINTAINERS                    |   5 +-
 Makefile.objs                  |   3 +-
 backends/baum.c                |   7 +-
 backends/msmouse.c             |   6 +-
 block/block-backend.c          |   5 +
 block/iscsi.c                  |   7 +-
 blockdev-nbd.c                 |   5 +-
 gdbstub.c                      |   3 +-
 hw/i386/kvmvapic.c             |  15 +-
 hw/scsi/megasas.c              |  14 +-
 hw/scsi/scsi-bus.c             |  15 +-
 hw/scsi/virtio-scsi.c          |   2 +-
 hw/tpm/tpm_passthrough.c       |  29 +-
 include/block/nbd.h            |   3 +-
 include/hw/compat.h            |  17 +-
 include/qemu/sockets.h         |   2 -
 include/sysemu/block-backend.h |   1 +
 include/sysemu/char.h          |   9 +-
 nbd/Makefile.objs              |   1 +
 nbd/client.c                   | 361 ++++++++++++++++++++++++
 nbd/common.c                   |  64 +++++
 nbd/nbd-internal.h             | 113 ++++++++
 nbd.c => nbd/server.c          | 608 ++++++++---------------------------------
 qapi-schema.json               |  49 +++-
 qemu-char.c                    | 320 ++++++++++++++--------
 qemu-nbd.c                     |  10 +-
 qemu-options.hx                |  48 ++--
 spice-qemu-char.c              |  20 +-
 target-i386/helper.c           |  65 ++---
 tests/qemu-iotests/083         |   2 +-
 ui/console.c                   |   6 +-
 31 files changed, 1077 insertions(+), 738 deletions(-)
 create mode 100644 nbd/Makefile.objs
 create mode 100644 nbd/client.c
 create mode 100644 nbd/common.c
 create mode 100644 nbd/nbd-internal.h
 rename nbd.c => nbd/server.c (62%)
-- 
1.8.3.1

diff --git a/target-i386/helper.c b/target-i386/helper.c
index bf58242..6b10019 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -927,7 +927,7 @@ do_check_protect_pse36:
         /* only set write access if already dirty... otherwise wait
            for dirty access */
         assert(!is_write);
-        prot &= ~PROT_WRITE;
+        prot &= ~PAGE_WRITE;
     }
 
  do_mapping:

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PULL v2 02/15] target-i386: do not duplicate page protection checks
  2016-01-15 18:00 [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Paolo Bonzini
@ 2016-01-15 18:00 ` Paolo Bonzini
  2016-01-18  9:33 ` [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2016-01-15 18:00 UTC (permalink / raw)
  To: qemu-devel

x86_cpu_handle_mmu_fault is currently checking twice for writability
and executability of pages; the first time to decide whether to
trigger a page fault, the second time to compute the "prot" argument
to tlb_set_page_with_attrs.

Reorganize code so that first "prot" is computed, then it is used
to check whether to raise a page fault, then finally PROT_WRITE is
removed if the D bit will have to be set.

Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target-i386/helper.c | 65 +++++++++++++++++++---------------------------------
 1 file changed, 23 insertions(+), 42 deletions(-)

diff --git a/target-i386/helper.c b/target-i386/helper.c
index d18be95..6b10019 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -890,38 +890,30 @@ do_check_protect_pse36:
         goto do_fault_rsvd;
     }
     ptep ^= PG_NX_MASK;
-    if ((ptep & PG_NX_MASK) && is_write1 == 2) {
+
+    /* can the page can be put in the TLB?  prot will tell us */
+    if (is_user && !(ptep & PG_USER_MASK)) {
         goto do_fault_protect;
     }
-    switch (mmu_idx) {
-    case MMU_USER_IDX:
-        if (!(ptep & PG_USER_MASK)) {
-            goto do_fault_protect;
-        }
-        if (is_write && !(ptep & PG_RW_MASK)) {
-            goto do_fault_protect;
-        }
-        break;
 
-    case MMU_KSMAP_IDX:
-        if (is_write1 != 2 && (ptep & PG_USER_MASK)) {
-            goto do_fault_protect;
+    prot = 0;
+    if (mmu_idx != MMU_KSMAP_IDX || !(ptep & PG_USER_MASK)) {
+        prot |= PAGE_READ;
+        if ((ptep & PG_RW_MASK) || (!is_user && !(env->cr[0] & CR0_WP_MASK))) {
+            prot |= PAGE_WRITE;
         }
-        /* fall through */
-    case MMU_KNOSMAP_IDX:
-        if (is_write1 == 2 && (env->cr[4] & CR4_SMEP_MASK) &&
-            (ptep & PG_USER_MASK)) {
-            goto do_fault_protect;
-        }
-        if ((env->cr[0] & CR0_WP_MASK) &&
-            is_write && !(ptep & PG_RW_MASK)) {
-            goto do_fault_protect;
-        }
-        break;
+    }
+    if (!(ptep & PG_NX_MASK) &&
+        (mmu_idx == MMU_USER_IDX ||
+         !((env->cr[4] & CR4_SMEP_MASK) && (ptep & PG_USER_MASK)))) {
+        prot |= PAGE_EXEC;
+    }
 
-    default: /* cannot happen */
-        break;
+    if ((prot & (1 << is_write1)) == 0) {
+        goto do_fault_protect;
     }
+
+    /* yes, it can! */
     is_dirty = is_write && !(pte & PG_DIRTY_MASK);
     if (!(pte & PG_ACCESSED_MASK) || is_dirty) {
         pte |= PG_ACCESSED_MASK;
@@ -931,25 +923,13 @@ do_check_protect_pse36:
         x86_stl_phys_notdirty(cs, pte_addr, pte);
     }
 
-    /* the page can be put in the TLB */
-    prot = PAGE_READ;
-    if (!(ptep & PG_NX_MASK) &&
-        (mmu_idx == MMU_USER_IDX ||
-         !((env->cr[4] & CR4_SMEP_MASK) && (ptep & PG_USER_MASK)))) {
-        prot |= PAGE_EXEC;
-    }
-    if (pte & PG_DIRTY_MASK) {
+    if (!(pte & PG_DIRTY_MASK)) {
         /* only set write access if already dirty... otherwise wait
            for dirty access */
-        if (is_user) {
-            if (ptep & PG_RW_MASK)
-                prot |= PAGE_WRITE;
-        } else {
-            if (!(env->cr[0] & CR0_WP_MASK) ||
-                (ptep & PG_RW_MASK))
-                prot |= PAGE_WRITE;
-        }
+        assert(!is_write);
+        prot &= ~PAGE_WRITE;
     }
+
  do_mapping:
     pte = pte & env->a20_mask;
 
@@ -962,6 +942,7 @@ do_check_protect_pse36:
     page_offset = vaddr & (page_size - 1);
     paddr = pte + page_offset;
 
+    assert(prot & (1 << is_write1));
     tlb_set_page_with_attrs(cs, vaddr, paddr, cpu_get_mem_attrs(env),
                             prot, mmu_idx, page_size);
     return 0;
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15
  2016-01-15 18:00 [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Paolo Bonzini
  2016-01-15 18:00 ` [Qemu-devel] [PULL v2 02/15] target-i386: do not duplicate page protection checks Paolo Bonzini
@ 2016-01-18  9:33 ` Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2016-01-18  9:33 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: QEMU Developers

On 15 January 2016 at 18:00, Paolo Bonzini <pbonzini@redhat.com> wrote:
> The following changes since commit 5a57acb66f19ee52723aa05b8afbbc41c3e9ec99:
>
>   Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160115' into staging (2016-01-15 15:49:43 +0000)
>
> are available in the git repository at:
>
>
>   git://github.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to fefd749ce29837d399a38d6052ca9968fa7352e7:
>
>   qemu-char: do not leak QemuMutex when freeing a character device (2016-01-15 18:58:02 +0100)
>
> ----------------------------------------------------------------
> * qemu-char logfile facility
> * NBD coroutine based negotiation
> * bugfixes
>
> ----------------------------------------------------------------

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-01-18  9:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-15 18:00 [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Paolo Bonzini
2016-01-15 18:00 ` [Qemu-devel] [PULL v2 02/15] target-i386: do not duplicate page protection checks Paolo Bonzini
2016-01-18  9:33 ` [Qemu-devel] [PULL v2 00/15] NBD, chardev, SCSI patches for 2015-01-15 Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).