)]}'
{
  "commit": "c0e69a5bbc6fc74184aa043aadb9a53bc58f953b",
  "tree": "4c77acde8addfe325b54a121cbc4db36eee679f0",
  "parents": [
    "8adb711f3668b034e7b956fac951ed08b53e0d55"
  ],
  "author": {
    "name": "Jesper Nilsson",
    "email": "Jesper.Nilsson@axis.com",
    "time": "Wed Jan 14 11:19:08 2009 +0100"
  },
  "committer": {
    "name": "Greg Kroah-Hartman",
    "email": "gregkh@suse.de",
    "time": "Tue Jan 20 20:52:10 2009 -0800"
  },
  "message": "klist.c: bit 0 in pointer can\u0027t be used as flag\n\nThe commit a1ed5b0cffe4b16a93a6a3390e8cee0fbef94f86\n(klist: don\u0027t iterate over deleted entries) introduces use of the\nlow bit in a pointer to indicate if the knode is dead or not,\nassuming that this bit is always free.\n\nThis is not true for all architectures, CRIS for example may align data\non byte borders.\n\nThe result is a bunch of warnings on bootup, devices not being\nadded correctly etc, reported by Hinko Kocevar \u003chinko.kocevar@cetrtapot.si\u003e:\n\n------------[ cut here ]------------\nWARNING: at lib/klist.c:62 ()\nModules linked in:\n\nStack from c1fe1cf0:\n       c01cc7f4 c1fe1d11 c000eb4e c000e4de 00000000 00000000 c1f4f78f c1f50c2d\n       c01d008c c1fdd1a0 c1fdd1a0 c1fe1d38 c0192954 c1fe0000 00000000 c1fe1dc0\n       00000002 7fffffff c1fe1da8 c0192d50 c1fe1dc0 00000002 7fffffff c1ff9fcc\nCall Trace: [\u003cc000eb4e\u003e] [\u003cc000e4de\u003e] [\u003cc0192954\u003e] [\u003cc0192d50\u003e] [\u003cc001d49e\u003e] [\u003cc000b688\u003e] [\u003cc0192a3c\u003e]\n       [\u003cc000b63e\u003e] [\u003cc000b63e\u003e] [\u003cc001a542\u003e] [\u003cc00b55b0\u003e] [\u003cc00411c0\u003e] [\u003cc00b559c\u003e] [\u003cc01918e6\u003e] [\u003cc0191988\u003e]\n       [\u003cc01919d0\u003e] [\u003cc00cd9c8\u003e] [\u003cc00cdd6a\u003e] [\u003cc0034178\u003e] [\u003cc000409a\u003e] [\u003cc0015576\u003e] [\u003cc0029130\u003e] [\u003cc0029078\u003e]\n       [\u003cc0029170\u003e] [\u003cc0012336\u003e] [\u003cc00b4076\u003e] [\u003cc00b4770\u003e] [\u003cc006d6e4\u003e] [\u003cc006d974\u003e] [\u003cc006dca0\u003e] [\u003cc0028d6c\u003e]\n       [\u003cc0028e12\u003e] [\u003cc0006424\u003e] \u003c4\u003e---[ end trace 4eaa2a86a8e2da22 ]---\n------------[ cut here ]------------\nRepeat ad nauseam.\n\nWed, Jan 14, 2009 at 12:11:32AM +0100, Bastien ROUCARIES wrote:\n\u003e Perhaps using a pointerhackalign trick on this structure where\n\u003e #define pointerhackalign(x) __attribute__ ((aligned (x)))\n\u003e and declare\n\u003e struct klist_node {\n\u003e ...\n\u003e }  pointerhackalign(2);\n\u003e\n\u003e Because  __attribute__ ((aligned (x))) could only increase alignment\n\u003e it will safe to do that and serve as documentation purpose :)\n\nThat works, but we need to do it not for the struct klist_node,\nbut for the struct we insert into the void * in klist_node,\nwhich is struct klist.\n\nReported-by: Hinko Kocevar \u003chinko.kocevar@cetrtapot.si\nCc: Bastien ROUCARIES \u003croucaries.bastien@gmail.com\u003e\nSigned-off-by: Jesper Nilsson \u003cjesper.nilsson@axis.com\u003e\nCc: stable \u003cstable@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d5a27af9dba514508047f5945d4394f0d1440801",
      "old_mode": 33188,
      "old_path": "include/linux/klist.h",
      "new_id": "e91a4e59b77197cf632aa0784dc5d856556b7a33",
      "new_mode": 33188,
      "new_path": "include/linux/klist.h"
    }
  ]
}
