)]}'
{
  "commit": "644e9cbbe3fc032cc92d0936057e166a994dc246",
  "tree": "46f0c35d92419dcedf19067a060e7877dc3d6b28",
  "parents": [
    "d6e486868cde585842d55ba3b6ec57af090fc343"
  ],
  "author": {
    "name": "Andi Kleen",
    "email": "ak@linux.intel.com",
    "time": "Thu Jan 26 00:09:05 2012 +0100"
  },
  "committer": {
    "name": "Greg Kroah-Hartman",
    "email": "gregkh@suse.de",
    "time": "Thu Jan 26 16:44:41 2012 -0800"
  },
  "message": "Add driver auto probing for x86 features v4\n\nThere\u0027s a growing number of drivers that support a specific x86 feature\nor CPU.  Currently loading these drivers currently on a generic\ndistribution requires various driver specific hacks and it often\ndoesn\u0027t work.\n\nThis patch adds auto probing for drivers based on the x86 cpuid\ninformation, in particular based on vendor/family/model number\nand also based on CPUID feature bits.\n\nFor example a common issue is not loading the SSE 4.2 accelerated\nCRC module: this can significantly lower the performance of BTRFS\nwhich relies on fast CRC.\n\nAnother issue is loading the right CPUFREQ driver for the current CPU.\nCurrently distributions often try all all possible driver until\none sticks, which is not really a good way to do this.\n\nIt works with existing udev without any changes. The code\nexports the x86 information as a generic string in sysfs\nthat can be matched by udev\u0027s pattern matching.\n\nThis scheme does not support numeric ranges, so if you want to\nhandle e.g. ranges of model numbers they have to be encoded\nin ASCII or simply all models or families listed. Fixing\nthat would require changing udev.\n\nAnother issue is that udev will happily load all drivers that match,\nthere is currently no nice way to stop a specific driver from\nbeing loaded if it\u0027s not needed (e.g. if you don\u0027t need fast CRC)\nBut there are not that many cpu specific drivers around and they\u0027re\nall not that bloated, so this isn\u0027t a particularly serious issue.\n\nOriginally this patch added the modalias to the normal cpu\nsysdevs. However sysdevs don\u0027t have all the infrastructure\nneeded for udev, so it couldn\u0027t really autoload drivers.\nThis patch instead adds the CPU modaliases to the cpuid devices,\nwhich are real devices with full support for udev. This implies\nthat the cpuid driver has to be loaded to use this.\n\nThis patch just adds infrastructure, some driver conversions\nin followups.\n\nThanks to Kay for helping with some sysfs magic.\n\nv2: Constifcation, some updates\nv4: (trenn@suse.de):\n    - Use kzalloc instead of kmalloc to terminate modalias buffer\n    - Use uppercase hex values to match correctly against hex values containing\n      letters\n\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Jen Axboe \u003caxboe@kernel.dk\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nCc: Huang Ying \u003cying.huang@intel.com\u003e\nCc: Len Brown \u003clenb@kernel.org\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Thomas Renninger \u003ctrenn@suse.de\u003e\nAcked-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ff501e511d91f5648ac003d3a0537ddebe4bb982",
      "new_mode": 33188,
      "new_path": "arch/x86/include/asm/cpu_device_id.h"
    },
    {
      "type": "modify",
      "old_id": "25f24dccdcfab329735567729df44b03d7167685",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/cpu/Makefile",
      "new_id": "6ab6aa2fdfdd21ef0192b0eb11a99c1a0531f8ab",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/cpu/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7acc961422e7dfff5a0978a5b6fff50d600e5f2f",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/cpu/match.c"
    },
    {
      "type": "modify",
      "old_id": "a524353d93f21181e5998b592e7c39072ad1f182",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/cpuid.c",
      "new_id": "7c89880eefd04af78aa736902e553b008204fbdd",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/cpuid.c"
    },
    {
      "type": "modify",
      "old_id": "b29e7f6f8fa580d9c4c39b4fca596a98e249b2d4",
      "old_mode": 33188,
      "old_path": "include/linux/mod_devicetable.h",
      "new_id": "cff2cc08f45a415f388cedf51d63a47d646976ec",
      "new_mode": 33188,
      "new_path": "include/linux/mod_devicetable.h"
    },
    {
      "type": "modify",
      "old_id": "c0e14b3f2306f77b6e85d2d6f7f25a70b6b41a22",
      "old_mode": 33188,
      "old_path": "scripts/mod/file2alias.c",
      "new_id": "026ba38759ca3717cdb8b575c43a179e0e230ee7",
      "new_mode": 33188,
      "new_path": "scripts/mod/file2alias.c"
    }
  ]
}
