diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-12 14:35:59 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-12 14:35:59 -0700 |
| commit | 1b7f0118b6230122c54406c62c9a446b93667456 (patch) | |
| tree | a347e2aa67aa99b4aa7b71eee03da869ea53586a | |
| parent | f32abb8c7a4b184000d1c7cbef8b14db7c131147 (diff) | |
| download | patches-1b7f0118b6230122c54406c62c9a446b93667456.tar.gz | |
bug fixes
17 files changed, 1261 insertions, 10 deletions
diff --git a/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch b/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch new file mode 100644 index 00000000000000..9f43911ad61bbc --- /dev/null +++ b/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch @@ -0,0 +1,146 @@ +From dhowells@redhat.com Thu Aug 12 13:40:21 2010 +From: David Howells <dhowells@redhat.com> +Subject: kobject: Break the kobject namespace defs into their own header +To: ebiederm@xmission.com, gregkh@suse.de +Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, + David Howells <dhowells@redhat.com> +Date: Wed, 11 Aug 2010 15:01:02 +0100 +Message-ID: <20100811140102.19596.84876.stgit@warthog.procyon.org.uk> + +Break the kobject namespace defs into their own header to avoid a header file +inclusion ordering problem between linux/sysfs.h and linux/kobject.h. + +This fixes the build breakage on older versions of gcc. + +Signed-off-by: David Howells <dhowells@redhat.com> +Cc: Eric Biederman <ebiederm@xmission.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + include/linux/kobject.h | 35 ---------------------------- + include/linux/kobject_ns.h | 56 +++++++++++++++++++++++++++++++++++++++++++++ + include/linux/sysfs.h | 1 + 3 files changed, 58 insertions(+), 34 deletions(-) + +--- a/include/linux/kobject.h ++++ b/include/linux/kobject.h +@@ -22,6 +22,7 @@ + #include <linux/compiler.h> + #include <linux/spinlock.h> + #include <linux/kref.h> ++#include <linux/kobject_ns.h> + #include <linux/kernel.h> + #include <linux/wait.h> + #include <asm/atomic.h> +@@ -136,42 +137,8 @@ struct kobj_attribute { + + extern const struct sysfs_ops kobj_sysfs_ops; + +-/* +- * Namespace types which are used to tag kobjects and sysfs entries. +- * Network namespace will likely be the first. +- */ +-enum kobj_ns_type { +- KOBJ_NS_TYPE_NONE = 0, +- KOBJ_NS_TYPE_NET, +- KOBJ_NS_TYPES +-}; +- + struct sock; + +-/* +- * Callbacks so sysfs can determine namespaces +- * @current_ns: return calling task's namespace +- * @netlink_ns: return namespace to which a sock belongs (right?) +- * @initial_ns: return the initial namespace (i.e. init_net_ns) +- */ +-struct kobj_ns_type_operations { +- enum kobj_ns_type type; +- const void *(*current_ns)(void); +- const void *(*netlink_ns)(struct sock *sk); +- const void *(*initial_ns)(void); +-}; +- +-int kobj_ns_type_register(const struct kobj_ns_type_operations *ops); +-int kobj_ns_type_registered(enum kobj_ns_type type); +-const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent); +-const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj); +- +-const void *kobj_ns_current(enum kobj_ns_type type); +-const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk); +-const void *kobj_ns_initial(enum kobj_ns_type type); +-void kobj_ns_exit(enum kobj_ns_type type, const void *ns); +- +- + /** + * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. + * +--- /dev/null ++++ b/include/linux/kobject_ns.h +@@ -0,0 +1,56 @@ ++/* Kernel object name space definitions ++ * ++ * Copyright (c) 2002-2003 Patrick Mochel ++ * Copyright (c) 2002-2003 Open Source Development Labs ++ * Copyright (c) 2006-2008 Greg Kroah-Hartman <greg@kroah.com> ++ * Copyright (c) 2006-2008 Novell Inc. ++ * ++ * Split from kobject.h by David Howells (dhowells@redhat.com) ++ * ++ * This file is released under the GPLv2. ++ * ++ * Please read Documentation/kobject.txt before using the kobject ++ * interface, ESPECIALLY the parts about reference counts and object ++ * destructors. ++ */ ++ ++#ifndef _LINUX_KOBJECT_NS_H ++#define _LINUX_KOBJECT_NS_H ++ ++struct sock; ++struct kobject; ++ ++/* ++ * Namespace types which are used to tag kobjects and sysfs entries. ++ * Network namespace will likely be the first. ++ */ ++enum kobj_ns_type { ++ KOBJ_NS_TYPE_NONE = 0, ++ KOBJ_NS_TYPE_NET, ++ KOBJ_NS_TYPES ++}; ++ ++/* ++ * Callbacks so sysfs can determine namespaces ++ * @current_ns: return calling task's namespace ++ * @netlink_ns: return namespace to which a sock belongs (right?) ++ * @initial_ns: return the initial namespace (i.e. init_net_ns) ++ */ ++struct kobj_ns_type_operations { ++ enum kobj_ns_type type; ++ const void *(*current_ns)(void); ++ const void *(*netlink_ns)(struct sock *sk); ++ const void *(*initial_ns)(void); ++}; ++ ++int kobj_ns_type_register(const struct kobj_ns_type_operations *ops); ++int kobj_ns_type_registered(enum kobj_ns_type type); ++const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent); ++const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj); ++ ++const void *kobj_ns_current(enum kobj_ns_type type); ++const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk); ++const void *kobj_ns_initial(enum kobj_ns_type type); ++void kobj_ns_exit(enum kobj_ns_type type, const void *ns); ++ ++#endif /* _LINUX_KOBJECT_NS_H */ +--- a/include/linux/sysfs.h ++++ b/include/linux/sysfs.h +@@ -16,6 +16,7 @@ + #include <linux/errno.h> + #include <linux/list.h> + #include <linux/lockdep.h> ++#include <linux/kobject_ns.h> + #include <asm/atomic.h> + + struct kobject; diff --git a/f1.patch b/f1.patch new file mode 100644 index 00000000000000..9696651f2c9d11 --- /dev/null +++ b/f1.patch @@ -0,0 +1,14 @@ +--- + drivers/media/video/v4l2-ctrls.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/media/video/v4l2-ctrls.c ++++ b/drivers/media/video/v4l2-ctrls.c +@@ -19,6 +19,7 @@ + */ + + #include <linux/ctype.h> ++#include <linux/slab.h> + #include <media/v4l2-ioctl.h> + #include <media/v4l2-device.h> + #include <media/v4l2-ctrls.h> @@ -2,45 +2,63 @@ gregkh/gkh-version.patch ##################################################################### -# Stuff to be merged for 2.6.35 +# Stuff to be merged for 2.6.36 ##################################################################### ################################# -# Driver core patches for 2.6.35 +# Driver core patches for 2.6.36 ################################# +driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch ################################# -# TTY patches for 2.6.35 +# TTY patches for 2.6.36 ################################# +tty.current/serial-print-early-console-device-address-in-hex.patch ################################# -# USB patches for 2.6.35 +# USB patches for 2.6.36 ################################# +usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch +usb.current/usb-option-add-celot-ct-650.patch +usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch +usb.current/usb-add-device-ids-for-igotu-to-navman.patch +usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch +usb.current/usb-pl2303-new-vendor-and-product-id.patch ################################# -# Staging patches for 2.6.35 +# Staging patches for 2.6.36 ################################# +staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch +staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch +staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch +staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch +staging.current/staging-spectra-removes-unused-variable.patch +staging.current/staging-spectra-initializa-lblk-variable.patch +staging.current/staging-spectra-removes-unused-functions.patch ##################################################################### -# Stuff to be merged after 2.6.35 is out +# Stuff to be merged after 2.6.36 is out ##################################################################### ############################################# -# Driver core patches for after 2.6.35 is out +# Driver core patches for after 2.6.36 is out ############################################# # can we really drop it? (nope, not yet...) #driver-core/driver-core-remove-config_sysfs_deprecated.patch ##################################### -# TTY patches for after 2.6.35 is out +# TTY patches for after 2.6.36 is out ##################################### ################################### -# USB stuff for after 2.6.35 is out +# USB stuff for after 2.6.36 is out ################################### -# staging stuff is now in the staging-next tree on git.kernel.org +# staging stuff for next is now in the staging-next tree on git.kernel.org + + +f1.patch diff --git a/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch b/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch new file mode 100644 index 00000000000000..300aaf84eeaeb9 --- /dev/null +++ b/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch @@ -0,0 +1,56 @@ +From martinez.javier@gmail.com Thu Aug 12 13:10:00 2010 +Subject: Staging: spectra: don't use locked_ioctl, fix build +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Sat, 10 Jul 2010 00:07:35 -0400 +Message-ID: <1278734855.1725.52.camel@lenovo> + +Last patch has a style problem. Sending the correct one. Sorry for the noise + +Since BKL was removed from block ioctl handling code, locked_ioctl doesn't +exist anymore. + +Using ioctl instead and doing the locking manually. + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/ffsport.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +--- a/drivers/staging/spectra/ffsport.c ++++ b/drivers/staging/spectra/ffsport.c +@@ -27,6 +27,7 @@ + #include <linux/kthread.h> + #include <linux/log2.h> + #include <linux/init.h> ++#include <linux/smp_lock.h> + + /**** Helper functions used for Div, Remainder operation on u64 ****/ + +@@ -589,11 +590,23 @@ int GLOB_SBD_ioctl(struct block_device * + return -ENOTTY; + } + ++int GLOB_SBD_unlocked_ioctl(struct block_device *bdev, fmode_t mode, ++ unsigned int cmd, unsigned long arg) ++{ ++ int ret; ++ ++ lock_kernel(); ++ ret = GLOB_SBD_ioctl(bdev, mode, cmd, arg); ++ unlock_kernel(); ++ ++ return ret; ++} ++ + static struct block_device_operations GLOB_SBD_ops = { + .owner = THIS_MODULE, + .open = GLOB_SBD_open, + .release = GLOB_SBD_release, +- .locked_ioctl = GLOB_SBD_ioctl, ++ .ioctl = GLOB_SBD_unlocked_ioctl, + .getgeo = GLOB_SBD_getgeo, + }; + diff --git a/staging.current/staging-spectra-initializa-lblk-variable.patch b/staging.current/staging-spectra-initializa-lblk-variable.patch new file mode 100644 index 00000000000000..5c73c891d9ffcd --- /dev/null +++ b/staging.current/staging-spectra-initializa-lblk-variable.patch @@ -0,0 +1,30 @@ +From martinez.javier@gmail.com Thu Aug 12 13:11:54 2010 +Subject: Staging: spectra: initializa lblk variable +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Sat, 17 Jul 2010 16:45:27 -0400 +Message-ID: <1279399527.14049.24.camel@lenovo> + +Fix a compile warning by initializaing lblk. Since FTL_Get_Block_Index() +returns BAD_BLOCK if it doesn't find the logical block number, lblk +number is initizalized to BAD_BLOCK. + + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/flash.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/staging/spectra/flash.c ++++ b/drivers/staging/spectra/flash.c +@@ -1698,7 +1698,7 @@ static int get_l2_cache_blks(void) + static int erase_l2_cache_blocks(void) + { + int i, ret = PASS; +- u32 pblk, lblk; ++ u32 pblk, lblk = BAD_BLOCK; + u64 addr; + u32 *pbt = (u32 *)g_pBlockTable; + diff --git a/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch b/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch new file mode 100644 index 00000000000000..f4e1ccca1a536d --- /dev/null +++ b/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch @@ -0,0 +1,30 @@ +From martinez.javier@gmail.com Thu Aug 12 13:10:43 2010 +Subject: Staging: spectra: remove duplicate GLOB_VERSION definition +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Sat, 17 Jul 2010 16:39:54 -0400 +Message-ID: <1279399194.14049.18.camel@lenovo> + +This is the first patch of a patchset that removes all compilations +warnings in staging/spectra. + +These patches are a delta from a previous patchset and it assumes that +these three patches all already applied: + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/ffsport.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/staging/spectra/ffsport.c ++++ b/drivers/staging/spectra/ffsport.c +@@ -114,7 +114,6 @@ u64 GLOB_u64_Remainder(u64 addr, u32 div + + #define GLOB_SBD_NAME "nd" + #define GLOB_SBD_IRQ_NUM (29) +-#define GLOB_VERSION "driver version 20091110" + + #define GLOB_SBD_IOCTL_GC (0x7701) + #define GLOB_SBD_IOCTL_WL (0x7702) diff --git a/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch b/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch new file mode 100644 index 00000000000000..8c7c8ad27f7f9c --- /dev/null +++ b/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch @@ -0,0 +1,45 @@ +From martinez.javier@gmail.com Thu Aug 12 13:07:55 2010 +Subject: Staging: spectra: removes q->prepare_flush_fn, fix build breakage +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Fri, 09 Jul 2010 23:25:12 -0400 +Message-ID: <1278732312.1725.17.camel@lenovo> + +This patch is the first one of a patchset that allows +stagin/spectra driver to compile in linux-next. + +blk_queue_ordered doesn't receive a prepare flush function anymore + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/ffsport.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +--- a/drivers/staging/spectra/ffsport.c ++++ b/drivers/staging/spectra/ffsport.c +@@ -272,13 +272,6 @@ static int get_res_blk_num_os(void) + return res_blks; + } + +-static void SBD_prepare_flush(struct request_queue *q, struct request *rq) +-{ +- rq->cmd_type = REQ_TYPE_LINUX_BLOCK; +- /* rq->timeout = 5 * HZ; */ +- rq->cmd[0] = REQ_LB_OP_FLUSH; +-} +- + /* Transfer a full request. */ + static int do_transfer(struct spectra_nand_dev *tr, struct request *req) + { +@@ -650,8 +643,7 @@ static int SBD_setup_device(struct spect + /* Here we force report 512 byte hardware sector size to Kernel */ + blk_queue_logical_block_size(dev->queue, 512); + +- blk_queue_ordered(dev->queue, QUEUE_ORDERED_DRAIN_FLUSH, +- SBD_prepare_flush); ++ blk_queue_ordered(dev->queue, QUEUE_ORDERED_DRAIN_FLUSH); + + dev->thread = kthread_run(spectra_trans_thread, dev, "nand_thd"); + if (IS_ERR(dev->thread)) { diff --git a/staging.current/staging-spectra-removes-unused-functions.patch b/staging.current/staging-spectra-removes-unused-functions.patch new file mode 100644 index 00000000000000..d24607a7e06eba --- /dev/null +++ b/staging.current/staging-spectra-removes-unused-functions.patch @@ -0,0 +1,477 @@ +From martinez.javier@gmail.com Thu Aug 12 13:12:12 2010 +Subject: Staging: spectra: removes unused functions +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Sat, 17 Jul 2010 16:46:28 -0400 +Message-ID: <1279399588.14049.25.camel@lenovo> + +Fix compilation warning removing unused functions. + + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/flash.c | 416 ---------------------------------------- + 1 file changed, 416 deletions(-) + +--- a/drivers/staging/spectra/flash.c ++++ b/drivers/staging/spectra/flash.c +@@ -61,7 +61,6 @@ static void FTL_Cache_Read_Page(u8 *pDat + static void FTL_Cache_Write_Page(u8 *pData, u64 dwPageAddr, + u8 cache_blk, u16 flag); + static int FTL_Cache_Write(void); +-static int FTL_Cache_Write_Back(u8 *pData, u64 blk_addr); + static void FTL_Calculate_LRU(void); + static u32 FTL_Get_Block_Index(u32 wBlockNum); + +@@ -86,8 +85,6 @@ static u32 FTL_Replace_MWBlock(void); + static int FTL_Replace_Block(u64 blk_addr); + static int FTL_Adjust_Relative_Erase_Count(u32 Index_of_MAX); + +-static int FTL_Flash_Error_Handle(u8 *pData, u64 old_page_addr, u64 blk_addr); +- + struct device_info_tag DeviceInfo; + struct flash_cache_tag Cache; + static struct spectra_l2_cache_info cache_l2; +@@ -1538,79 +1535,6 @@ static int FTL_Cache_Write_All(u8 *pData + } + + /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +-* Function: FTL_Cache_Update_Block +-* Inputs: pointer to buffer,page address,block address +-* Outputs: PASS=0 / FAIL=1 +-* Description: It updates the cache +-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +-static int FTL_Cache_Update_Block(u8 *pData, +- u64 old_page_addr, u64 blk_addr) +-{ +- int i, j; +- u8 *buf = pData; +- int wResult = PASS; +- int wFoundInCache; +- u64 page_addr; +- u64 addr; +- u64 old_blk_addr; +- u16 page_offset; +- +- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n", +- __FILE__, __LINE__, __func__); +- +- old_blk_addr = (u64)(old_page_addr >> +- DeviceInfo.nBitsInBlockDataSize) * DeviceInfo.wBlockDataSize; +- page_offset = (u16)(GLOB_u64_Remainder(old_page_addr, 2) >> +- DeviceInfo.nBitsInPageDataSize); +- +- for (i = 0; i < DeviceInfo.wPagesPerBlock; i += Cache.pages_per_item) { +- page_addr = old_blk_addr + i * DeviceInfo.wPageDataSize; +- if (i != page_offset) { +- wFoundInCache = FAIL; +- for (j = 0; j < CACHE_ITEM_NUM; j++) { +- addr = Cache.array[j].address; +- addr = FTL_Get_Physical_Block_Addr(addr) + +- GLOB_u64_Remainder(addr, 2); +- if ((addr >= page_addr) && addr < +- (page_addr + Cache.cache_item_size)) { +- wFoundInCache = PASS; +- buf = Cache.array[j].buf; +- Cache.array[j].changed = SET; +-#if CMD_DMA +-#if RESTORE_CACHE_ON_CDMA_CHAIN_FAILURE +- int_cache[ftl_cmd_cnt].item = j; +- int_cache[ftl_cmd_cnt].cache.address = +- Cache.array[j].address; +- int_cache[ftl_cmd_cnt].cache.changed = +- Cache.array[j].changed; +-#endif +-#endif +- break; +- } +- } +- if (FAIL == wFoundInCache) { +- if (ERR == FTL_Cache_Read_All(g_pTempBuf, +- page_addr)) { +- wResult = FAIL; +- break; +- } +- buf = g_pTempBuf; +- } +- } else { +- buf = pData; +- } +- +- if (FAIL == FTL_Cache_Write_All(buf, +- blk_addr + (page_addr - old_blk_addr))) { +- wResult = FAIL; +- break; +- } +- } +- +- return wResult; +-} +- +-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + * Function: FTL_Copy_Block + * Inputs: source block address + * Destination block address +@@ -2004,87 +1928,6 @@ static int search_l2_cache(u8 *buf, u64 + return ret; + } + +-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +-* Function: FTL_Cache_Write_Back +-* Inputs: pointer to data cached in sys memory +-* address of free block in flash +-* Outputs: PASS=0 / FAIL=1 +-* Description: writes all the pages of Cache Block to flash +-* +-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +-static int FTL_Cache_Write_Back(u8 *pData, u64 blk_addr) +-{ +- int i, j, iErase; +- u64 old_page_addr, addr, phy_addr; +- u32 *pbt = (u32 *)g_pBlockTable; +- u32 lba; +- +- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n", +- __FILE__, __LINE__, __func__); +- +- old_page_addr = FTL_Get_Physical_Block_Addr(blk_addr) + +- GLOB_u64_Remainder(blk_addr, 2); +- +- iErase = (FAIL == FTL_Replace_Block(blk_addr)) ? PASS : FAIL; +- +- pbt[BLK_FROM_ADDR(blk_addr)] &= (~SPARE_BLOCK); +- +-#if CMD_DMA +- p_BTableChangesDelta = (struct BTableChangesDelta *)g_pBTDelta_Free; +- g_pBTDelta_Free += sizeof(struct BTableChangesDelta); +- +- p_BTableChangesDelta->ftl_cmd_cnt = ftl_cmd_cnt; +- p_BTableChangesDelta->BT_Index = (u32)(blk_addr >> +- DeviceInfo.nBitsInBlockDataSize); +- p_BTableChangesDelta->BT_Entry_Value = +- pbt[(u32)(blk_addr >> DeviceInfo.nBitsInBlockDataSize)]; +- p_BTableChangesDelta->ValidFields = 0x0C; +-#endif +- +- if (IN_PROGRESS_BLOCK_TABLE != g_cBlockTableStatus) { +- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE; +- FTL_Write_IN_Progress_Block_Table_Page(); +- } +- +- for (i = 0; i < RETRY_TIMES; i++) { +- if (PASS == iErase) { +- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr); +- if (FAIL == GLOB_FTL_Block_Erase(phy_addr)) { +- lba = BLK_FROM_ADDR(blk_addr); +- MARK_BLOCK_AS_BAD(pbt[lba]); +- i = RETRY_TIMES; +- break; +- } +- } +- +- for (j = 0; j < CACHE_ITEM_NUM; j++) { +- addr = Cache.array[j].address; +- if ((addr <= blk_addr) && +- ((addr + Cache.cache_item_size) > blk_addr)) +- cache_block_to_write = j; +- } +- +- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr); +- if (PASS == FTL_Cache_Update_Block(pData, +- old_page_addr, phy_addr)) { +- cache_block_to_write = UNHIT_CACHE_ITEM; +- break; +- } else { +- iErase = PASS; +- } +- } +- +- if (i >= RETRY_TIMES) { +- if (ERR == FTL_Flash_Error_Handle(pData, +- old_page_addr, blk_addr)) +- return ERR; +- else +- return FAIL; +- } +- +- return PASS; +-} +- + /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + * Function: FTL_Cache_Write_Page + * Inputs: Pointer to buffer, page address, cache block number +@@ -2370,159 +2213,6 @@ static int FTL_Write_Block_Table(int wFo + return 1; + } + +-/****************************************************************** +-* Function: GLOB_FTL_Flash_Format +-* Inputs: none +-* Outputs: PASS +-* Description: The block table stores bad block info, including MDF+ +-* blocks gone bad over the ages. Therefore, if we have a +-* block table in place, then use it to scan for bad blocks +-* If not, then scan for MDF. +-* Now, a block table will only be found if spectra was already +-* being used. For a fresh flash, we'll go thru scanning for +-* MDF. If spectra was being used, then there is a chance that +-* the MDF has been corrupted. Spectra avoids writing to the +-* first 2 bytes of the spare area to all pages in a block. This +-* covers all known flash devices. However, since flash +-* manufacturers have no standard of where the MDF is stored, +-* this cannot guarantee that the MDF is protected for future +-* devices too. The initial scanning for the block table assures +-* this. It is ok even if the block table is outdated, as all +-* we're looking for are bad block markers. +-* Use this when mounting a file system or starting a +-* new flash. +-* +-*********************************************************************/ +-static int FTL_Format_Flash(u8 valid_block_table) +-{ +- u32 i, j; +- u32 *pbt = (u32 *)g_pBlockTable; +- u32 tempNode; +- int ret; +- +-#if CMD_DMA +- u32 *pbtStartingCopy = (u32 *)g_pBTStartingCopy; +- if (ftl_cmd_cnt) +- return FAIL; +-#endif +- +- if (FAIL == FTL_Check_Block_Table(FAIL)) +- valid_block_table = 0; +- +- if (valid_block_table) { +- u8 switched = 1; +- u32 block, k; +- +- k = DeviceInfo.wSpectraStartBlock; +- while (switched && (k < DeviceInfo.wSpectraEndBlock)) { +- switched = 0; +- k++; +- for (j = DeviceInfo.wSpectraStartBlock, i = 0; +- j <= DeviceInfo.wSpectraEndBlock; +- j++, i++) { +- block = (pbt[i] & ~BAD_BLOCK) - +- DeviceInfo.wSpectraStartBlock; +- if (block != i) { +- switched = 1; +- tempNode = pbt[i]; +- pbt[i] = pbt[block]; +- pbt[block] = tempNode; +- } +- } +- } +- if ((k == DeviceInfo.wSpectraEndBlock) && switched) +- valid_block_table = 0; +- } +- +- if (!valid_block_table) { +- memset(g_pBlockTable, 0, +- DeviceInfo.wDataBlockNum * sizeof(u32)); +- memset(g_pWearCounter, 0, +- DeviceInfo.wDataBlockNum * sizeof(u8)); +- if (DeviceInfo.MLCDevice) +- memset(g_pReadCounter, 0, +- DeviceInfo.wDataBlockNum * sizeof(u16)); +-#if CMD_DMA +- memset(g_pBTStartingCopy, 0, +- DeviceInfo.wDataBlockNum * sizeof(u32)); +- memset(g_pWearCounterCopy, 0, +- DeviceInfo.wDataBlockNum * sizeof(u8)); +- if (DeviceInfo.MLCDevice) +- memset(g_pReadCounterCopy, 0, +- DeviceInfo.wDataBlockNum * sizeof(u16)); +-#endif +- for (j = DeviceInfo.wSpectraStartBlock, i = 0; +- j <= DeviceInfo.wSpectraEndBlock; +- j++, i++) { +- if (GLOB_LLD_Get_Bad_Block((u32)j)) +- pbt[i] = (u32)(BAD_BLOCK | j); +- } +- } +- +- nand_dbg_print(NAND_DBG_WARN, "Erasing all blocks in the NAND\n"); +- +- for (j = DeviceInfo.wSpectraStartBlock, i = 0; +- j <= DeviceInfo.wSpectraEndBlock; +- j++, i++) { +- if ((pbt[i] & BAD_BLOCK) != BAD_BLOCK) { +- ret = GLOB_LLD_Erase_Block(j); +- if (FAIL == ret) { +- pbt[i] = (u32)(j); +- MARK_BLOCK_AS_BAD(pbt[i]); +- nand_dbg_print(NAND_DBG_WARN, +- "NAND Program fail in %s, Line %d, " +- "Function: %s, new Bad Block %d generated!\n", +- __FILE__, __LINE__, __func__, (int)j); +- } else { +- pbt[i] = (u32)(SPARE_BLOCK | j); +- } +- } +-#if CMD_DMA +- pbtStartingCopy[i] = pbt[i]; +-#endif +- } +- +- g_wBlockTableOffset = 0; +- for (i = 0; (i <= (DeviceInfo.wSpectraEndBlock - +- DeviceInfo.wSpectraStartBlock)) +- && ((pbt[i] & BAD_BLOCK) == BAD_BLOCK); i++) +- ; +- if (i > (DeviceInfo.wSpectraEndBlock - DeviceInfo.wSpectraStartBlock)) { +- printk(KERN_ERR "All blocks bad!\n"); +- return FAIL; +- } else { +- g_wBlockTableIndex = pbt[i] & ~BAD_BLOCK; +- if (i != BLOCK_TABLE_INDEX) { +- tempNode = pbt[i]; +- pbt[i] = pbt[BLOCK_TABLE_INDEX]; +- pbt[BLOCK_TABLE_INDEX] = tempNode; +- } +- } +- pbt[BLOCK_TABLE_INDEX] &= (~SPARE_BLOCK); +- +-#if CMD_DMA +- pbtStartingCopy[BLOCK_TABLE_INDEX] &= (~SPARE_BLOCK); +-#endif +- +- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE; +- memset(g_pBTBlocks, 0xFF, +- (1 + LAST_BT_ID - FIRST_BT_ID) * sizeof(u32)); +- g_pBTBlocks[FIRST_BT_ID-FIRST_BT_ID] = g_wBlockTableIndex; +- FTL_Write_Block_Table(FAIL); +- +- for (i = 0; i < CACHE_ITEM_NUM; i++) { +- Cache.array[i].address = NAND_CACHE_INIT_ADDR; +- Cache.array[i].use_cnt = 0; +- Cache.array[i].changed = CLEAR; +- } +- +-#if (RESTORE_CACHE_ON_CDMA_CHAIN_FAILURE && CMD_DMA) +- memcpy((void *)&cache_start_copy, (void *)&Cache, +- sizeof(struct flash_cache_tag)); +-#endif +- return PASS; +-} +- + static int force_format_nand(void) + { + u32 i; +@@ -3030,112 +2720,6 @@ static int FTL_Read_Block_Table(void) + + return wResult; + } +- +- +-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +-* Function: FTL_Flash_Error_Handle +-* Inputs: Pointer to data +-* Page address +-* Block address +-* Outputs: PASS=0 / FAIL=1 +-* Description: It handles any error occured during Spectra operation +-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +-static int FTL_Flash_Error_Handle(u8 *pData, u64 old_page_addr, +- u64 blk_addr) +-{ +- u32 i; +- int j; +- u32 tmp_node, blk_node = BLK_FROM_ADDR(blk_addr); +- u64 phy_addr; +- int wErase = FAIL; +- int wResult = FAIL; +- u32 *pbt = (u32 *)g_pBlockTable; +- +- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n", +- __FILE__, __LINE__, __func__); +- +- if (ERR == GLOB_FTL_Garbage_Collection()) +- return ERR; +- +- do { +- for (i = DeviceInfo.wSpectraEndBlock - +- DeviceInfo.wSpectraStartBlock; +- i > 0; i--) { +- if (IS_SPARE_BLOCK(i)) { +- tmp_node = (u32)(BAD_BLOCK | +- pbt[blk_node]); +- pbt[blk_node] = (u32)(pbt[i] & +- (~SPARE_BLOCK)); +- pbt[i] = tmp_node; +-#if CMD_DMA +- p_BTableChangesDelta = +- (struct BTableChangesDelta *) +- g_pBTDelta_Free; +- g_pBTDelta_Free += +- sizeof(struct BTableChangesDelta); +- +- p_BTableChangesDelta->ftl_cmd_cnt = +- ftl_cmd_cnt; +- p_BTableChangesDelta->BT_Index = +- blk_node; +- p_BTableChangesDelta->BT_Entry_Value = +- pbt[blk_node]; +- p_BTableChangesDelta->ValidFields = 0x0C; +- +- p_BTableChangesDelta = +- (struct BTableChangesDelta *) +- g_pBTDelta_Free; +- g_pBTDelta_Free += +- sizeof(struct BTableChangesDelta); +- +- p_BTableChangesDelta->ftl_cmd_cnt = +- ftl_cmd_cnt; +- p_BTableChangesDelta->BT_Index = i; +- p_BTableChangesDelta->BT_Entry_Value = pbt[i]; +- p_BTableChangesDelta->ValidFields = 0x0C; +-#endif +- wResult = PASS; +- break; +- } +- } +- +- if (FAIL == wResult) { +- if (FAIL == GLOB_FTL_Garbage_Collection()) +- break; +- else +- continue; +- } +- +- if (IN_PROGRESS_BLOCK_TABLE != g_cBlockTableStatus) { +- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE; +- FTL_Write_IN_Progress_Block_Table_Page(); +- } +- +- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr); +- +- for (j = 0; j < RETRY_TIMES; j++) { +- if (PASS == wErase) { +- if (FAIL == GLOB_FTL_Block_Erase(phy_addr)) { +- MARK_BLOCK_AS_BAD(pbt[blk_node]); +- break; +- } +- } +- if (PASS == FTL_Cache_Update_Block(pData, +- old_page_addr, +- phy_addr)) { +- wResult = PASS; +- break; +- } else { +- wResult = FAIL; +- wErase = PASS; +- } +- } +- } while (FAIL == wResult); +- +- FTL_Write_Block_Table(FAIL); +- +- return wResult; +-} + + /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + * Function: FTL_Get_Page_Num diff --git a/staging.current/staging-spectra-removes-unused-variable.patch b/staging.current/staging-spectra-removes-unused-variable.patch new file mode 100644 index 00000000000000..2210436191700d --- /dev/null +++ b/staging.current/staging-spectra-removes-unused-variable.patch @@ -0,0 +1,27 @@ +From martinez.javier@gmail.com Thu Aug 12 13:11:36 2010 +Subject: Staging: spectra: removes unused variable +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Sat, 17 Jul 2010 16:42:19 -0400 +Message-ID: <1279399339.14049.21.camel@lenovo> + +Fix a compile warning by removing an unused variable int i. + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/flash.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/staging/spectra/flash.c ++++ b/drivers/staging/spectra/flash.c +@@ -775,7 +775,7 @@ static void dump_cache_l2_table(void) + { + struct list_head *p; + struct spectra_l2_cache_list *pnd; +- int n, i; ++ int n; + + n = 0; + list_for_each(p, &cache_l2.table.list) { diff --git a/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch b/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch new file mode 100644 index 00000000000000..1438655c659a30 --- /dev/null +++ b/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch @@ -0,0 +1,29 @@ +From martinez.javier@gmail.com Thu Aug 12 13:05:33 2010 +Subject: Staging: use new REQ_FLUSH flag, fix build breakage +From: Javier Martinez Canillas <martinez.javier@gmail.com> +To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org +Date: Fri, 09 Jul 2010 23:28:13 -0400 +Message-ID: <1278732493.1725.19.camel@lenovo> + +REQ_TYPE_LINUX_BLOCK and REQ_LB_OP_FLUSH doesn't exist anymore. Using +the new REQ_FLUSH flag instead + +Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/spectra/ffsport.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/staging/spectra/ffsport.c ++++ b/drivers/staging/spectra/ffsport.c +@@ -289,8 +289,7 @@ static int do_transfer(struct spectra_na + IdentifyDeviceData.PagesPerBlock * + res_blks_os; + +- if (req->cmd_type == REQ_TYPE_LINUX_BLOCK && +- req->cmd[0] == REQ_LB_OP_FLUSH) { ++ if (req->cmd_type & REQ_FLUSH) { + if (force_flush_cache()) /* Fail to flush cache */ + return -EIO; + else diff --git a/tty.current/serial-print-early-console-device-address-in-hex.patch b/tty.current/serial-print-early-console-device-address-in-hex.patch new file mode 100644 index 00000000000000..eeaaf2d1933c96 --- /dev/null +++ b/tty.current/serial-print-early-console-device-address-in-hex.patch @@ -0,0 +1,40 @@ +From tony.luck@intel.com Thu Aug 12 13:41:16 2010 +From: "Luck, Tony" <tony.luck@intel.com> +To: "Greg KH" <gregkh@suse.de> +Cc: linux-kernel@vger.kernel.org, + "Samium Gromoff" <_deepfire@feelingofgreen.ru>, + "Randy Dunlap" <randy.dunlap@oracle.com>, + "KOSAKI Motohiro" <kosaki.motohiro@jp.fujitsu.com>, + "Andrew Morton" <akpm@linux-foundation.org> +Subject: serial: print early console device address in hex +Date: Thu, 12 Aug 2010 12:16:43 -0700 +Message-Id: <4c64489b11469c2a9e@agluck-desktop.sc.intel.com> + +Device addresses are usually printed in hex. + +Signed-off-by: Tony Luck <tony.luck@intel.com> +Cc: Andrew Morton <akpm@linux-foundation.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/serial/8250_early.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/serial/8250_early.c ++++ b/drivers/serial/8250_early.c +@@ -203,13 +203,13 @@ static int __init parse_options(struct e + + if (mmio || mmio32) + printk(KERN_INFO +- "Early serial console at MMIO%s 0x%llu (options '%s')\n", ++ "Early serial console at MMIO%s 0x%llx (options '%s')\n", + mmio32 ? "32" : "", + (unsigned long long)port->mapbase, + device->options); + else + printk(KERN_INFO +- "Early serial console at I/O port 0x%lu (options '%s')\n", ++ "Early serial console at I/O port 0x%lx (options '%s')\n", + port->iobase, + device->options); + diff --git a/usb.current/usb-add-device-ids-for-igotu-to-navman.patch b/usb.current/usb-add-device-ids-for-igotu-to-navman.patch new file mode 100644 index 00000000000000..81840fa98092de --- /dev/null +++ b/usb.current/usb-add-device-ids-for-igotu-to-navman.patch @@ -0,0 +1,43 @@ +From ross@linux.intel.com Thu Aug 12 13:46:35 2010 +Subject: USB: add device IDs for igotu to navman +From: Ross Burton <ross@linux.intel.com> +To: linux-kernel@vger.kernel.org +Cc: gregkh@suse.de +Date: Fri, 06 Aug 2010 16:36:39 +0100 +Message-ID: <1281108999.3781.50.camel@flashheart.burtonini.com> + + +I recently bought a i-gotU USB GPS, and whilst hunting around for linux +support discovered this post by you back in 2009: + +http://kerneltrap.org/mailarchive/linux-usb/2009/3/12/5148644 + +>Try the navman driver instead. You can either add the device id to the +> driver and rebuild it, or do this before you plug the device in: +> modprobe navman +> echo -n "0x0df7 0x0900" > /sys/bus/usb-serial/drivers/navman/new_id +> +> and then plug your device in and see if that works. + +I can confirm that the navman driver works with the right device IDs on +my i-gotU GT-600, which has the same device IDs. Attached is a patch +adding the IDs. + +From: Ross Burton <ross@linux.intel.com> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/navman.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/navman.c ++++ b/drivers/usb/serial/navman.c +@@ -25,6 +25,7 @@ static int debug; + + static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x0a99, 0x0001) }, /* Talon Technology device */ ++ { USB_DEVICE(0x0df7, 0x0900) }, /* Mobile Action i-gotU */ + { }, + }; + MODULE_DEVICE_TABLE(usb, id_table); diff --git a/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch b/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch new file mode 100644 index 00000000000000..82c3a63c557a94 --- /dev/null +++ b/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch @@ -0,0 +1,49 @@ +From vapier@gentoo.org Thu Aug 12 13:45:44 2010 +From: Mike Frysinger <vapier@gentoo.org> +To: linux-usb@vger.kernel.org, Greg Kroah-Hartman <gregkh@suse.de> +Cc: uclinux-dist-devel@blackfin.uclinux.org, + Michael Hennerich <michael.hennerich@analog.com> +Subject: USB: isp1760: use a write barrier to ensure proper ndelay timing +Date: Thu, 5 Aug 2010 17:53:57 -0400 +Message-Id: <1281045237-21967-1-git-send-email-vapier@gentoo.org> + +From: Michael Hennerich <michael.hennerich@analog.com> + +The ISP1760 has some timing requirements where it has to delay a short +period after a write to a register has started. However, this delay is +from the time the write hits the USB chip (the ISP1760), not from the +time where the processor started processing the write. So on a quick +enough processor, it is sometimes possible for the write to not hit the +device before we start delaying, and we then violate the part's timing +requirements, so things stop working. + +To avoid all this, insert a write barrier after the register write and +before the timing delay/register read so we can guarantee we only start +counting time after the write has hit the device. + +Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> +Signed-off-by: Mike Frysinger <vapier@gentoo.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/isp1760-hcd.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/host/isp1760-hcd.c ++++ b/drivers/usb/host/isp1760-hcd.c +@@ -829,6 +829,7 @@ static void enqueue_an_ATL_packet(struct + * almost immediately. With ISP1761, this register requires a delay of + * 195ns between a write and subsequent read (see section 15.1.1.3). + */ ++ mmiowb(); + ndelay(195); + skip_map = isp1760_readl(hcd->regs + HC_ATL_PTD_SKIPMAP_REG); + +@@ -870,6 +871,7 @@ static void enqueue_an_INT_packet(struct + * almost immediately. With ISP1761, this register requires a delay of + * 195ns between a write and subsequent read (see section 15.1.1.3). + */ ++ mmiowb(); + ndelay(195); + skip_map = isp1760_readl(hcd->regs + HC_INT_PTD_SKIPMAP_REG); + diff --git a/usb.current/usb-option-add-celot-ct-650.patch b/usb.current/usb-option-add-celot-ct-650.patch new file mode 100644 index 00000000000000..a8fab4b979e353 --- /dev/null +++ b/usb.current/usb-option-add-celot-ct-650.patch @@ -0,0 +1,43 @@ +From mjt@tls.msk.ru Thu Aug 12 13:43:49 2010 +Message-ID: <4C5C20F1.6060704@msgid.tls.msk.ru> +Date: Fri, 06 Aug 2010 18:49:21 +0400 +From: Michael Tokarev <mjt@tls.msk.ru> +To: Greg KH <greg@kroah.com> +CC: Oliver Neukum <oneukum@suse.de> +Subject: USB: option: add Celot CT-650 + + +Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + +--- + drivers/usb/serial/option.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -365,6 +365,10 @@ static void option_instat_callback(struc + #define OLIVETTI_VENDOR_ID 0x0b3c + #define OLIVETTI_PRODUCT_OLICARD100 0xc000 + ++/* Celot products */ ++#define CELOT_VENDOR_ID 0x211f ++#define CELOT_PRODUCT_CT680M 0x6801 ++ + /* some devices interfaces need special handling due to a number of reasons */ + enum option_blacklist_reason { + OPTION_BLACKLIST_NONE = 0, +@@ -887,10 +891,9 @@ static const struct usb_device_id option + { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) }, + { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)}, + { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)}, +- + { USB_DEVICE(CINTERION_VENDOR_ID, 0x0047) }, +- + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, ++ { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ + { } /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, option_ids); diff --git a/usb.current/usb-pl2303-new-vendor-and-product-id.patch b/usb.current/usb-pl2303-new-vendor-and-product-id.patch new file mode 100644 index 00000000000000..1441d24001f728 --- /dev/null +++ b/usb.current/usb-pl2303-new-vendor-and-product-id.patch @@ -0,0 +1,50 @@ +From linux-usb-owner@vger.kernel.org Thu Aug 12 13:53:19 2010 +From: Jef Driesen <jefdriesen@telenet.be> +To: Greg Kroah-Hartman <gregkh@suse.de>, + Johan Hovold <jhovold@gmail.com>, + Frank Schaefer <schaefer.frank@gmx.net>, + Alan Cox <alan@linux.intel.com>, + Pawel Ludwikow <pludwiko@rab.ict.pwr.wroc.pl>, + Manuel Jander <manuel.jander@gmail.com> +Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, + Jef Driesen <jefdriesen@telenet.be> +Subject: USB: pl2303: New vendor and product id +Date: Mon, 9 Aug 2010 15:55:32 +0200 +Message-Id: <1281362132-9106-1-git-send-email-jefdriesen@telenet.be> + +Add support for the Zeagle N2iTiON3 dive computer interface. Since +Zeagle devices are actually manufactured by Seiko, this patch will +support other Seiko based models as well. + +Signed-off-by: Jef Driesen <jefdriesen@telenet.be> +Cc: stable <stable@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/pl2303.c | 1 + + drivers/usb/serial/pl2303.h | 4 ++++ + 2 files changed, 5 insertions(+) + +--- a/drivers/usb/serial/pl2303.c ++++ b/drivers/usb/serial/pl2303.c +@@ -86,6 +86,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, + { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, + { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, ++ { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, + { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, + { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, + { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, +--- a/drivers/usb/serial/pl2303.h ++++ b/drivers/usb/serial/pl2303.h +@@ -128,6 +128,10 @@ + #define CRESSI_VENDOR_ID 0x04b8 + #define CRESSI_EDY_PRODUCT_ID 0x0521 + ++/* Zeagle dive computer interface */ ++#define ZEAGLE_VENDOR_ID 0x04b8 ++#define ZEAGLE_N2ITION3_PRODUCT_ID 0x0522 ++ + /* Sony, USB data cable for CMD-Jxx mobile phones */ + #define SONY_VENDOR_ID 0x054c + #define SONY_QN3USB_PRODUCT_ID 0x0437 diff --git a/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch b/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch new file mode 100644 index 00000000000000..3e5fed200af458 --- /dev/null +++ b/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch @@ -0,0 +1,117 @@ +From tom.leiming@gmail.com Thu Aug 12 13:50:12 2010 +From: tom.leiming@gmail.com +To: greg@kroah.com, + stern@rowland.harvard.edu +Cc: linux-usb@vger.kernel.org, Ming Lei <tom.leiming@gmail.com>, Johan Hovold <jhovold@gmail.com>, Andi Kleen <ak@linux.intel.com> +Subject: USB: serial: fix leak of usb serial module refrence count +Date: Sat, 7 Aug 2010 16:20:35 +0800 +Message-Id: <1281169235-4883-1-git-send-email-tom.leiming@gmail.com> + +From: Ming Lei <tom.leiming@gmail.com> + +The patch with title below makes reference count of usb serial module +always more than one after driver is bound. + + USB-BKL: Remove BKL use for usb serial driver probing + +In fact, the patch above only replaces lock_kernel() with try_module_get() +, and does not use module_put() to do what unlock_kernel() did, so casue leak +of reference count of usb serial module and the module can not be unloaded +after serial driver is bound with device. + +This patch fixes the issue, also simplifies such things: + -only call try_module_get() once in the entry of usb_serial_probe() + -only call module_put() once in the exit of usb_serial_probe + +Signed-off-by: Ming Lei <tom.leiming@gmail.com> +Cc: Johan Hovold <jhovold@gmail.com> +Cc: Andi Kleen <ak@linux.intel.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/usb-serial.c | 23 +++++++---------------- + 1 file changed, 7 insertions(+), 16 deletions(-) + +--- a/drivers/usb/serial/usb-serial.c ++++ b/drivers/usb/serial/usb-serial.c +@@ -736,6 +736,7 @@ int usb_serial_probe(struct usb_interfac + + serial = create_serial(dev, interface, type); + if (!serial) { ++ module_put(type->driver.owner); + dev_err(&interface->dev, "%s - out of memory\n", __func__); + return -ENOMEM; + } +@@ -746,11 +747,11 @@ int usb_serial_probe(struct usb_interfac + + id = get_iface_id(type, interface); + retval = type->probe(serial, id); +- module_put(type->driver.owner); + + if (retval) { + dbg("sub driver rejected device"); + kfree(serial); ++ module_put(type->driver.owner); + return retval; + } + } +@@ -822,6 +823,7 @@ int usb_serial_probe(struct usb_interfac + if (num_bulk_in == 0 || num_bulk_out == 0) { + dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n"); + kfree(serial); ++ module_put(type->driver.owner); + return -ENODEV; + } + } +@@ -835,22 +837,15 @@ int usb_serial_probe(struct usb_interfac + dev_err(&interface->dev, + "Generic device with no bulk out, not allowed.\n"); + kfree(serial); ++ module_put(type->driver.owner); + return -EIO; + } + } + #endif + if (!num_ports) { + /* if this device type has a calc_num_ports function, call it */ +- if (type->calc_num_ports) { +- if (!try_module_get(type->driver.owner)) { +- dev_err(&interface->dev, +- "module get failed, exiting\n"); +- kfree(serial); +- return -EIO; +- } ++ if (type->calc_num_ports) + num_ports = type->calc_num_ports(serial); +- module_put(type->driver.owner); +- } + if (!num_ports) + num_ports = type->num_ports; + } +@@ -1039,13 +1034,7 @@ int usb_serial_probe(struct usb_interfac + + /* if this device type has an attach function, call it */ + if (type->attach) { +- if (!try_module_get(type->driver.owner)) { +- dev_err(&interface->dev, +- "module get failed, exiting\n"); +- goto probe_error; +- } + retval = type->attach(serial); +- module_put(type->driver.owner); + if (retval < 0) + goto probe_error; + serial->attached = 1; +@@ -1088,10 +1077,12 @@ int usb_serial_probe(struct usb_interfac + exit: + /* success */ + usb_set_intfdata(interface, serial); ++ module_put(type->driver.owner); + return 0; + + probe_error: + usb_serial_put(serial); ++ module_put(type->driver.owner); + return -EIO; + } + EXPORT_SYMBOL_GPL(usb_serial_probe); diff --git a/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch b/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch new file mode 100644 index 00000000000000..042018b1a81f88 --- /dev/null +++ b/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch @@ -0,0 +1,37 @@ +From linux-usb-owner@vger.kernel.org Thu Aug 12 13:42:22 2010 +Date: Thu, 12 Aug 2010 09:59:58 +0200 +From: Dan Carpenter <error27@gmail.com> +To: David Brownell <dbrownell@users.sourceforge.net> +Cc: Greg Kroah-Hartman <gregkh@suse.de>, + Laurent Pinchart <laurent.pinchart@ideasonboard.com>, + Mauro Carvalho Chehab <mchehab@redhat.com>, + linux-usb@vger.kernel.org, kernel-janitors@vger.kernel.org +Subject: USB: uvc_v4l2: cleanup test for end of loop +Message-ID: <20100812075958.GP645@bicker> +Content-Disposition: inline + +We're trying to test for the the end of the loop here. "format" is +never NULL. We don't know what "format->fcc" is because we're past the +end of the loop and I think "fmt->fmt.pix.pixelformat" comes from the +user so we don't know what that is either. It works, but it's cleaner +to just test to see if (i == ARRAY_SIZE(uvc_formats). + +Signed-off-by: Dan Carpenter <error27@gmail.com> +Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/uvc_v4l2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/gadget/uvc_v4l2.c ++++ b/drivers/usb/gadget/uvc_v4l2.c +@@ -94,7 +94,7 @@ uvc_v4l2_set_format(struct uvc_video *vi + break; + } + +- if (format == NULL || format->fcc != fmt->fmt.pix.pixelformat) { ++ if (i == ARRAY_SIZE(uvc_formats)) { + printk(KERN_INFO "Unsupported format 0x%08x.\n", + fmt->fmt.pix.pixelformat); + return -EINVAL; |
