)]}'
{
  "commit": "8e2b2b46ea4ca5ef790dddf78b360ed736a62d7c",
  "tree": "35fb2be1225c5a4733d4be8c03bc5725f79b43c2",
  "parents": [
    "0c9ae701ae1caf657326db22d61074b40a747c9d"
  ],
  "author": {
    "name": "Stefan Richter",
    "email": "stefanr@s5r6.in-berlin.de",
    "time": "Fri Jul 23 13:05:39 2010 +0200"
  },
  "committer": {
    "name": "Stefan Richter",
    "email": "stefanr@s5r6.in-berlin.de",
    "time": "Fri Jul 23 13:36:28 2010 +0200"
  },
  "message": "firewire: cdev: improve FW_CDEV_IOC_ALLOCATE\n\nIn both the ieee1394 stack and the firewire stack, the core treats\nkernelspace drivers better than userspace drivers when it comes to\nCSR address range allocation:  The former may request a register to be\nplaced automatically at a free spot anywhere inside a specified address\nrange.  The latter may only request a register at a fixed offset.\n\nHence, userspace drivers which do not require a fixed offset potentially\nneed to implement a retry loop with incremented offset in each retry\nuntil the kernel does not fail allocation with EBUSY.  This awkward\nprocedure is not fundamentally necessary as the core already provides a\nsuperior allocation API to kernelspace drivers.\n\nTherefore change the ioctl() ABI by addition of a region_end member in\nthe existing struct fw_cdev_allocate.  Userspace and kernelspace APIs\nwork the same way now.\n\nThere is a small cost to pay by clients though:  If client source code\nis required to compile with older kernel headers too, then any use of\nthe new member fw_cdev_allocate.region_end needs to be enclosed by\n#ifdef/#endif directives.  However, any client program that seriously\nwants to use address range allocations will require a kernel of cdev ABI\nversion \u003e\u003d 4 at runtime and a linux/firewire-cdev.h header of \u003e\u003d 4\nanyway.  This is because v4 brings FW_CDEV_EVENT_REQUEST2.  The only\nclient program in which build-time compatibility with struct\nfw_cdev_allocate as found in older kernel headers makes sense is\nlibraw1394.\n\n(libraw1394 uses the older broken FW_CDEV_EVENT_REQUEST to implement a\nmakeshift, incorrect transaction responder that does at least work\nsomewhat in many simple scenarios, relying on guesswork by libraw1394\nand by libraw1394 based applications.  Plus, address range allocation\nand transaction responder is only one of many features that libraw1394\nneeds to provide, and these other features need to work with kernel and\nkernel-headers as old as possible.  Any new linux/firewire-cdev.h based\nclient that implements a transaction responder should never attempt to\ndo it like libraw1394;  instead it should make a header and kernel of v4\nor later a hard requirement.)\n\nWhile we are at it, update the struct fw_cdev_allocate documentation to\nbetter reflect the recent fw_cdev_event_request2 ABI addition.\n\nSigned-off-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "31863cf8b6c4ec5d4fe4ca32802c16e487e0ef60",
      "old_mode": 33188,
      "old_path": "drivers/firewire/core-cdev.c",
      "new_id": "f40098dec14bd2275e20710a7a08f2e94fa08fb4",
      "new_mode": 33188,
      "new_path": "drivers/firewire/core-cdev.c"
    },
    {
      "type": "modify",
      "old_id": "da0fec7e8dc0a3a05010f3a5c63d061cb3ba8e58",
      "old_mode": 33188,
      "old_path": "include/linux/firewire-cdev.h",
      "new_id": "14831119ff7120397e75f62240cce236df79471c",
      "new_mode": 33188,
      "new_path": "include/linux/firewire-cdev.h"
    }
  ]
}
