)]}'
{
  "commit": "280ff97494e0fef4124bee5c52e39b23a18dd283",
  "tree": "e906ca3c5e0a6238882d181ab5b01fb3f40ba5df",
  "parents": [
    "4fd78a5f1edf62ab1ca3d23efee4a8a336edb2b6"
  ],
  "author": {
    "name": "Hong H. Pham",
    "email": "hong.pham@windriver.com",
    "time": "Thu Jun 04 02:10:11 2009 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Tue Jun 16 04:56:28 2009 -0700"
  },
  "message": "sparc64: fix and optimize irq distribution\n\nirq_choose_cpu() should compare the affinity mask against cpu_online_map\nrather than CPU_MASK_ALL, since irq_select_affinity() sets the interrupt\u0027s\naffinity mask to cpu_online_map \"and\" CPU_MASK_ALL (which ends up being\njust cpu_online_map).  The mask comparison in irq_choose_cpu() will always\nfail since the two masks are not the same.  So the CPU chosen is the first CPU\nin the intersection of cpu_online_map and CPU_MASK_ALL, which is always CPU0.\nThat means all interrupts are reassigned to CPU0...\n\nDistributing interrupts to CPUs in a linearly increasing round robin fashion\nis not optimal for the UltraSPARC T1/T2.  Also, the irq_rover in\nirq_choose_cpu() causes an interrupt to be assigned to a different\nprocessor each time the interrupt is allocated and released.  This may lead\nto an unbalanced distribution over time.\n\nA static mapping of interrupts to processors is done to optimize and balance\ninterrupt distribution.  For the T1/T2, interrupts are spread to different\ncores first, and then to strands within a core.\n\nThe following is some benchmarks showing the effects of interrupt\ndistribution on a T2.  The test was done with iperf using a pair of T5220\nboxes, each with a 10GBe NIU (XAUI) connected back to back.\n\n  TCP     | Stock       Linear RR IRQ  Optimized IRQ\n  Streams | 2.6.30-rc5  Distribution   Distribution\n          | GBits/sec   GBits/sec      GBits/sec\n  --------+-----------------------------------------\n    1       0.839       0.862          0.868\n    8       1.16        4.96           5.88\n   16       1.15        6.40           8.04\n  100       1.09        7.28           8.68\n\nSigned-off-by: Hong H. Pham \u003chong.pham@windriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "54742e58831c4d78e19bad176145e8ce0bae7d6b",
      "old_mode": 33188,
      "old_path": "arch/sparc/kernel/Makefile",
      "new_id": "47029c66b17a0249cb1b41533d9bb69e9174f19c",
      "new_mode": 33188,
      "new_path": "arch/sparc/kernel/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7430ed080b23183b4dc781240846b3f1f718b14e",
      "new_mode": 33188,
      "new_path": "arch/sparc/kernel/cpumap.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e639880ab864d88aaed303dd0362e58293518a5c",
      "new_mode": 33188,
      "new_path": "arch/sparc/kernel/cpumap.h"
    },
    {
      "type": "modify",
      "old_id": "e5e78f9cfc95d7104ede2ab767fdd1e5401f623c",
      "old_mode": 33188,
      "old_path": "arch/sparc/kernel/irq_64.c",
      "new_id": "bd075054942bd900fecb66516b40d02c95becd0e",
      "new_mode": 33188,
      "new_path": "arch/sparc/kernel/irq_64.c"
    },
    {
      "type": "modify",
      "old_id": "1de47d2169c8f49612e0077ccc1e329da9aa74df",
      "old_mode": 33188,
      "old_path": "arch/sparc/kernel/smp_64.c",
      "new_id": "cfb3d06058ff8d88d48dc127bf11a70768829f9a",
      "new_mode": 33188,
      "new_path": "arch/sparc/kernel/smp_64.c"
    }
  ]
}
