All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	Takashi Iwai <tiwai@suse.de>,
	Matthieu CASTET <matthieu.castet@parrot.com>
Subject: [ 11/82] ALSA: Add a reference counter to card instance
Date: Wed, 14 Nov 2012 05:39:44 +0000	[thread overview]
Message-ID: <20121114053935.384898333@decadent.org.uk> (raw)
In-Reply-To: <20121114053933.726869752@decadent.org.uk>

3.2-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Takashi Iwai <tiwai@suse.de>

commit a0830dbd4e42b38aefdf3fb61ba5019a1a99ea85 upstream.

For more strict protection for wild disconnections, a refcount is
introduced to the card instance, and let it up/down when an object is
referred via snd_lookup_*() in the open ops.

The free-after-last-close check is also changed to check this refcount
instead of the empty list, too.

Reported-by: Matthieu CASTET <matthieu.castet@parrot.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 include/sound/core.h       |  3 +++
 sound/core/control.c       |  3 +++
 sound/core/hwdep.c         |  5 ++++-
 sound/core/init.c          | 50 +++++++++++++++++++++++++++-------------------
 sound/core/oss/mixer_oss.c | 10 ++++++++--
 sound/core/oss/pcm_oss.c   |  2 ++
 sound/core/pcm_native.c    |  9 +++++++--
 sound/core/rawmidi.c       |  6 +++++-
 sound/core/sound.c         | 11 ++++++++--
 sound/core/sound_oss.c     | 10 ++++++++--
 10 files changed, 79 insertions(+), 30 deletions(-)

diff --git a/include/sound/core.h b/include/sound/core.h
index 3be5ab7..222f11e 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -132,6 +132,7 @@ struct snd_card {
 	int shutdown;			/* this card is going down */
 	int free_on_last_close;		/* free in context of file_release */
 	wait_queue_head_t shutdown_sleep;
+	atomic_t refcount;		/* refcount for disconnection */
 	struct device *dev;		/* device assigned to this card */
 	struct device *card_dev;	/* cardX object for sysfs */
 
@@ -189,6 +190,7 @@ struct snd_minor {
 	const struct file_operations *f_ops;	/* file operations */
 	void *private_data;		/* private data for f_ops->open */
 	struct device *dev;		/* device for sysfs */
+	struct snd_card *card_ptr;	/* assigned card instance */
 };
 
 /* return a device pointer linked to each sound device as a parent */
@@ -295,6 +297,7 @@ int snd_card_info_done(void);
 int snd_component_add(struct snd_card *card, const char *component);
 int snd_card_file_add(struct snd_card *card, struct file *file);
 int snd_card_file_remove(struct snd_card *card, struct file *file);
+void snd_card_unref(struct snd_card *card);
 
 #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr))
 
diff --git a/sound/core/control.c b/sound/core/control.c
index 819a5c5..699ccf5 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -86,6 +86,7 @@ static int snd_ctl_open(struct inode *inode, struct file *file)
 	write_lock_irqsave(&card->ctl_files_rwlock, flags);
 	list_add_tail(&ctl->list, &card->ctl_files);
 	write_unlock_irqrestore(&card->ctl_files_rwlock, flags);
+	snd_card_unref(card);
 	return 0;
 
       __error:
@@ -93,6 +94,8 @@ static int snd_ctl_open(struct inode *inode, struct file *file)
       __error2:
 	snd_card_file_remove(card, file);
       __error1:
+	if (card)
+		snd_card_unref(card);
       	return err;
 }
 
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c
index 75ea16f..53a6ba5 100644
--- a/sound/core/hwdep.c
+++ b/sound/core/hwdep.c
@@ -100,8 +100,10 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
 	if (hw == NULL)
 		return -ENODEV;
 
-	if (!try_module_get(hw->card->module))
+	if (!try_module_get(hw->card->module)) {
+		snd_card_unref(hw->card);
 		return -EFAULT;
+	}
 
 	init_waitqueue_entry(&wait, current);
 	add_wait_queue(&hw->open_wait, &wait);
@@ -148,6 +150,7 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
 	mutex_unlock(&hw->open_mutex);
 	if (err < 0)
 		module_put(hw->card->module);
+	snd_card_unref(hw->card);
 	return err;
 }
 
diff --git a/sound/core/init.c b/sound/core/init.c
index 3ac49b1..fa0f35b 100644
--- a/sound/core/init.c
+++ b/sound/core/init.c
@@ -212,6 +212,7 @@ int snd_card_create(int idx, const char *xid,
 	spin_lock_init(&card->files_lock);
 	INIT_LIST_HEAD(&card->files_list);
 	init_waitqueue_head(&card->shutdown_sleep);
+	atomic_set(&card->refcount, 0);
 #ifdef CONFIG_PM
 	mutex_init(&card->power_lock);
 	init_waitqueue_head(&card->power_sleep);
@@ -445,21 +446,36 @@ static int snd_card_do_free(struct snd_card *card)
 	return 0;
 }
 
+/**
+ * snd_card_unref - release the reference counter
+ * @card: the card instance
+ *
+ * Decrements the reference counter.  When it reaches to zero, wake up
+ * the sleeper and call the destructor if needed.
+ */
+void snd_card_unref(struct snd_card *card)
+{
+	if (atomic_dec_and_test(&card->refcount)) {
+		wake_up(&card->shutdown_sleep);
+		if (card->free_on_last_close)
+			snd_card_do_free(card);
+	}
+}
+EXPORT_SYMBOL(snd_card_unref);
+
 int snd_card_free_when_closed(struct snd_card *card)
 {
-	int free_now = 0;
-	int ret = snd_card_disconnect(card);
-	if (ret)
-		return ret;
+	int ret;
 
-	spin_lock(&card->files_lock);
-	if (list_empty(&card->files_list))
-		free_now = 1;
-	else
-		card->free_on_last_close = 1;
-	spin_unlock(&card->files_lock);
+	atomic_inc(&card->refcount);
+	ret = snd_card_disconnect(card);
+	if (ret) {
+		atomic_dec(&card->refcount);
+		return ret;
+	}
 
-	if (free_now)
+	card->free_on_last_close = 1;
+	if (atomic_dec_and_test(&card->refcount))
 		snd_card_do_free(card);
 	return 0;
 }
@@ -473,7 +489,7 @@ int snd_card_free(struct snd_card *card)
 		return ret;
 
 	/* wait, until all devices are ready for the free operation */
-	wait_event(card->shutdown_sleep, list_empty(&card->files_list));
+	wait_event(card->shutdown_sleep, !atomic_read(&card->refcount));
 	snd_card_do_free(card);
 	return 0;
 }
@@ -854,6 +870,7 @@ int snd_card_file_add(struct snd_card *card, struct file *file)
 		return -ENODEV;
 	}
 	list_add(&mfile->list, &card->files_list);
+	atomic_inc(&card->refcount);
 	spin_unlock(&card->files_lock);
 	return 0;
 }
@@ -876,7 +893,6 @@ EXPORT_SYMBOL(snd_card_file_add);
 int snd_card_file_remove(struct snd_card *card, struct file *file)
 {
 	struct snd_monitor_file *mfile, *found = NULL;
-	int last_close = 0;
 
 	spin_lock(&card->files_lock);
 	list_for_each_entry(mfile, &card->files_list, list) {
@@ -891,19 +907,13 @@ int snd_card_file_remove(struct snd_card *card, struct file *file)
 			break;
 		}
 	}
-	if (list_empty(&card->files_list))
-		last_close = 1;
 	spin_unlock(&card->files_lock);
-	if (last_close) {
-		wake_up(&card->shutdown_sleep);
-		if (card->free_on_last_close)
-			snd_card_do_free(card);
-	}
 	if (!found) {
 		snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
 		return -ENOENT;
 	}
 	kfree(found);
+	snd_card_unref(card);
 	return 0;
 }
 
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index 18297f7..05395aa 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -52,14 +52,19 @@ static int snd_mixer_oss_open(struct inode *inode, struct file *file)
 					 SNDRV_OSS_DEVICE_TYPE_MIXER);
 	if (card == NULL)
 		return -ENODEV;
-	if (card->mixer_oss == NULL)
+	if (card->mixer_oss == NULL) {
+		snd_card_unref(card);
 		return -ENODEV;
+	}
 	err = snd_card_file_add(card, file);
-	if (err < 0)
+	if (err < 0) {
+		snd_card_unref(card);
 		return err;
+	}
 	fmixer = kzalloc(sizeof(*fmixer), GFP_KERNEL);
 	if (fmixer == NULL) {
 		snd_card_file_remove(card, file);
+		snd_card_unref(card);
 		return -ENOMEM;
 	}
 	fmixer->card = card;
@@ -68,6 +73,7 @@ static int snd_mixer_oss_open(struct inode *inode, struct file *file)
 	if (!try_module_get(card->module)) {
 		kfree(fmixer);
 		snd_card_file_remove(card, file);
+		snd_card_unref(card);
 		return -EFAULT;
 	}
 	return 0;
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 3cc4b86..f3cf781 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -2457,6 +2457,8 @@ static int snd_pcm_oss_open(struct inode *inode, struct file *file)
       __error2:
       	snd_card_file_remove(pcm->card, file);
       __error1:
+	if (pcm)
+		snd_card_unref(pcm->card);
 	return err;
 }
 
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index e62da93..c67994d 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1628,6 +1628,7 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
  _end:
 	write_unlock_irq(&snd_pcm_link_rwlock);
 	up_write(&snd_pcm_link_rwsem);
+	snd_card_unref(substream1->pcm->card);
 	fput(file);
 	return res;
 }
@@ -2100,7 +2101,9 @@ static int snd_pcm_playback_open(struct inode *inode, struct file *file)
 		return err;
 	pcm = snd_lookup_minor_data(iminor(inode),
 				    SNDRV_DEVICE_TYPE_PCM_PLAYBACK);
-	return snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK);
+	err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK);
+	snd_card_unref(pcm->card);
+	return err;
 }
 
 static int snd_pcm_capture_open(struct inode *inode, struct file *file)
@@ -2111,7 +2114,9 @@ static int snd_pcm_capture_open(struct inode *inode, struct file *file)
 		return err;
 	pcm = snd_lookup_minor_data(iminor(inode),
 				    SNDRV_DEVICE_TYPE_PCM_CAPTURE);
-	return snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE);
+	err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE);
+	snd_card_unref(pcm->card);
+	return err;
 }
 
 static int snd_pcm_open(struct file *file, struct snd_pcm *pcm, int stream)
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index ebf6e49..7d4f62a 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -379,8 +379,10 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
 	if (rmidi == NULL)
 		return -ENODEV;
 
-	if (!try_module_get(rmidi->card->module))
+	if (!try_module_get(rmidi->card->module)) {
+		snd_card_unref(rmidi->card);
 		return -ENXIO;
+	}
 
 	mutex_lock(&rmidi->open_mutex);
 	card = rmidi->card;
@@ -440,6 +442,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
 #endif
 	file->private_data = rawmidi_file;
 	mutex_unlock(&rmidi->open_mutex);
+	snd_card_unref(rmidi->card);
 	return 0;
 
  __error:
@@ -447,6 +450,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
  __error_card:
 	mutex_unlock(&rmidi->open_mutex);
 	module_put(rmidi->card->module);
+	snd_card_unref(rmidi->card);
 	return err;
 }
 
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 828af35..f188976 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -99,6 +99,10 @@ static void snd_request_other(int minor)
  *
  * Checks that a minor device with the specified type is registered, and returns
  * its user data pointer.
+ *
+ * This function increments the reference counter of the card instance
+ * if an associated instance with the given minor number and type is found.
+ * The caller must call snd_card_unref() appropriately later.
  */
 void *snd_lookup_minor_data(unsigned int minor, int type)
 {
@@ -109,9 +113,11 @@ void *snd_lookup_minor_data(unsigned int minor, int type)
 		return NULL;
 	mutex_lock(&sound_mutex);
 	mreg = snd_minors[minor];
-	if (mreg && mreg->type == type)
+	if (mreg && mreg->type == type) {
 		private_data = mreg->private_data;
-	else
+		if (mreg->card_ptr)
+			atomic_inc(&mreg->card_ptr->refcount);
+	} else
 		private_data = NULL;
 	mutex_unlock(&sound_mutex);
 	return private_data;
@@ -275,6 +281,7 @@ int snd_register_device_for_dev(int type, struct snd_card *card, int dev,
 	preg->device = dev;
 	preg->f_ops = f_ops;
 	preg->private_data = private_data;
+	preg->card_ptr = card;
 	mutex_lock(&sound_mutex);
 #ifdef CONFIG_SND_DYNAMIC_MINORS
 	minor = snd_find_free_minor(type);
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c
index c700920..7442c7a 100644
--- a/sound/core/sound_oss.c
+++ b/sound/core/sound_oss.c
@@ -40,6 +40,9 @@
 static struct snd_minor *snd_oss_minors[SNDRV_OSS_MINORS];
 static DEFINE_MUTEX(sound_oss_mutex);
 
+/* NOTE: This function increments the refcount of the associated card like
+ * snd_lookup_minor_data(); the caller must call snd_card_unref() appropriately
+ */
 void *snd_lookup_oss_minor_data(unsigned int minor, int type)
 {
 	struct snd_minor *mreg;
@@ -49,9 +52,11 @@ void *snd_lookup_oss_minor_data(unsigned int minor, int type)
 		return NULL;
 	mutex_lock(&sound_oss_mutex);
 	mreg = snd_oss_minors[minor];
-	if (mreg && mreg->type == type)
+	if (mreg && mreg->type == type) {
 		private_data = mreg->private_data;
-	else
+		if (mreg->card_ptr)
+			atomic_inc(&mreg->card_ptr->refcount);
+	} else
 		private_data = NULL;
 	mutex_unlock(&sound_oss_mutex);
 	return private_data;
@@ -123,6 +128,7 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
 	preg->device = dev;
 	preg->f_ops = f_ops;
 	preg->private_data = private_data;
+	preg->card_ptr = card;
 	mutex_lock(&sound_oss_mutex);
 	snd_oss_minors[minor] = preg;
 	minor_unit = SNDRV_MINOR_OSS_DEVICE(minor);



  parent reply	other threads:[~2012-11-14  6:09 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-14  5:39 [ 00/82] 3.2.34-stable review Ben Hutchings
2012-11-14  5:39 ` [ 01/82] Bluetooth: Always compile SCO and L2CAP in Bluetooth Core Ben Hutchings
2012-11-14 21:24   ` Gustavo Padovan
2012-11-14 21:30     ` David Miller
2012-11-14 21:38       ` Ben Hutchings
2012-11-15 20:04         ` Ben Hutchings
2012-11-15 20:13           ` David Miller
2012-11-15 21:04             ` Gustavo Padovan
2012-11-15 21:08               ` David Miller
2012-11-15 22:05               ` Joe Perches
2012-11-15 21:07           ` Gustavo Padovan
2012-11-16  2:08             ` Ben Hutchings
2012-11-14  5:39 ` [ 02/82] x86: Remove the ancient and deprecated disable_hlt() and enable_hlt() facility Ben Hutchings
2012-11-14  5:39 ` [ 03/82] drm/nouveau: silence modesetting spam on pre-gf8 chipsets Ben Hutchings
2012-11-14  5:39 ` [ 04/82] drm/nouveau: fix suspend/resume when in headless mode Ben Hutchings
2012-11-14  5:39 ` [ 05/82] drm/nouveau: headless mode by default if pci class != vga display Ben Hutchings
2012-11-14  5:39 ` [ 06/82] nfsd: add get_uint for u32s Ben Hutchings
2012-11-14  5:39 ` [ 07/82] ALSA: PCM: Fix some races at disconnection Ben Hutchings
2012-11-14  5:39 ` [ 08/82] ALSA: usb-audio: Fix " Ben Hutchings
2012-11-14  5:39 ` [ 09/82] ALSA: usb-audio: Use rwsem for disconnect protection Ben Hutchings
2012-11-14  5:39 ` [ 10/82] ALSA: usb-audio: Fix races at disconnection in mixer_quirks.c Ben Hutchings
2012-11-14  5:39 ` Ben Hutchings [this message]
2012-11-14  5:39 ` [ 12/82] ALSA: Avoid endless sleep after disconnect Ben Hutchings
2012-11-14  5:39 ` [ 13/82] drm/radeon: fix typo in evergreen_mc_resume() Ben Hutchings
2012-11-14  5:39 ` [ 14/82] USB: mos7840: remove unused variable Ben Hutchings
2012-11-14  5:39 ` [ 15/82] rtnetlink: Fix problem with buffer allocation Ben Hutchings
2012-11-14  5:39 ` [ 16/82] rtnetlink: fix rtnl_calcit() and rtnl_dump_ifinfo() Ben Hutchings
2012-11-14  5:39 ` [ 17/82] gpio-timberdale: fix a potential wrapping issue Ben Hutchings
2012-11-14  5:39 ` [ 18/82] cfg80211: fix antenna gain handling Ben Hutchings
2012-11-14  5:39 ` [ 19/82] drm/i915: fix overlay on i830M Ben Hutchings
2012-11-14  5:39 ` [ 20/82] drm/i915: fixup infoframe support for sdvo Ben Hutchings
2012-11-14  5:39 ` [ 21/82] drm/i915: clear the entire sdvo infoframe buffer Ben Hutchings
2012-11-14  5:39 ` [ 22/82] crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent data corruption Ben Hutchings
2012-11-14  5:39   ` Ben Hutchings
2012-11-14  5:39 ` [ 23/82] ARM: at91: at91sam9g10: fix SOC type detection Ben Hutchings
2012-11-14  5:39 ` [ 24/82] ARM: at91/i2c: change id to let i2c-gpio work Ben Hutchings
2012-11-14  5:39 ` [ 25/82] mac80211: Only process mesh config header on frames that RA_MATCH Ben Hutchings
2012-11-14  5:39 ` [ 26/82] mac80211: dont inspect Sequence Control field on control frames Ben Hutchings
2012-11-14  5:40 ` [ 27/82] gpiolib: Dont return -EPROBE_DEFER to sysfs, or for invalid gpios Ben Hutchings
2012-11-15 17:52   ` Herton Ronaldo Krzesinski
2012-11-15 20:06     ` Ben Hutchings
2012-11-14  5:40 ` [ 28/82] mac80211: fix SSID copy on IBSS JOIN Ben Hutchings
2012-11-14  5:40 ` [ 29/82] wireless: drop invalid mesh address extension frames Ben Hutchings
2012-11-14  5:40 ` [ 30/82] mac80211: check management frame header length Ben Hutchings
2012-11-14  5:40 ` [ 31/82] mac80211: verify that skb data is present Ben Hutchings
2012-11-14  5:40 ` [ 32/82] mac80211: make sure data is accessible in EAPOL check Ben Hutchings
2012-11-14  5:40 ` [ 33/82] ath9k: fix stale pointers potentially causing access to freed skbs Ben Hutchings
2012-11-14  5:40 ` [ 34/82] floppy: do put_disk on current dr if blk_init_queue fails Ben Hutchings
2012-11-14  5:40 ` [ 35/82] floppy: properly handle failure on add_disk loop Ben Hutchings
2012-11-14  5:40 ` [ 36/82] xen/gntdev: dont leak memory from IOCTL_GNTDEV_MAP_GRANT_REF Ben Hutchings
2012-11-14  5:40 ` [ 37/82] rt2800: validate step value for temperature compensation Ben Hutchings
2012-11-14  5:40 ` [ 38/82] ath9k: Test for TID only in BlockAcks while checking tx status Ben Hutchings
2012-11-14  5:40 ` [ 39/82] module: fix out-by-one error in kallsyms Ben Hutchings
2012-11-14  5:40 ` [ 40/82] Input: tsc40 - remove wrong announcement of pressure support Ben Hutchings
2012-11-14  5:40 ` [ 41/82] HID: microsoft: fix invalid rdesc for 3k kbd Ben Hutchings
2012-11-14  5:40 ` [ 42/82] xen/mmu: Use Xen specific TLB flush instead of the generic one Ben Hutchings
2012-11-14  5:40 ` [ 43/82] NFS: Wait for session recovery to finish before returning Ben Hutchings
2012-11-14  5:40 ` [ 44/82] NFSv4.1: We must release the sequence id when we fail to get a session slot Ben Hutchings
2012-11-14  5:40 ` [ 45/82] NFSv4: nfs4_locku_done must release the sequence id Ben Hutchings
2012-11-14  5:40 ` [ 46/82] NFS: fix bug in legacy DNS resolver Ben Hutchings
2012-11-14  5:40 ` [ 47/82] nfsv3: Make v3 mounts fail with ETIMEDOUTs instead EIO on mountd timeouts Ben Hutchings
2012-11-14  5:40 ` [ 48/82] nfs: Show original device name verbatim in /proc/*/mount{s,info} Ben Hutchings
2012-11-14  5:40 ` [ 49/82] target: Dont return success from module_init() if setup fails Ben Hutchings
2012-11-14  5:40 ` [ 50/82] target: Avoid integer overflow in se_dev_align_max_sectors() Ben Hutchings
2012-11-14  5:40 ` [ 51/82] iscsi-target: Fix missed wakeup race in TX thread Ben Hutchings
2012-11-14  5:40 ` [ 52/82] DRM/Radeon: Fix Load Detection on legacy primary DAC Ben Hutchings
2012-11-14  5:40 ` [ 53/82] cifs: fix potential buffer overrun in cifs.idmap handling code Ben Hutchings
2012-11-14  5:40 ` [ 54/82] ALSA: hda: Cirrus: Fix coefficient index for beep configuration Ben Hutchings
2012-11-14  5:40 ` [ 55/82] ALSA: HDA: Fix digital microphone on CS420x Ben Hutchings
2012-11-14  5:40 ` [ 56/82] ALSA: hda - Force to reset IEC958 status bits for AD codecs Ben Hutchings
2012-11-14  5:40 ` [ 57/82] hwmon: (w83627ehf) Force initial bank selection Ben Hutchings
2012-11-14  5:40 ` [ 58/82] drm: restore open_count if drm_setup fails Ben Hutchings
2012-11-14  5:40 ` [ 59/82] ALSA: hda - Fix empty DAC filling in patch_via.c Ben Hutchings
2012-11-14  5:40 ` [ 60/82] ALSA: hda - Fix invalid connections in VT1802 codec Ben Hutchings
2012-11-14  5:40 ` [ 61/82] ALSA: hda - Add new codec ALC668 and ALC900 (default name ALC1150) Ben Hutchings
2012-11-14  5:40 ` [ 62/82] ALSA: Fix card refcount unbalance Ben Hutchings
2012-11-14  5:40 ` [ 63/82] xfs: fix reading of wrapped log data Ben Hutchings
2012-11-14  5:40 ` [ 64/82] fanotify: fix missing break Ben Hutchings
2012-11-14  5:40 ` [ 65/82] mm: bugfix: set current->reclaim_state to NULL while returning from kswapd() Ben Hutchings
2012-11-14  5:40 ` [ 66/82] drm/vmwgfx: Fix hibernation device reset Ben Hutchings
2012-11-14  5:40 ` [ 67/82] drm/vmwgfx: Fix a case where the code would BUG when trying to pin GMR memory Ben Hutchings
2012-11-14  5:40 ` [ 68/82] sctp: fix call to SCTP_CMD_PROCESS_SACK in sctp_cmd_interpreter() Ben Hutchings
2012-11-14  5:40 ` [ 69/82] netlink: use kfree_rcu() in netlink_release() Ben Hutchings
2012-11-14  5:40 ` [ 70/82] tcp: fix FIONREAD/SIOCINQ Ben Hutchings
2012-11-14  5:40 ` [ 71/82] ipv6: Set default hoplimit as zero Ben Hutchings
2012-11-14  5:40 ` [ 72/82] net: usb: Fix memory leak on Tx data path Ben Hutchings
2012-11-14  5:40 ` [ 73/82] net: fix divide by zero in tcp algorithm illinois Ben Hutchings
2012-11-14  5:40 ` [ 74/82] l2tp: fix oops in l2tp_eth_create() error path Ben Hutchings
2012-11-14  5:40 ` [ 75/82] af-packet: fix oops when socket is not present Ben Hutchings
2012-11-14  5:40 ` [ 76/82] ipv6: send unsolicited neighbour advertisements to all-nodes Ben Hutchings
2012-11-14  5:40 ` [ 77/82] eCryptfs: Copy up POSIX ACL and read-only flags from lower mount Ben Hutchings
2012-11-14  5:40 ` [ 78/82] eCryptfs: check for eCryptfs cipher support at mount Ben Hutchings
2012-11-14  5:40 ` [ 79/82] r8169: allow multicast packets on sub-8168f chipset Ben Hutchings
2012-11-14  5:40 ` [ 80/82] r8169: Fix WoL on RTL8168d/8111d Ben Hutchings
2012-11-14  5:40 ` [ 81/82] r8169: use unlimited DMA burst for TX Ben Hutchings
2012-11-14  5:40 ` [ 82/82] sky2: Fix for interrupt handler Ben Hutchings
2012-11-14  6:13 ` [ 00/82] 3.2.34-stable review Ben Hutchings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121114053935.384898333@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthieu.castet@parrot.com \
    --cc=stable@vger.kernel.org \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.