)]}'
{
  "commit": "6d5b5acca9e566515ef3f1ed617e7295c4f94345",
  "tree": "cad7d2487a95bacbf18ca06be3cef96d4dcf87c9",
  "parents": [
    "7a203f3b089be4410fe065dd9927027eade94557"
  ],
  "author": {
    "name": "Heiko Carstens",
    "email": "heiko.carstens@de.ibm.com",
    "time": "Mon Mar 09 13:31:59 2009 +0100"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Mon Mar 09 08:13:35 2009 -0700"
  },
  "message": "Fix fixpoint divide exception in acct_update_integrals\n\nFrans Pop reported the crash below when running an s390 kernel under Hercules:\n\n  Kernel BUG at 000738b4  verbose debug info unavailable!\n  fixpoint divide exception: 0009  #1! SMP\n  Modules linked in: nfs lockd nfs_acl sunrpc ctcm fsm tape_34xx\n     cu3088 tape ccwgroup tape_class ext3 jbd mbcache dm_mirror dm_log dm_snapshot\n     dm_mod dasd_eckd_mod dasd_mod\n  CPU: 0 Not tainted 2.6.27.19 #13\n  Process awk (pid: 2069, task: 0f9ed9b8, ksp: 0f4f7d18)\n  Krnl PSW : 070c1000 800738b4 (acct_update_integrals+0x4c/0x118)\n             R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:1 PM:0\n  Krnl GPRS: 00000000 000007d0 7fffffff fffff830\n             00000000 ffffffff 00000002 0f9ed9b8\n             00000000 00008ca0 00000000 0f9ed9b8\n             0f9edda4 8007386e 0f4f7ec8 0f4f7e98\n  Krnl Code: 800738aa: a71807d0         lhi     %r1,2000\n             800738ae: 8c200001         srdl    %r2,1\n             800738b2: 1d21             dr      %r2,%r1\n            \u003e800738b4: 5810d10e         l       %r1,270(%r13)\n             800738b8: 1823             lr      %r2,%r3\n             800738ba: 4130f060         la      %r3,96(%r15)\n             800738be: 0de1             basr    %r14,%r1\n             800738c0: 5800f060         l       %r0,96(%r15)\n  Call Trace:\n  ( \u003c000000000004fdea\u003e! blocking_notifier_call_chain+0x1e/0x2c)\n    \u003c0000000000038502\u003e! do_exit+0x106/0x7c0\n    \u003c0000000000038c36\u003e! do_group_exit+0x7a/0xb4\n    \u003c0000000000038c8e\u003e! SyS_exit_group+0x1e/0x30\n    \u003c0000000000021c28\u003e! sysc_do_restart+0x12/0x16\n    \u003c0000000077e7e924\u003e! 0x77e7e924\n\nReason for this is that cpu time accounting usually only happens from\ninterrupt context, but acct_update_integrals gets also called from\nprocess context with interrupts enabled.\n\nSo in acct_update_integrals we may end up with the following scenario:\n\nBetween reading tsk-\u003estime/tsk-\u003eutime and tsk-\u003eacct_timexpd an interrupt\nhappens which updates accouting values.  This causes acct_timexpd to be\ngreater than the former stime + utime.  The subsequent calculation of\n\n\tdtime \u003d cputime_sub(time, tsk-\u003eacct_timexpd);\n\nwill be negative and the division performed by\n\n\tcputime_to_jiffies(dtime)\n\nwill generate an exception since the result won\u0027t fit into a 32 bit\nregister.\n\nIn order to fix this just always disable interrupts while accessing any\nof the accounting values.\n\nReported by: Frans Pop \u003celendil@planet.nl\u003e\nTested by: Frans Pop \u003celendil@planet.nl\u003e\nCc: stable@kernel.org\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "43f891b05a4b8911c13c5baa6420f63eb69aa3f6",
      "old_mode": 33188,
      "old_path": "kernel/tsacct.c",
      "new_id": "00d59d048edfafdc7ec70462e0133c0ec620a6d8",
      "new_mode": 33188,
      "new_path": "kernel/tsacct.c"
    }
  ]
}
