1. 03 Oct, 2005 10 commits
    • Eric Dumazet's avatar
      [INET]: speedup inet (tcp/dccp) lookups · 81c3d547
      Eric Dumazet authored
      Arnaldo and I agreed it could be applied now, because I have other
      pending patches depending on this one (Thank you Arnaldo)
      
      (The other important patch moves skc_refcnt in a separate cache line,
      so that the SMP/NUMA performance doesnt suffer from cache line ping pongs)
      
      1) First some performance data :
      --------------------------------
      
      tcp_v4_rcv() wastes a *lot* of time in __inet_lookup_established()
      
      The most time critical code is :
      
      sk_for_each(sk, node, &head->chain) {
           if (INET_MATCH(sk, acookie, saddr, daddr, ports, dif))
               goto hit; /* You sunk my battleship! */
      }
      
      The sk_for_each() does use prefetch() hints but only the begining of
      "struct sock" is prefetched.
      
      As INET_MATCH first comparison uses inet_sk(__sk)->daddr, wich is far
      away from the begining of "struct sock", it has to bring into CPU
      cache cold cache line. Each iteration has to use at least 2 cache
      lines.
      
      This can be problematic if some chains are very long.
      
      2) The goal
      -----------
      
      The idea I had is to change things so that INET_MATCH() may return
      FALSE in 99% of cases only using the data already in the CPU cache,
      using one cache line per iteration.
      
      3) Description of the patch
      ---------------------------
      
      Adds a new 'unsigned int skc_hash' field in 'struct sock_common',
      filling a 32 bits hole on 64 bits platform.
      
      struct sock_common {
      	unsigned short		skc_family;
      	volatile unsigned char	skc_state;
      	unsigned char		skc_reuse;
      	int			skc_bound_dev_if;
      	struct hlist_node	skc_node;
      	struct hlist_node	skc_bind_node;
      	atomic_t		skc_refcnt;
      +	unsigned int		skc_hash;
      	struct proto		*skc_prot;
      };
      
      Store in this 32 bits field the full hash, not masked by (ehash_size -
      1) Using this full hash as the first comparison done in INET_MATCH
      permits us immediatly skip the element without touching a second cache
      line in case of a miss.
      
      Suppress the sk_hashent/tw_hashent fields since skc_hash (aliased to
      sk_hash and tw_hash) already contains the slot number if we mask with
      (ehash_size - 1)
      
      File include/net/inet_hashtables.h
      
      64 bits platforms :
      #define INET_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
           (((__sk)->sk_hash == (__hash))
           ((*((__u64 *)&(inet_sk(__sk)->daddr)))== (__cookie))   &&  \
           ((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports))   &&  \
           (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
      
      32bits platforms:
      #define TCP_IPV4_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
           (((__sk)->sk_hash == (__hash))                 &&  \
           (inet_sk(__sk)->daddr          == (__saddr))   &&  \
           (inet_sk(__sk)->rcv_saddr      == (__daddr))   &&  \
           (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
      
      
      - Adds a prefetch(head->chain.first) in 
      __inet_lookup_established()/__tcp_v4_check_established() and 
      __inet6_lookup_established()/__tcp_v6_check_established() and 
      __dccp_v4_check_established() to bring into cache the first element of the 
      list, before the {read|write}_lock(&head->lock);
      Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
      Acked-by: default avatarArnaldo Carvalho de Melo <acme@ghostprotocols.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      81c3d547
    • Michael Chan's avatar
      [TG3]: Refine AMD K8 write-reorder chipset test. · 399de50b
      Michael Chan authored
      Test for VIA K8T800 north bridge instead of AMD K8 HyperTransport
      bridge based on new information from Andi Kleen. The AMD
      HyperTransport interface is not responsible for PCI transactions
      and so the re-ordering is more likely done by the VIA north bridge.
      This code is subject to change if we get more information from AMD
      or VIA.
      
      PCI Express devices are excluded from doing the read flush since all
      chipsets in the write_reorder list are PCI chipsets.
      Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      399de50b
    • Al Viro's avatar
      [CASSINI]: Convert to ethtool_ops · a232f767
      Al Viro authored
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a232f767
    • Herbert Xu's avatar
      [NET]: Fix packet timestamping. · 325ed823
      Herbert Xu authored
      I've found the problem in general.  It affects any 64-bit
      architecture.  The problem occurs when you change the system time.
      
      Suppose that when you boot your system clock is forward by a day.
      This gets recorded down in skb_tv_base.  You then wind the clock back
      by a day.  From that point onwards the offset will be negative which
      essentially overflows the 32-bit variables they're stored in.
      
      In fact, why don't we just store the real time stamp in those 32-bit
      variables? After all, we're not going to overflow for quite a while
      yet.
      
      When we do overflow, we'll need a better solution of course.
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      325ed823
    • Ravikiran G Thirumalai's avatar
      [PATCH] x86_64: Fix numa node topology detection for srat based x86_64 boxes · ddea7be0
      Ravikiran G Thirumalai authored
      2.6.14-rc2 does not assign cpus to proper nodeids on our em64t numa boxen.
      Our boxes use acpi srat for parsing the numa information.
      
      srat_detect_node() used phys_proc_id[] to get to the cpu's local apic id,
      but phys_proc_id[] represents the cpu<->initial_apic_id mapping.  The
      following patch fixes this problem.  Now apicid_to_node[] is properly
      indexed with the local apic id.
      Signed-off-by: default avatarRavikiran Thirumalai <kiran@scalex86.org>
      Acked-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
      Cc: Andi Kleen <ak@muc.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      ddea7be0
    • Linus Torvalds's avatar
    • Paul Jackson's avatar
      [PATCH] Document patch subject line better · d6b9acc0
      Paul Jackson authored
      Improve explanation of the Subject line fields in
      Documentation/SubmittingPatches Canonical Patch Format.
      Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      d6b9acc0
    • James Bottomley's avatar
      [SCSI] Legacy MegaRAID: Fix READ CAPACITY · 51c928c3
      James Bottomley authored
      Some Legacy megaraid cards can't actually cope with the scatter/gather
      version of the READ CAPACITY command (which is what we now send them
      since altering all SCSI internal I/O to go via the block layer).  Fix
      this (and a few other broken megaraid driver assumptions) by sending
      the non-sg version of the command if the sg list only has a single
      element.
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
      51c928c3
    • Linus Torvalds's avatar
      c77054e5
    • Paul Jackson's avatar
      [PATCH] Document from line in patch format · 75f8426c
      Paul Jackson authored
      Document more details of patch format such as the "from" line
      and the "---" marker line, and provide more references for
      patch guidelines.
      Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      75f8426c
  2. 02 Oct, 2005 9 commits
  3. 01 Oct, 2005 9 commits
  4. 30 Sep, 2005 12 commits