1. 12 10月, 2010 1 次提交
    • E
      neigh: speedup neigh_hh_init() · 34d101dd
      Eric Dumazet 提交于
      When a new dst is used to send a frame, neigh_resolve_output() tries to
      associate an struct hh_cache to this dst, calling neigh_hh_init() with
      the neigh rwlock write locked.
      
      Most of the time, hh_cache is already known and linked into neighbour,
      so we find it and increment its refcount.
      
      This patch changes the logic so that we call neigh_hh_init() with
      neighbour lock read locked only, so that fast path can be run in
      parallel by concurrent cpus.
      
      This brings part of the speedup we got with commit c7d4426a
      (introduce DST_NOCACHE flag) for non cached dsts, even for cached ones,
      removing one of the contention point that routers hit on multiqueue
      enabled machines.
      
      Further improvements would need to use a seqlock instead of an rwlock to
      protect neigh->ha[], to not dirty neigh too often and remove two atomic
      ops.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      34d101dd
  2. 09 10月, 2010 1 次提交
    • R
      Phonet: cleanup pipe enable socket option · 03789f26
      Rémi Denis-Courmont 提交于
      The current code works like this:
      
        int garbage, status;
        socklen_t len = sizeof(status);
      
        /* enable pipe */
        setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &garbage, sizeof(garbage));
        /* disable pipe */
        setsockopt(fd, SOL_PNPIPE, PNPIPE_DISABLE, &garbage, sizeof(garbage));
        /* get status */
        getsockopt(fd, SOL_PNPIPE, PNPIPE_INQ, &status, &len);
      
      ...which does not follow the usual socket option pattern. This patch
      merges all three "options" into a single gettable&settable option,
      before Linux 2.6.37 gets out:
      
        int status;
        socklen_t len = sizeof(status);
      
        /* enable pipe */
        status = 1;
        setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, sizeof(status));
        /* disable pipe */
        status = 0;
        setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, sizeof(status));
        /* get status */
        getsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, &len);
      
      This also fixes the error code from EFAULT to ENOTCONN.
      Signed-off-by: NRémi Denis-Courmont <remi.denis-courmont@nokia.com>
      Cc: Kumar Sanghvi <kumar.sanghvi@stericsson.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      03789f26
  3. 07 10月, 2010 2 次提交
  4. 06 10月, 2010 7 次提交
  5. 05 10月, 2010 2 次提交
  6. 04 10月, 2010 1 次提交
  7. 01 10月, 2010 2 次提交
  8. 30 9月, 2010 3 次提交
  9. 28 9月, 2010 5 次提交
  10. 27 9月, 2010 2 次提交
  11. 25 9月, 2010 1 次提交
  12. 24 9月, 2010 1 次提交
  13. 23 9月, 2010 5 次提交
  14. 22 9月, 2010 4 次提交
  15. 21 9月, 2010 3 次提交