1. 22 6月, 2016 2 次提交
  2. 21 6月, 2016 1 次提交
  3. 20 6月, 2016 1 次提交
    • E
      coccinelle: Remove unnecessary variables for function return value · 9be38598
      Eduardo Habkost 提交于
      Use Coccinelle script to replace 'ret = E; return ret' with
      'return E'. The script will do the substitution only when the
      function return type and variable type are the same.
      
      Manual fixups:
      
      * audio/audio.c: coding style of "read (...)" and "write (...)"
      * block/qcow2-cluster.c: wrap line to make it shorter
      * block/qcow2-refcount.c: change indentation of wrapped line
      * target-tricore/op_helper.c: fix coding style of
        "remainder|quotient"
      * target-mips/dsp_helper.c: reverted changes because I don't
        want to argue about checkpatch.pl
      * ui/qemu-pixman.c: fix line indentation
      * block/rbd.c: restore blank line between declarations and
        statements
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
      Message-Id: <1465855078-19435-4-git-send-email-ehabkost@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      [Unused Coccinelle rule name dropped along with a redundant comment;
      whitespace touched up in block/qcow2-cluster.c; stale commit message
      paragraph deleted]
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      9be38598
  4. 17 6月, 2016 8 次提交
  5. 14 6月, 2016 4 次提交
  6. 13 6月, 2016 1 次提交
  7. 07 6月, 2016 9 次提交
  8. 30 5月, 2016 1 次提交
    • B
      ppc: Do some batching of TCG tlb flushes · cd0c6f47
      Benjamin Herrenschmidt 提交于
      On ppc64 especially, we flush the tlb on any slbie or tlbie instruction.
      
      However, those instructions often come in bursts of 3 or more (context
      switch will favor a series of slbie's for example to an slbia if the
      SLB has less than a certain number of entries in it, and tlbie's can
      happen in a series, with PAPR, H_BULK_REMOVE can remove up to 4 entries
      at a time.
      
      Doing a tlb_flush() each time is a waste of time. We end up doing a memset
      of the whole TLB, reloading it for the next instruction, memset'ing again,
      etc...
      
      Those instructions don't have to take effect immediately. For slbie, they
      can wait for the next context synchronizing event. For tlbie, the next
      tlbsync.
      
      This implements batching by keeping a flag that indicates that we have a
      TLB in need of flushing. We check it on interrupts, rfi's, isync's and
      tlbsync and flush the TLB if needed.
      
      This reduces the number of tlb_flush() on a boot to a ubuntu installer
      first dialog screen from roughly 360K down to 36K.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      [clg: added a 'CPUPPCState *' variable in h_remove() and
            h_bulk_remove() ]
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      [dwg: removed spurious whitespace change, use 0/1 not true/false
            consistently, since tlb_need_flush has int type]
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      cd0c6f47
  9. 27 5月, 2016 5 次提交
  10. 21 5月, 2016 1 次提交
  11. 19 5月, 2016 6 次提交
  12. 12 5月, 2016 1 次提交
    • E
      qapi: Simplify semantics of visit_next_list() · d9f62dde
      Eric Blake 提交于
      The semantics of the list visit are somewhat baroque, with the
      following pseudocode when FooList is used:
      
      start()
      for (prev = head; cur = next(prev); prev = &cur) {
          visit(&cur->value)
      }
      
      Note that these semantics (advance before visit) requires that
      the first call to next() return the list head, while all other
      calls return the next element of the list; that is, every visitor
      implementation is required to track extra state to decide whether
      to return the input as-is, or to advance.  It also requires an
      argument of 'GenericList **' to next(), solely because the first
      iteration might need to modify the caller's GenericList head, so
      that all other calls have to do a layer of dereferencing.
      
      Thankfully, we only have two uses of list visits in the entire
      code base: one in spapr_drc (which completely avoids
      visit_next_list(), feeding in integers from a different source
      than uint8List), and one in qapi-visit.py.  That is, all other
      list visitors are generated in qapi-visit.c, and share the same
      paradigm based on a qapi FooList type, so we can refactor how
      lists are laid out with minimal churn among clients.
      
      We can greatly simplify things by hoisting the special case
      into the start() routine, and flipping the order in the loop
      to visit before advance:
      
      start(head)
      for (tail = *head; tail; tail = next(tail)) {
          visit(&tail->value)
      }
      
      With the simpler semantics, visitors have less state to track,
      the argument to next() is reduced to 'GenericList *', and it
      also becomes obvious whether an input visitor is allocating a
      FooList during visit_start_list() (rather than the old way of
      not knowing if an allocation happened until the first
      visit_next_list()).  As a minor drawback, we now allocate in
      two functions instead of one, and have to pass the size to
      both functions (unless we were to tweak the input visitors to
      cache the size to start_list for reuse during next_list, but
      that defeats the goal of less visitor state).
      
      The signature of visit_start_list() is chosen to match
      visit_start_struct(), with the new parameters after 'name'.
      
      The spapr_drc case is a virtual visit, done by passing NULL for
      list, similarly to how NULL is passed to visit_start_struct()
      when a qapi type is not used in those visits.  It was easy to
      provide these semantics for qmp-output and dealloc visitors,
      and a bit harder for qmp-input (several prerequisite patches
      refactored things to make this patch straightforward).  But it
      turned out that the string and opts visitors munge enough other
      state during visit_next_list() to make it easier to just
      document and require a GenericList visit for now; an assertion
      will remind us to adjust things if we need the semantics in the
      future.
      
      Several pre-requisite cleanup patches made the reshuffling of
      the various visitors easier; particularly the qmp input visitor.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1461879932-9020-24-git-send-email-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      d9f62dde