)]}'
{
  "commit": "1f98757776eafe31065be9118db6051afcf8643c",
  "tree": "f2f6a60f966b4cd0fdc5c204b009958118b53321",
  "parents": [
    "42c0202363194007a1ac377d047a95aa39246eb0"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Nov 01 10:17:22 2008 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Nov 01 10:17:22 2008 -0700"
  },
  "message": "x86: Clean up late e820 resource allocation\n\nThis makes the late e820 resources use \u0027insert_resource_expand_to_fit()\u0027\ninstead of doing a \u0027reserve_region_with_split()\u0027, and also avoids\nmarking them as IORESOURCE_BUSY.\n\nThis results in us being perfectly happy to use pre-existing PCI\nresources even if they were marked as being in a reserved region, while\nstill avoiding any _new_ allocations in the reserved regions.  It also\nmakes for a simpler and more accurate resource tree.\n\nExample resource allocation from Jonathan Corbet, who has firmware that\nhas an e820 reserved entry that covered a big range (e0000000-fed003ff),\nand that had various PCI resources in it set up by firmware.\n\nWith old kernels, the reserved range would force us to re-allocate all\npre-existing PCI resources, and his reserved range would end up looking\nlike this:\n\n\te0000000-fed003ff : reserved\n\t  fec00000-fec00fff : IOAPIC 0\n\t  fed00000-fed003ff : HPET 0\n\nwhere only the pre-allocated special regions (IOAPIC and HPET) were kept\naround.\n\nWith 2.6.28-rc2, which uses \u0027reserve_region_with_split()\u0027, Jonathan\u0027s\nresource tree looked like this:\n\n\te0000000-fe7fffff : reserved\n\tfe800000-fe8fffff : PCI Bus 0000:01\n\t fe800000-fe8fffff : reserved\n\tfe900000-fe9d9aff : reserved\n\tfe9d9b00-fe9d9bff : 0000:00:1f.3\n\t fe9d9b00-fe9d9bff : reserved\n\tfe9d9c00-fe9d9fff : 0000:00:1a.7\n\t fe9d9c00-fe9d9fff : reserved\n\tfe9da000-fe9dafff : 0000:00:03.3\n\t fe9da000-fe9dafff : reserved\n\tfe9db000-fe9dbfff : 0000:00:19.0\n\t fe9db000-fe9dbfff : reserved\n\tfe9dc000-fe9dffff : 0000:00:1b.0\n\t fe9dc000-fe9dffff : reserved\n\tfe9e0000-fe9fffff : 0000:00:19.0\n\t fe9e0000-fe9fffff : reserved\n\tfea00000-fea7ffff : 0000:00:02.0\n\t fea00000-fea7ffff : reserved\n\tfea80000-feafffff : 0000:00:02.1\n\t fea80000-feafffff : reserved\n\tfeb00000-febfffff : 0000:00:02.0\n\t feb00000-febfffff : reserved\n\tfec00000-fed003ff : reserved\n\t fec00000-fec00fff : IOAPIC 0\n\t fed00000-fed003ff : HPET 0\n\nand because the reserved entry had been split and moved into the\nindividual resources, and because it used the IORESOURCE_BUSY flag, the\ndrivers that actually wanted to _use_ those resources couldn\u0027t actually\nattach to them:\n\n\te1000e 0000:00:19.0: BAR 0: can\u0027t reserve mem region [0xfe9e0000-0xfe9fffff]\n\tHDA Intel 0000:00:1b.0: BAR 0: can\u0027t reserve mem region [0xfe9dc000-0xfe9dffff]\n\nwith this patch, the resource tree instead becomes\n\n\te0000000-fed003ff : reserved\n\t  fe800000-fe8fffff : PCI Bus 0000:01\n\t  fe9d9b00-fe9d9bff : 0000:00:1f.3\n\t  fe9d9c00-fe9d9fff : 0000:00:1a.7\n\t    fe9d9c00-fe9d9fff : ehci_hcd\n\t  fe9da000-fe9dafff : 0000:00:03.3\n\t  fe9db000-fe9dbfff : 0000:00:19.0\n\t    fe9db000-fe9dbfff : e1000e\n\t  fe9dc000-fe9dffff : 0000:00:1b.0\n\t    fe9dc000-fe9dffff : ICH HD audio\n\t  fe9e0000-fe9fffff : 0000:00:19.0\n\t    fe9e0000-fe9fffff : e1000e\n\t  fea00000-fea7ffff : 0000:00:02.0\n\t  fea80000-feafffff : 0000:00:02.1\n\t  feb00000-febfffff : 0000:00:02.0\n\t  fec00000-fec00fff : IOAPIC 0\n\t  fed00000-fed003ff : HPET 0\n\nie the one reserved region now ends up surrounding all the PCI resources\nthat were allocated inside of it by firmware, and because it is not\nmarked BUSY, drivers have no problem attaching to the pre-allocated\nresources.\n\nReported-and-tested-by: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Robert Hancock \u003chancockr@shaw.ca\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ce97bf3bed12d71ee6d1fce3ca5bb67b4ac53156",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/e820.c",
      "new_id": "7aafeb5263efbbb8de9e7aad35680d2d882a0882",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/e820.c"
    }
  ]
}
