mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alex Chiang <achiang@hp.com>
To: Greg KH <gregkh@suse.de>
Cc: linux-kernel@vger.kernel.org, stable@kernel.org,
	Jake Edge <jake@lwn.net>,
	jbarnes@virtuousgeek.org, kristen.c.accardi@intel.com,
	matthew@wil.cx, Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Subject: Re: [patch 031/104] PCI: prevent duplicate slot names
Date: Thu, 4 Dec 2008 15:10:39 -0700	[thread overview]
Message-ID: <20081204221039.GJ31468@ldl.fc.hp.com> (raw)
In-Reply-To: <20081203195050.GF8950@kroah.com>

Hi Greg,

I found a memory leak that I introduced with the below patch.

I sent the patch to Jesse a few days ago, but he hasn't pushed it
upstream yet.

http://article.gmane.org/gmane.linux.kernel.pci/2187/match=stop+leaking

I did Cc: stable@kernel.org on it, but I'm guessing that since
it's not upstream yet, you guys never saw it.

Anyhow, please pick it up for this round of .27-stable, else
we'll get a memory leak (while trying to work-around the
duplicate slot name issue).

Thanks.

/ac

* Greg KH <gregkh@suse.de>:
> 2.6.27-stable review patch.  If anyone has any objections,
> please let us know.
> 
> ------------------
> From: Alex Chiang <achiang@hp.com>
> 
> commit 5fe6cc60680d29740b85278e17a002fa27b7e642 upstream.
> 
> Prevent callers of pci_create_slot() from registering slots with
> duplicate names. This condition occurs most often when PCI hotplug
> drivers are loaded on platforms with broken firmware that assigns
> identical names to multiple slots.
> 
> We now rename these duplicate slots on behalf of the user.
> 
> If firmware assigns the name N to multiple slots, then:
> 
> The first registered slot is assigned N
> The second registered slot is assigned N-1
> The third registered slot is assigned N-2
> etc.
> 
> This is the permanent fix mentioned in earlier commits d6a9e9b4 and
> 167e782e (shpchp/pciehp: Rename duplicate slot name...).
> 
> We take advantage of the new 'hotplug' parameter in pci_create_slot()
> to prevent a slot create/rename race between hotplug drivers and
> detection drivers.
> 
> 	Scenario A:
> 	hotplug driver                  detection driver
> 	--------------                  ----------------
> 	pci_create_slot(hotplug=set)
> 					pci_create_slot(hotplug=NULL)
> 
> The hotplug driver creates the slot with its desired name, and then
> releases the semaphore. Now, the detection driver tries to create
> the same slot, but it already exists. We don't care about renaming,
> so return the existing slot.
> 
> 	Scenario B:
> 	hotplug driver                  detection driver
> 	--------------                  ----------------
> 					pci_create_slot(hotplug=NULL)
> 	pci_create_slot(hotplug=set)
> 
> The detection driver creates the slot with name "X". Then the hotplug
> driver tries to create the same slot, but wants the name "Y" instead.
> We detect that we're trying to create the same slot and that we also
> want a rename, so rename the slot to "Y" and return.
> 
> 	Scenario C:
> 	hotplug driver                  hotplug driver
> 	--------------                  ----------------
> 	pci_create_slot(hotplug=set)
> 					pci_create_slot(hotplug=set)
> 
> Two separate hotplug drivers are attempting to claim the slot and
> are passing valid hotplug_slot args to pci_create_slot(). We detect
> that the slot already has a ->hotplug callback, prevent a rename,
> and return -EBUSY.
> 
> Cc: jbarnes@virtuousgeek.org
> Cc: kristen.c.accardi@intel.com
> Cc: matthew@wil.cx
> Acked-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
> Signed-off-by: Alex Chiang <achiang@hp.com>
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
> 
> ---
>  drivers/pci/hotplug/pci_hotplug_core.c |   26 ------
>  drivers/pci/hotplug/pciehp_core.c      |   14 ---
>  drivers/pci/hotplug/shpchp_core.c      |   15 ---
>  drivers/pci/slot.c                     |  139 ++++++++++++++++++++++++++-------
>  4 files changed, 114 insertions(+), 80 deletions(-)
> 
> --- a/drivers/pci/hotplug/pciehp_core.c
> +++ b/drivers/pci/hotplug/pciehp_core.c
> @@ -191,7 +191,6 @@ static int init_slots(struct controller 
>  	struct slot *slot;
>  	struct hotplug_slot *hotplug_slot;
>  	struct hotplug_slot_info *info;
> -	int len, dup = 1;
>  	int retval = -ENOMEM;
>  
>  	list_for_each_entry(slot, &ctrl->slot_list, slot_list) {
> @@ -218,24 +217,11 @@ static int init_slots(struct controller 
>  		dbg("Registering bus=%x dev=%x hp_slot=%x sun=%x "
>  		    "slot_device_offset=%x\n", slot->bus, slot->device,
>  		    slot->hp_slot, slot->number, ctrl->slot_device_offset);
> -duplicate_name:
>  		retval = pci_hp_register(hotplug_slot,
>  					 ctrl->pci_dev->subordinate,
>  					 slot->device,
>  					 slot->name);
>  		if (retval) {
> -			/*
> -			 * If slot N already exists, we'll try to create
> -			 * slot N-1, N-2 ... N-M, until we overflow.
> -			 */
> -			if (retval == -EEXIST) {
> -				len = snprintf(slot->name, SLOT_NAME_SIZE,
> -					       "%d-%d", slot->number, dup++);
> -				if (len < SLOT_NAME_SIZE)
> -					goto duplicate_name;
> -				else
> -					err("duplicate slot name overflow\n");
> -			}
>  			err("pci_hp_register failed with error %d\n", retval);
>  			goto error_info;
>  		}
> --- a/drivers/pci/hotplug/pci_hotplug_core.c
> +++ b/drivers/pci/hotplug/pci_hotplug_core.c
> @@ -569,12 +569,6 @@ int pci_hp_register(struct hotplug_slot 
>  
>  	mutex_lock(&pci_hp_mutex);
>  
> -	/* Check if we have already registered a slot with the same name. */
> -	if (get_slot_from_name(name)) {
> -		result = -EEXIST;
> -		goto out;
> -	}
> -
>  	/*
>  	 * No problems if we call this interface from both ACPI_PCI_SLOT
>  	 * driver and call it here again. If we've already created the
> @@ -583,27 +577,12 @@ int pci_hp_register(struct hotplug_slot 
>  	pci_slot = pci_create_slot(bus, slot_nr, name, slot);
>  	if (IS_ERR(pci_slot)) {
>  		result = PTR_ERR(pci_slot);
> -		goto cleanup;
> -	}
> -
> -	if (pci_slot->hotplug) {
> -		dbg("%s: already claimed\n", __func__);
> -		result = -EBUSY;
> -		goto cleanup;
> +		goto out;
>  	}
>  
>  	slot->pci_slot = pci_slot;
>  	pci_slot->hotplug = slot;
>  
> -	/*
> -	 * Allow pcihp drivers to override the ACPI_PCI_SLOT name.
> -	 */
> -	if (strcmp(kobject_name(&pci_slot->kobj), name)) {
> -		result = kobject_rename(&pci_slot->kobj, name);
> -		if (result)
> -			goto cleanup;
> -	}
> -
>  	list_add(&slot->slot_list, &pci_hotplug_slot_list);
>  
>  	result = fs_add_slot(pci_slot);
> @@ -612,9 +591,6 @@ int pci_hp_register(struct hotplug_slot 
>  out:
>  	mutex_unlock(&pci_hp_mutex);
>  	return result;
> -cleanup:
> -	pci_destroy_slot(pci_slot);
> -	goto out;
>  }
>  
>  /**
> --- a/drivers/pci/hotplug/shpchp_core.c
> +++ b/drivers/pci/hotplug/shpchp_core.c
> @@ -102,7 +102,7 @@ static int init_slots(struct controller 
>  	struct hotplug_slot *hotplug_slot;
>  	struct hotplug_slot_info *info;
>  	int retval = -ENOMEM;
> -	int i, len, dup = 1;
> +	int i;
>  
>  	for (i = 0; i < ctrl->num_slots; i++) {
>  		slot = kzalloc(sizeof(*slot), GFP_KERNEL);
> @@ -144,23 +144,10 @@ static int init_slots(struct controller 
>  		dbg("Registering bus=%x dev=%x hp_slot=%x sun=%x "
>  		    "slot_device_offset=%x\n", slot->bus, slot->device,
>  		    slot->hp_slot, slot->number, ctrl->slot_device_offset);
> -duplicate_name:
>  		retval = pci_hp_register(slot->hotplug_slot,
>  				ctrl->pci_dev->subordinate, slot->device,
>  				hotplug_slot->name);
>  		if (retval) {
> -			/*
> -			 * If slot N already exists, we'll try to create
> -			 * slot N-1, N-2 ... N-M, until we overflow.
> -			 */
> -			if (retval == -EEXIST) {
> -				len = snprintf(slot->name, SLOT_NAME_SIZE,
> -					       "%d-%d", slot->number, dup++);
> -				if (len < SLOT_NAME_SIZE)
> -					goto duplicate_name;
> -				else
> -					err("duplicate slot name overflow\n");
> -			}
>  			err("pci_hp_register failed with error %d\n", retval);
>  			goto error_info;
>  		}
> --- a/drivers/pci/slot.c
> +++ b/drivers/pci/slot.c
> @@ -73,6 +73,77 @@ static struct kobj_type pci_slot_ktype =
>  	.default_attrs = pci_slot_default_attrs,
>  };
>  
> +static char *make_slot_name(const char *name)
> +{
> +	char *new_name;
> +	int len, max, dup;
> +
> +	new_name = kstrdup(name, GFP_KERNEL);
> +	if (!new_name)
> +		return NULL;
> +
> +	/*
> +	 * Make sure we hit the realloc case the first time through the
> +	 * loop.  'len' will be strlen(name) + 3 at that point which is
> +	 * enough space for "name-X" and the trailing NUL.
> +	 */
> +	len = strlen(name) + 2;
> +	max = 1;
> +	dup = 1;
> +
> +	for (;;) {
> +		struct kobject *dup_slot;
> +		dup_slot = kset_find_obj(pci_slots_kset, new_name);
> +		if (!dup_slot)
> +			break;
> +		kobject_put(dup_slot);
> +		if (dup == max) {
> +			len++;
> +			max *= 10;
> +			kfree(new_name);
> +			new_name = kmalloc(len, GFP_KERNEL);
> +			if (!new_name)
> +				break;
> +		}
> +		sprintf(new_name, "%s-%d", name, dup++);
> +	}
> +
> +	return new_name;
> +}
> +
> +static int rename_slot(struct pci_slot *slot, const char *name)
> +{
> +	int result = 0;
> +	char *slot_name;
> +
> +	if (strcmp(kobject_name(&slot->kobj), name) == 0)
> +		return result;
> +
> +	slot_name = make_slot_name(name);
> +	if (!slot_name)
> +		return -ENOMEM;
> +
> +	result = kobject_rename(&slot->kobj, slot_name);
> +	kfree(slot_name);
> +
> +	return result;
> +}
> +
> +static struct pci_slot *get_slot(struct pci_bus *parent, int slot_nr)
> +{
> +	struct pci_slot *slot;
> +	/*
> +	 * We already hold pci_bus_sem so don't worry
> +	 */
> +	list_for_each_entry(slot, &parent->slots, list)
> +		if (slot->number == slot_nr) {
> +			kobject_get(&slot->kobj);
> +			return slot;
> +		}
> +
> +	return NULL;
> +}
> +
>  /**
>   * pci_create_slot - create or increment refcount for physical PCI slot
>   * @parent: struct pci_bus of parent bridge
> @@ -85,7 +156,17 @@ static struct kobj_type pci_slot_ktype =
>   * either return a new &struct pci_slot to the caller, or if the pci_slot
>   * already exists, its refcount will be incremented.
>   *
> - * Slots are uniquely identified by a @pci_bus, @slot_nr, @name tuple.
> + * Slots are uniquely identified by a @pci_bus, @slot_nr tuple.
> + *
> + * There are known platforms with broken firmware that assign the same
> + * name to multiple slots. Workaround these broken platforms by renaming
> + * the slots on behalf of the caller. If firmware assigns name N to
> + * multiple slots:
> + *
> + * The first slot is assigned N
> + * The second slot is assigned N-1
> + * The third slot is assigned N-2
> + * etc.
>   *
>   * Placeholder slots:
>   * In most cases, @pci_bus, @slot_nr will be sufficient to uniquely identify
> @@ -94,12 +175,8 @@ static struct kobj_type pci_slot_ktype =
>   * the slot. In this scenario, the caller may pass -1 for @slot_nr.
>   *
>   * The following semantics are imposed when the caller passes @slot_nr ==
> - * -1. First, the check for existing %struct pci_slot is skipped, as the
> - * caller may know about several unpopulated slots on a given %struct
> - * pci_bus, and each slot would have a @slot_nr of -1.  Uniqueness for
> - * these slots is then determined by the @name parameter. We expect
> - * kobject_init_and_add() to warn us if the caller attempts to create
> - * multiple slots with the same name. The other change in semantics is
> + * -1. First, we no longer check for an existing %struct pci_slot, as there
> + * may be many slots with @slot_nr of -1.  The other change in semantics is
>   * user-visible, which is the 'address' parameter presented in sysfs will
>   * consist solely of a dddd:bb tuple, where dddd is the PCI domain of the
>   * %struct pci_bus and bb is the bus number. In other words, the devfn of
> @@ -111,44 +188,53 @@ struct pci_slot *pci_create_slot(struct 
>  				 struct hotplug_slot *hotplug)
>  {
>  	struct pci_slot *slot;
> -	int err;
> +	int err = 0;
> +	char *slot_name = NULL;
>  
>  	down_write(&pci_bus_sem);
>  
>  	if (slot_nr == -1)
>  		goto placeholder;
>  
> -	/* If we've already created this slot, bump refcount and return. */
> -	list_for_each_entry(slot, &parent->slots, list) {
> -		if (slot->number == slot_nr) {
> -			kobject_get(&slot->kobj);
> -			pr_debug("%s: inc refcount to %d on %04x:%02x:%02x\n",
> -				 __func__,
> -				 atomic_read(&slot->kobj.kref.refcount),
> -				 pci_domain_nr(parent), parent->number,
> -				 slot_nr);
> -			goto out;
> +	/*
> +	 * Hotplug drivers are allowed to rename an existing slot,
> +	 * but only if not already claimed.
> +	 */
> +	slot = get_slot(parent, slot_nr);
> +	if (slot) {
> +		if (hotplug) {
> +			if ((err = slot->hotplug ? -EBUSY : 0)
> +			     || (err = rename_slot(slot, name))) {
> +				kobject_put(&slot->kobj);
> +				slot = NULL;
> +				goto err;
> +			}
>  		}
> +		goto out;
>  	}
>  
>  placeholder:
>  	slot = kzalloc(sizeof(*slot), GFP_KERNEL);
>  	if (!slot) {
> -		slot = ERR_PTR(-ENOMEM);
> -		goto out;
> +		err = -ENOMEM;
> +		goto err;
>  	}
>  
>  	slot->bus = parent;
>  	slot->number = slot_nr;
>  
>  	slot->kobj.kset = pci_slots_kset;
> -	err = kobject_init_and_add(&slot->kobj, &pci_slot_ktype, NULL,
> -				   "%s", name);
> -	if (err) {
> -		printk(KERN_ERR "Unable to register kobject %s\n", name);
> +	slot_name = make_slot_name(name);
> +	if (!slot_name) {
> +		err = -ENOMEM;
>  		goto err;
>  	}
>  
> +	err = kobject_init_and_add(&slot->kobj, &pci_slot_ktype, NULL,
> +				   "%s", slot_name);
> +	if (err)
> +		goto err;
> +
>  	INIT_LIST_HEAD(&slot->list);
>  	list_add(&slot->list, &parent->slots);
>  
> @@ -156,10 +242,10 @@ placeholder:
>  	pr_debug("%s: created pci_slot on %04x:%02x:%02x\n",
>  		 __func__, pci_domain_nr(parent), parent->number, slot_nr);
>  
> - out:
> +out:
>  	up_write(&pci_bus_sem);
>  	return slot;
> - err:
> +err:
>  	kfree(slot);
>  	slot = ERR_PTR(err);
>  	goto out;
> @@ -205,7 +291,6 @@ EXPORT_SYMBOL_GPL(pci_update_slot_number
>   * just call kobject_put on its kobj and let our release methods do the
>   * rest.
>   */
> -
>  void pci_destroy_slot(struct pci_slot *slot)
>  {
>  	pr_debug("%s: dec refcount to %d on %04x:%02x:%02x\n", __func__,
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

  reply	other threads:[~2008-12-04 22:11 UTC|newest]

Thread overview: 190+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081203193901.715896543@mini.kroah.org>
2008-12-03 19:47 ` [patch 000/104] 2.6.27-stable review Greg KH
2008-12-03 19:48   ` [patch 001/104] USB: gadget rndis: send notifications Greg KH
2008-12-03 19:48   ` [patch 002/104] USB: gadget rndis: stop windows self-immolation Greg KH
2008-12-03 19:48   ` [patch 003/104] USB: usbmon: fix read(2) Greg KH
2008-12-03 19:48   ` [patch 004/104] USB: fix SB700 usb subsystem hang bug Greg KH
2008-12-03 19:48   ` [patch 005/104] USB: fix SB600 USB " Greg KH
2008-12-03 19:48   ` [patch 006/104] atl1e: fix broken multicast by removing unnecessary crc inversion Greg KH
2008-12-03 19:48   ` [patch 007/104] cpuset: fix regression when failed to generate sched domains Greg KH
2008-12-03 19:48   ` [patch 008/104] cgroups: fix a serious bug in cgroupstats Greg KH
2008-12-03 19:48   ` [patch 009/104] eCryptfs: Allocate up to two scatterlists for crypto ops on keys Greg KH
2008-12-03 19:48   ` [patch 010/104] pxa2xx_spi: bugfix full duplex dma data corruption Greg KH
2008-12-03 19:48   ` [patch 011/104] fbdev: clean the penguins dirty feet Greg KH
2008-12-05 12:58     ` Pavel Machek
2008-12-05 19:29       ` Henrique de Moraes Holschuh
2008-12-06  0:26       ` Greg KH
2008-12-06  2:44       ` Andrew Morton
2008-12-03 19:48   ` [patch 012/104] gpiolib: extend gpio label column width in debugfs file Greg KH
2008-12-03 19:48   ` [patch 013/104] lib/scatterlist.c: fix kunmap() argument in sg_miter_stop() Greg KH
2008-12-03 19:48   ` [patch 014/104] sysvipc: fix the ipc structures initialization Greg KH
2008-12-03 19:48   ` [patch 015/104] parisc: fix kernel crash when unwinding a userspace process Greg KH
2008-12-03 19:48   ` [patch 016/104] epoll: introduce resource usage limits Greg KH
2009-01-23  4:51     ` Bron Gondwana
2009-01-23  5:16       ` Greg KH
2009-01-23  9:47         ` Bron Gondwana
2009-01-23 17:06           ` Greg KH
2009-01-23 17:24             ` Bastien ROUCARIES
2009-01-23 19:36               ` Davide Libenzi
2009-01-24  3:50             ` Bron Gondwana
2009-01-24  8:36               ` Vegard Nossum
2009-01-24 13:03             ` Bron Gondwana
2009-01-25 11:01               ` Bron Gondwana
2009-01-25 12:20                 ` Bron Gondwana
2009-01-28  0:35                   ` Greg KH
2009-01-28  3:38                     ` Bron Gondwana
2009-01-28  3:46                       ` Davide Libenzi
2009-01-28  3:57                         ` Bron Gondwana
2009-01-28  4:10                           ` Davide Libenzi
2009-01-28  5:26                             ` Greg KH
2009-01-28  5:36                               ` Willy Tarreau
2009-01-28  5:48                                 ` Davide Libenzi
2009-01-28  6:20                                   ` Willy Tarreau
2009-01-28  6:36                                     ` Davide Libenzi
2009-01-28  6:59                                       ` Willy Tarreau
2009-01-28  6:38                               ` Davide Libenzi
2009-01-28  6:52                                 ` Bron Gondwana
2009-01-28  7:34                                   ` Davide Libenzi
2009-01-28 10:45                                     ` Bron Gondwana
2009-01-28  6:57                                 ` Davide Libenzi
2009-01-28  9:24                                   ` Bron Gondwana
2009-01-28 16:56                                     ` Davide Libenzi
2009-01-28 21:46                         ` Chris Adams
2009-01-28 23:54                           ` Davide Libenzi
2009-01-28  3:47                       ` [PATCH 1/3] epoll: increase default max_user_instances to 1024 Bron Gondwana
2009-01-28  3:47                         ` [PATCH 2/3] epoll: allow 0 for "unlimited" on epoll limits Bron Gondwana
2009-01-28  3:47                           ` [PATCH 3/3] epoll: add /proc/sys/fs/epoll/limits interface Bron Gondwana
2009-01-28  4:00                         ` [PATCH 1/3] epoll: increase default max_user_instances to 1024 Davide Libenzi
2009-01-28  4:07                           ` Ray Lee
2009-01-28  4:14                             ` Davide Libenzi
2009-01-28  4:55                               ` Bron Gondwana
2009-01-28  5:30                                 ` Davide Libenzi
2009-01-28  5:38                             ` Bron Gondwana
2009-01-28 10:16                             ` Alan Cox
2009-01-28 10:59                               ` Bron Gondwana
2009-01-28 11:36                                 ` Alan Cox
2009-01-28 13:28                                   ` Bron Gondwana
2009-01-28  4:39                           ` Bron Gondwana
2009-01-28  5:32                           ` Bron Gondwana
2009-01-28 11:08                             ` Vegard Nossum
2009-01-28 16:52                               ` Davide Libenzi
2009-01-28 20:51                                 ` Bron Gondwana
2009-01-28 23:51                                   ` Davide Libenzi
2009-01-29  0:28                                     ` Bron Gondwana
2009-01-25 12:03             ` [patch 016/104] epoll: introduce resource usage limits Bron Gondwana
2009-01-23 19:28           ` Davide Libenzi
2008-12-03 19:48   ` [patch 017/104] Fix inotify watch removal/umount races Greg KH
2008-12-03 19:48   ` [patch 018/104] IA64: fix boot panic caused by offline CPUs Greg KH
2008-12-03 19:49   ` [patch 019/104] V4L/DVB (9352): Add some missing compat32 ioctls Greg KH
2008-12-03 19:49   ` [patch 020/104] Input: atkbd - add keymap quirk for Inventec Symphony systems Greg KH
2008-12-03 19:49   ` [patch 021/104] lib/idr.c: fix rcu related race with idr_find Greg KH
2008-12-09 21:40     ` Dave Airlie
2008-12-09 22:47       ` Linus Torvalds
2008-12-10  0:43         ` Dave Airlie
2008-12-10  1:46           ` Dave Airlie
2008-12-10  2:02             ` Andrew Morton
2008-12-10  2:08               ` Dave Airlie
2008-12-10  2:32                 ` Andrew Morton
2008-12-10 17:33                 ` Manfred Spraul
2008-12-03 19:49   ` [patch 022/104] parport_serial: fix array overflow Greg KH
2008-12-03 19:49   ` [patch 023/104] x86: more general identifier for Phoenix BIOS Greg KH
2008-12-03 19:49   ` [patch 024/104] x86: always define DECLARE_PCI_UNMAP* macros Greg KH
2008-12-03 19:49   ` [patch 025/104] ath9k: Fix SW-IOMMU bounce buffer starvation Greg KH
2008-12-03 19:50   ` [patch 026/104] ath9k: correct expected max RX buffer size Greg KH
2008-12-03 19:50   ` [patch 027/104] axnet_cs / pcnet_cs: moving PCMCIA_DEVICE_PROD_ID for Netgear FA411 Greg KH
2008-12-03 22:06     ` Cord Walter
2008-12-03 19:50   ` [patch 028/104] PCI Hotplug core: add name param pci_hp_register interface Greg KH
2008-12-03 19:50   ` [patch 029/104] PCI: update pci_create_slot() to take a hotplug param Greg KH
2008-12-03 19:50   ` [patch 030/104] PCI Hotplug: serialize pci_hp_register and pci_hp_deregister Greg KH
2008-12-03 19:50   ` [patch 031/104] PCI: prevent duplicate slot names Greg KH
2008-12-04 22:10     ` Alex Chiang [this message]
2008-12-05 18:27       ` [stable] " Greg KH
2008-12-09 22:41         ` Jesse Barnes
2008-12-03 19:50   ` [patch 032/104] PCI, PCI Hotplug: introduce slot_name helpers Greg KH
2008-12-03 19:50   ` [patch 033/104] PCI: acpiphp: remove name parameter Greg KH
2008-12-03 19:50   ` [patch 034/104] PCI: cpci_hotplug: stop managing hotplug_slot->name Greg KH
2008-12-03 22:15     ` Scott Murray
2008-12-03 19:50   ` [patch 035/104] PCI: cpqphp: " Greg KH
2008-12-03 19:51   ` [patch 036/104] PCI: fakephp: remove name parameter Greg KH
2008-12-03 19:51   ` [patch 037/104] PCI: ibmphp: stop managing hotplug_slot->name Greg KH
2008-12-03 19:51   ` [patch 038/104] PCI: pciehp: remove name parameter Greg KH
2008-12-03 19:51   ` [patch 039/104] PCI: rpaphp: kmalloc/kfree slot->name directly Greg KH
2008-12-03 19:51   ` [patch 040/104] PCI: SGI Hotplug: stop managing bss_hotplug_slot->name Greg KH
2008-12-03 19:51   ` [patch 041/104] PCI: shcphp: remove name parameter Greg KH
2008-12-03 19:51   ` [patch 042/104] PCI: Hotplug core: remove name Greg KH
2008-12-03 19:51   ` [patch 043/104] CPUFREQ: powernow-k8: ignore out-of-range PstateStatus value Greg KH
2008-12-03 19:51   ` [patch 044/104] xen: do not reserve 2 pages of padding between hypervisor and fixmap Greg KH
2008-12-03 19:51   ` [patch 045/104] x86: Hibernate: Fix breakage on x86_32 with CONFIG_NUMA set Greg KH
2008-12-03 19:51   ` [patch 046/104] x86: SB600: skip ACPI IRQ0 override if it is not routed to INT2 of IOAPIC Greg KH
2008-12-03 19:51   ` [patch 047/104] libata: Avoid overflow in libata when tf->hba_lbal > 127 Greg KH
2008-12-03 19:51   ` [patch 048/104] x86: call dmi-quirks for HP Laptops after early-quirks are executed Greg KH
2008-12-03 19:51   ` [patch 049/104] igb: Use device_set_wakeup_enable Greg KH
2008-12-03 19:51   ` [patch 050/104] e1000: " Greg KH
2008-12-03 19:52   ` [patch 051/104] e1000e: " Greg KH
2008-12-03 19:52   ` [patch 052/104] libata: blacklist Seagate drives which time out FLUSH_CACHE when used with NCQ Greg KH
2008-12-03 19:52   ` [patch 053/104] rtl8187: add device ID 0bda:8198 Greg KH
2008-12-03 19:52   ` [patch 054/104] rtl8187: Add USB ID for Belkin F5D7050 with RTL8187B chip Greg KH
2008-12-03 19:52   ` [patch 055/104] cifs: Reduce number of socket retries in large write path Greg KH
2008-12-03 19:52   ` [patch 056/104] cifs: Fix error in smb_send2 Greg KH
2008-12-03 19:52   ` [patch 057/104] powerpc/spufs: Fix spinning in spufs_ps_fault on signal Greg KH
2008-12-03 19:52   ` [patch 058/104] powerpc/spufs: add a missing mutex_unlock Greg KH
2008-12-03 19:52   ` [patch 059/104] WATCHDOG: hpwdt: set the mapped BIOS address space as executable Greg KH
2008-12-03 19:52   ` [patch 060/104] WATCHDOG: hpwdt: Fix kdump when using hpwdt Greg KH
2008-12-03 19:52   ` [patch 061/104] Remove -mno-spe flags as they dont belong Greg KH
2008-12-03 19:53   ` [patch 062/104] ACPI: EC: count interrupts only if called from interrupt handler Greg KH
2008-12-05 13:06     ` Pavel Machek
2008-12-06  0:26       ` Greg KH
2008-12-03 19:53   ` [patch 063/104] ieee1394: sbp2: another iPod mini quirk entry Greg KH
2008-12-03 19:53   ` [patch 064/104] firewire: fw-sbp2: " Greg KH
2008-12-03 19:53   ` [patch 065/104] IB/mlx4: Fix MTT leakage in resize CQ Greg KH
2008-12-03 19:53   ` [patch 066/104] net: Fix soft lockups/OOM issues w/ unix garbage collector (CVE-2008-5300) Greg KH
2008-12-03 19:53   ` [patch 067/104] libata: improve phantom device detection Greg KH
2008-12-04  4:20     ` Tejun Heo
2008-12-05 18:36       ` [stable] " Greg KH
2008-12-06  5:24         ` Tejun Heo
2008-12-03 19:53   ` [patch 068/104] cifs: Fix cifs reconnection flags Greg KH
2008-12-03 19:53   ` [patch 069/104] cifs: remove unused list, add new cifs sock list to prepare for mount/umount fix Greg KH
2008-12-03 19:53   ` [patch 070/104] cifs: clean up server protocol handling Greg KH
2008-12-03 19:53   ` [patch 071/104] cifs: disable sharing session and tcon and add new TCP sharing code Greg KH
2008-12-03 19:53   ` [patch 072/104] cifs: reinstate sharing of SMB sessions sans races Greg KH
2008-12-03 19:53   ` [patch 073/104] cifs: minor cleanup to cifs_mount Greg KH
2008-12-03 19:53   ` [patch 074/104] cifs: reinstate sharing of tree connections Greg KH
2008-12-03 19:53   ` [patch 075/104] cifs: Fix build break Greg KH
2008-12-03 19:55   ` [patch 076/104] cifs: Fix check for tcon seal setting and fix oops on failed mount from earlier patch Greg KH
2008-12-03 19:56   ` [patch 077/104] cifs: prevent cifs_writepages() from skipping unwritten pages Greg KH
2008-12-03 19:56   ` [patch 078/104] cifs: fix check for dead tcon in smb_init Greg KH
2008-12-03 19:56   ` [patch 079/104] ext4: Update flex_bg free blocks and free inodes counters when resizing Greg KH
2008-12-03 19:56   ` [patch 080/104] ext4: fix #11321: create /proc/ext4/*/stats more carefully Greg KH
2008-12-03 19:56   ` [patch 081/104] jbd2: fix /proc setup for devices that contain / in their names Greg KH
2008-12-03 19:56   ` [patch 082/104] ext4: add missing unlock in ext4_check_descriptors() on error path Greg KH
2008-12-03 19:56   ` [patch 083/104] ext4: elevate write count for migrate ioctl Greg KH
2008-12-03 19:56   ` [patch 084/104] ext4: Renumber EXT4_IOC_MIGRATE Greg KH
2008-12-03 19:56   ` [patch 085/104] ext4/jbd2: Avoid WARN() messages when failing to write to the superblock Greg KH
2008-12-03 19:56   ` [patch 086/104] ext4: fix initialization of UNINIT bitmap blocks Greg KH
2008-12-04  4:10     ` Theodore Tso
2008-12-05 18:36       ` [stable] " Greg KH
2008-12-03 19:56   ` [patch 087/104] jbd2: abort instead of waiting for nonexistent transaction Greg KH
2008-12-03 19:56   ` [patch 088/104] jbd2: Fix buffer head leak when writing the commit block Greg KH
2008-12-03 19:56   ` [patch 089/104] ext4: fix xattr deadlock Greg KH
2008-12-03 19:56   ` [patch 090/104] ext4: Free ext4_prealloc_space using kmem_cache_free Greg KH
2008-12-03 19:56   ` [patch 091/104] ext4: Do mballoc init before doing filesystem recovery Greg KH
2008-12-03 19:56   ` [patch 092/104] ext4: Fix duplicate entries returned from getdents() system call Greg KH
2008-12-03 19:56   ` [patch 093/104] jbd2: dont give up looking for space so easily in __jbd2_log_wait_for_space Greg KH
2008-12-03 19:56   ` [patch 094/104] ext4: Convert to host order before using the values Greg KH
2008-12-03 19:56   ` [patch 095/104] ext4: wait on all pending commits in ext4_sync_fs() Greg KH
2008-12-03 19:56   ` [patch 096/104] ext4: calculate journal credits correctly Greg KH
2008-12-03 19:56   ` [patch 097/104] ext4: Mark the buffer_heads as dirty and uptodate after prepare_write Greg KH
2008-12-03 19:56   ` [patch 098/104] ext4: add checksum calculation when clearing UNINIT flag in ext4_new_inode Greg KH
2008-12-03 19:56   ` [patch 099/104] ext3: fix ext3_dx_readdir hash collision handling Greg KH
2008-12-03 19:56   ` [patch 100/104] ext3: Fix duplicate entries returned from getdents() system call Greg KH
2008-12-03 19:56   ` [patch 101/104] ext3: dont try to resize if there are no reserved gdt blocks left Greg KH
2008-12-04 22:07     ` Valdis.Kletnieks
2008-12-03 19:56   ` [patch 102/104] ext2: fix ext2 block reservation early ENOSPC issue Greg KH
2008-12-03 19:56   ` [patch 103/104] ext3: fix ext3 " Greg KH
2008-12-03 19:56   ` [patch 104/104] jbd: ordered data integrity fix Greg KH
2008-12-03 21:39   ` [patch 000/104] 2.6.27-stable review Rafael J. Wysocki
2008-12-03 22:10     ` Michael Tokarev
2008-12-03 23:18       ` Rafael J. Wysocki
2008-12-05  0:33     ` Rafael J. Wysocki
2008-12-09 17:58       ` [stable] " Greg KH
2008-12-03 22:06   ` Michael Tokarev
2008-12-03 23:19     ` Greg KH
     [not found] <bF63r-1nB-59@gated-at.bofh.it>
     [not found] ` <bXmsS-4eW-1@gated-at.bofh.it>
     [not found]   ` <bXmMj-4HC-7@gated-at.bofh.it>
     [not found]     ` <bXqQ1-2GV-49@gated-at.bofh.it>
     [not found]       ` <bXxHH-5zl-23@gated-at.bofh.it>
     [not found]         ` <bXQqZ-1hm-9@gated-at.bofh.it>
     [not found]           ` <bYb2q-8bp-21@gated-at.bofh.it>
     [not found]             ` <bYchR-1AT-3@gated-at.bofh.it>
     [not found]               ` <bZ6Di-6ZV-1@gated-at.bofh.it>

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=20081204221039.GJ31468@ldl.fc.hp.com \
    --to=achiang@hp.com \
    --cc=gregkh@suse.de \
    --cc=jake@lwn.net \
    --cc=jbarnes@virtuousgeek.org \
    --cc=kaneshige.kenji@jp.fujitsu.com \
    --cc=kristen.c.accardi@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew@wil.cx \
    --cc=stable@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®