)]}'
{
  "commit": "63e20df1e5b2ef8d871ecbdb6c038d554ed1ca74",
  "tree": "aff5e07f44901d5800eabd4fddc501c20cf9f1af",
  "parents": [
    "f2bb614bb6c7f5245521195f144272ef93d9f086"
  ],
  "author": {
    "name": "Takashi Iwai",
    "email": "tiwai@suse.de",
    "time": "Tue Jan 27 15:24:09 2015 +0100"
  },
  "committer": {
    "name": "Takashi Iwai",
    "email": "tiwai@suse.de",
    "time": "Wed Jan 28 07:22:36 2015 +0100"
  },
  "message": "ALSA: line6: Reorganize PCM stream handling\n\nThe current code deals with the stream start / stop solely via\nline6_pcm_acquire() and line6_pcm_release().  This was (supposedly)\nintended to avoid the races, but it doesn\u0027t work as expected.  The\nconcurrent acquire and release calls can be performed without proper\nprotections, thus this might result in memory corruption.\nFurthermore, we can\u0027t take a mutex to protect the whole function\nbecause it can be called from the PCM trigger callback that is an\natomic context.  Also spinlock isn\u0027t appropriate because the function\nallocates with kmalloc with GFP_KERNEL.  That is, these function just\nlead to singular problems.\n\nThis is an attempt to reduce the existing races.  First off, separate\nboth the stream buffer management and the stream URB management.  The\nformer is protected via a newly introduced state_mutex while the\nlatter is protected via each line6_pcm_stream lock.\n\nSecondly, the stream state are now managed in opened and running bit\nflags of each line6_pcm_stream.  Not only this a bit clearer than\nprevious combined bit flags, this also gives a better abstraction.\nThese rewrites allows us to make common hw_params and hw_free\ncallbacks for both playback and capture directions.\n\nFor the monitor and impulse operations, still line6_pcm_acquire() and\nline6_pcm_release() are used.  They call internally the corresponding\nfunctions for both playback and capture streams with proper lock or\nmutex.  Unlike the previous versions, these function don\u0027t take the\nbit masks but the only single type value.  Also they are supposed to\nbe applied only as duplex operations.\n\nTested-by: Chris Rorvick \u003cchris@rorvick.com\u003e\nSigned-off-by: Takashi Iwai \u003ctiwai@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "21342a9dddd7ea9adc831533942fcc8a82c4e2a4",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/capture.c",
      "new_id": "7b8186b6c0e42f34200da610fa15c41729828701",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/capture.c"
    },
    {
      "type": "modify",
      "old_id": "db062e7200a650dce7076cb7ebbad43a3ac7eaba",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/capture.h",
      "new_id": "890b21bff18c7daa43d27be73bf92858530135f8",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/capture.h"
    },
    {
      "type": "modify",
      "old_id": "dedbe24cbf6073ba8f8b869a4b02d5d70a26a4cf",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/pcm.c",
      "new_id": "470fc1049d54e36180a302188c6d71f6b87bea33",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/pcm.c"
    },
    {
      "type": "modify",
      "old_id": "4c74f4e8507491808480de5fac0b1e9c12b6b2f5",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/pcm.h",
      "new_id": "66f603dfa34e9ad8cb3d82c2e2511ccc6e382a23",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/pcm.h"
    },
    {
      "type": "modify",
      "old_id": "242265929145909805a381050e1050ef75a3f8f3",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/playback.c",
      "new_id": "f8b04e2d36b3d71c5c4baea261ff6f64298ed12d",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/playback.c"
    },
    {
      "type": "modify",
      "old_id": "f6a9e18f87b6f01226fffcac81df0af1508453df",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/playback.h",
      "new_id": "51fce29e87269b3412201e3f63cb63a1661c3dca",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/playback.h"
    },
    {
      "type": "modify",
      "old_id": "33d16ecf18a0a67aa34f176e0cfa6fb1b6573ddc",
      "old_mode": 33188,
      "old_path": "sound/usb/line6/toneport.c",
      "new_id": "61fa6256d7b0e846d71e310f0336f5f956a26248",
      "new_mode": 33188,
      "new_path": "sound/usb/line6/toneport.c"
    }
  ]
}
