Merge branches 'irq-core-for-linus' and 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: genirq: Fix up irq_node() for irq_data changes. genirq: Add single IRQ reservation helper genirq: Warn if enable_irq is called before irq is set up * 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: semaphore: Remove mutex emulation staging: Final semaphore cleanup jbd2: Convert jbd2_slab_create_sem to mutex hpfs: Convert sbi->hpfs_creation_de to mutex Fix up trivial change/delete conflicts with deleted 'dream' drivers (drivers/staging/dream/camera/{mt9d112.c,mt9p012_fox.c,mt9t013.c,s5k3e2fx.c})
This commit is contained in:
commit
82279e6bd7
20 changed files with 36 additions and 37 deletions
|
@ -198,8 +198,8 @@ int ar6000_htc_raw_open(AR_SOFTC_T *ar)
|
||||||
|
|
||||||
for (streamID = HTC_RAW_STREAM_0; streamID < HTC_RAW_STREAM_NUM_MAX; streamID++) {
|
for (streamID = HTC_RAW_STREAM_0; streamID < HTC_RAW_STREAM_NUM_MAX; streamID++) {
|
||||||
/* Initialize the data structures */
|
/* Initialize the data structures */
|
||||||
init_MUTEX(&arRaw->raw_htc_read_sem[streamID]);
|
sema_init(&arRaw->raw_htc_read_sem[streamID], 1);
|
||||||
init_MUTEX(&arRaw->raw_htc_write_sem[streamID]);
|
sema_init(&arRaw->raw_htc_write_sem[streamID], 1);
|
||||||
init_waitqueue_head(&arRaw->raw_htc_read_queue[streamID]);
|
init_waitqueue_head(&arRaw->raw_htc_read_queue[streamID]);
|
||||||
init_waitqueue_head(&arRaw->raw_htc_write_queue[streamID]);
|
init_waitqueue_head(&arRaw->raw_htc_write_queue[streamID]);
|
||||||
|
|
||||||
|
|
|
@ -1929,7 +1929,7 @@ dhd_pub_t *dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
net->netdev_ops = NULL;
|
net->netdev_ops = NULL;
|
||||||
init_MUTEX(&dhd->proto_sem);
|
sema_init(&dhd->proto_sem, 1);
|
||||||
/* Initialize other structure content */
|
/* Initialize other structure content */
|
||||||
init_waitqueue_head(&dhd->ioctl_resp_wait);
|
init_waitqueue_head(&dhd->ioctl_resp_wait);
|
||||||
init_waitqueue_head(&dhd->ctrl_wait);
|
init_waitqueue_head(&dhd->ctrl_wait);
|
||||||
|
@ -1977,7 +1977,7 @@ dhd_pub_t *dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
|
||||||
dhd->timer.function = dhd_watchdog;
|
dhd->timer.function = dhd_watchdog;
|
||||||
|
|
||||||
/* Initialize thread based operation and lock */
|
/* Initialize thread based operation and lock */
|
||||||
init_MUTEX(&dhd->sdsem);
|
sema_init(&dhd->sdsem, 1);
|
||||||
if ((dhd_watchdog_prio >= 0) && (dhd_dpc_prio >= 0))
|
if ((dhd_watchdog_prio >= 0) && (dhd_dpc_prio >= 0))
|
||||||
dhd->threads_only = true;
|
dhd->threads_only = true;
|
||||||
else
|
else
|
||||||
|
|
|
@ -866,7 +866,7 @@ static wl_info_t *wl_attach(u16 vendor, u16 device, unsigned long regs,
|
||||||
spin_lock_init(&wl->rpcq_lock);
|
spin_lock_init(&wl->rpcq_lock);
|
||||||
spin_lock_init(&wl->txq_lock);
|
spin_lock_init(&wl->txq_lock);
|
||||||
|
|
||||||
init_MUTEX(&wl->sem);
|
sema_init(&wl->sem, 1);
|
||||||
#else
|
#else
|
||||||
spin_lock_init(&wl->lock);
|
spin_lock_init(&wl->lock);
|
||||||
spin_lock_init(&wl->isr_lock);
|
spin_lock_init(&wl->isr_lock);
|
||||||
|
|
|
@ -262,7 +262,7 @@ struct dt9812_usb_cmd {
|
||||||
|
|
||||||
#define DT9812_NUM_SLOTS 16
|
#define DT9812_NUM_SLOTS 16
|
||||||
|
|
||||||
static DECLARE_MUTEX(dt9812_mutex);
|
static DEFINE_SEMAPHORE(dt9812_mutex);
|
||||||
|
|
||||||
static const struct usb_device_id dt9812_table[] = {
|
static const struct usb_device_id dt9812_table[] = {
|
||||||
{USB_DEVICE(0x0867, 0x9812)},
|
{USB_DEVICE(0x0867, 0x9812)},
|
||||||
|
|
|
@ -315,7 +315,7 @@ struct usbduxsub {
|
||||||
*/
|
*/
|
||||||
static struct usbduxsub usbduxsub[NUMUSBDUX];
|
static struct usbduxsub usbduxsub[NUMUSBDUX];
|
||||||
|
|
||||||
static DECLARE_MUTEX(start_stop_sem);
|
static DEFINE_SEMAPHORE(start_stop_sem);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stops the data acquision
|
* Stops the data acquision
|
||||||
|
@ -2367,7 +2367,7 @@ static int usbduxsub_probe(struct usb_interface *uinterf,
|
||||||
dev_dbg(dev, "comedi_: usbdux: "
|
dev_dbg(dev, "comedi_: usbdux: "
|
||||||
"usbduxsub[%d] is ready to connect to comedi.\n", index);
|
"usbduxsub[%d] is ready to connect to comedi.\n", index);
|
||||||
|
|
||||||
init_MUTEX(&(usbduxsub[index].sem));
|
sema_init(&(usbduxsub[index].sem), 1);
|
||||||
/* save a pointer to the usb device */
|
/* save a pointer to the usb device */
|
||||||
usbduxsub[index].usbdev = udev;
|
usbduxsub[index].usbdev = udev;
|
||||||
|
|
||||||
|
|
|
@ -199,7 +199,7 @@ struct usbduxfastsub_s {
|
||||||
*/
|
*/
|
||||||
static struct usbduxfastsub_s usbduxfastsub[NUMUSBDUXFAST];
|
static struct usbduxfastsub_s usbduxfastsub[NUMUSBDUXFAST];
|
||||||
|
|
||||||
static DECLARE_MUTEX(start_stop_sem);
|
static DEFINE_SEMAPHORE(start_stop_sem);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bulk transfers to usbduxfast
|
* bulk transfers to usbduxfast
|
||||||
|
@ -1504,7 +1504,7 @@ static int usbduxfastsub_probe(struct usb_interface *uinterf,
|
||||||
"connect to comedi.\n", index);
|
"connect to comedi.\n", index);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
init_MUTEX(&(usbduxfastsub[index].sem));
|
sema_init(&(usbduxfastsub[index].sem), 1);
|
||||||
/* save a pointer to the usb device */
|
/* save a pointer to the usb device */
|
||||||
usbduxfastsub[index].usbdev = udev;
|
usbduxfastsub[index].usbdev = udev;
|
||||||
|
|
||||||
|
|
|
@ -1158,7 +1158,7 @@ static int msm_fb_release(struct fb_info *info, int user)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
DECLARE_MUTEX(msm_fb_pan_sem);
|
DEFINE_SEMAPHORE(msm_fb_pan_sem);
|
||||||
|
|
||||||
static int msm_fb_pan_display(struct fb_var_screeninfo *var,
|
static int msm_fb_pan_display(struct fb_var_screeninfo *var,
|
||||||
struct fb_info *info)
|
struct fb_info *info)
|
||||||
|
@ -1962,7 +1962,7 @@ static int msmfb_overlay_play(struct fb_info *info, unsigned long *argp)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DECLARE_MUTEX(msm_fb_ioctl_ppp_sem);
|
DEFINE_SEMAPHORE(msm_fb_ioctl_ppp_sem);
|
||||||
DEFINE_MUTEX(msm_fb_ioctl_lut_sem);
|
DEFINE_MUTEX(msm_fb_ioctl_lut_sem);
|
||||||
DEFINE_MUTEX(msm_fb_ioctl_hist_sem);
|
DEFINE_MUTEX(msm_fb_ioctl_hist_sem);
|
||||||
|
|
||||||
|
|
|
@ -161,7 +161,7 @@ static inline u32 _down_sema(struct semaphore *sema)
|
||||||
|
|
||||||
static inline void _rtl_rwlock_init(struct semaphore *prwlock)
|
static inline void _rtl_rwlock_init(struct semaphore *prwlock)
|
||||||
{
|
{
|
||||||
init_MUTEX(prwlock);
|
sema_init(prwlock, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _init_listhead(struct list_head *list)
|
static inline void _init_listhead(struct list_head *list)
|
||||||
|
|
|
@ -537,7 +537,7 @@ static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
|
||||||
server->mnt = NULL;
|
server->mnt = NULL;
|
||||||
server->sock_file = NULL;
|
server->sock_file = NULL;
|
||||||
init_waitqueue_head(&server->conn_wq);
|
init_waitqueue_head(&server->conn_wq);
|
||||||
init_MUTEX(&server->sem);
|
sema_init(&server->sem, 1);
|
||||||
INIT_LIST_HEAD(&server->entry);
|
INIT_LIST_HEAD(&server->entry);
|
||||||
INIT_LIST_HEAD(&server->xmitq);
|
INIT_LIST_HEAD(&server->xmitq);
|
||||||
INIT_LIST_HEAD(&server->recvq);
|
INIT_LIST_HEAD(&server->recvq);
|
||||||
|
|
|
@ -157,7 +157,7 @@ struct cyasblkdev_blk_data {
|
||||||
/* pointer to west bridge block data device superstructure */
|
/* pointer to west bridge block data device superstructure */
|
||||||
static struct cyasblkdev_blk_data *gl_bd;
|
static struct cyasblkdev_blk_data *gl_bd;
|
||||||
|
|
||||||
static DECLARE_MUTEX(open_lock);
|
static DEFINE_SEMAPHORE(open_lock);
|
||||||
|
|
||||||
/* local forwardd declarationss */
|
/* local forwardd declarationss */
|
||||||
static cy_as_device_handle *cyas_dev_handle;
|
static cy_as_device_handle *cyas_dev_handle;
|
||||||
|
|
|
@ -334,7 +334,7 @@ int cyasblkdev_init_queue(struct cyasblkdev_queue *bq, spinlock_t *lock)
|
||||||
|
|
||||||
init_completion(&bq->thread_complete);
|
init_completion(&bq->thread_complete);
|
||||||
init_waitqueue_head(&bq->thread_wq);
|
init_waitqueue_head(&bq->thread_wq);
|
||||||
init_MUTEX(&bq->thread_sem);
|
sema_init(&bq->thread_sem, 1);
|
||||||
|
|
||||||
ret = kernel_thread(cyasblkdev_queue_thread, bq, CLONE_KERNEL);
|
ret = kernel_thread(cyasblkdev_queue_thread, bq, CLONE_KERNEL);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
|
|
|
@ -14,7 +14,7 @@ void hpfs_lock_creation(struct super_block *s)
|
||||||
#ifdef DEBUG_LOCKS
|
#ifdef DEBUG_LOCKS
|
||||||
printk("lock creation\n");
|
printk("lock creation\n");
|
||||||
#endif
|
#endif
|
||||||
down(&hpfs_sb(s)->hpfs_creation_de);
|
mutex_lock(&hpfs_sb(s)->hpfs_creation_de);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hpfs_unlock_creation(struct super_block *s)
|
void hpfs_unlock_creation(struct super_block *s)
|
||||||
|
@ -22,7 +22,7 @@ void hpfs_unlock_creation(struct super_block *s)
|
||||||
#ifdef DEBUG_LOCKS
|
#ifdef DEBUG_LOCKS
|
||||||
printk("unlock creation\n");
|
printk("unlock creation\n");
|
||||||
#endif
|
#endif
|
||||||
up(&hpfs_sb(s)->hpfs_creation_de);
|
mutex_unlock(&hpfs_sb(s)->hpfs_creation_de);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map a sector into a buffer and return pointers to it and to the buffer. */
|
/* Map a sector into a buffer and return pointers to it and to the buffer. */
|
||||||
|
|
|
@ -87,7 +87,7 @@ struct hpfs_sb_info {
|
||||||
unsigned *sb_bmp_dir; /* main bitmap directory */
|
unsigned *sb_bmp_dir; /* main bitmap directory */
|
||||||
unsigned sb_c_bitmap; /* current bitmap */
|
unsigned sb_c_bitmap; /* current bitmap */
|
||||||
unsigned sb_max_fwd_alloc; /* max forwad allocation */
|
unsigned sb_max_fwd_alloc; /* max forwad allocation */
|
||||||
struct semaphore hpfs_creation_de; /* when creating dirents, nobody else
|
struct mutex hpfs_creation_de; /* when creating dirents, nobody else
|
||||||
can alloc blocks */
|
can alloc blocks */
|
||||||
/*unsigned sb_mounting : 1;*/
|
/*unsigned sb_mounting : 1;*/
|
||||||
int sb_timeshift;
|
int sb_timeshift;
|
||||||
|
|
|
@ -491,7 +491,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
|
||||||
sbi->sb_bmp_dir = NULL;
|
sbi->sb_bmp_dir = NULL;
|
||||||
sbi->sb_cp_table = NULL;
|
sbi->sb_cp_table = NULL;
|
||||||
|
|
||||||
init_MUTEX(&sbi->hpfs_creation_de);
|
mutex_init(&sbi->hpfs_creation_de);
|
||||||
|
|
||||||
uid = current_uid();
|
uid = current_uid();
|
||||||
gid = current_gid();
|
gid = current_gid();
|
||||||
|
|
|
@ -1838,7 +1838,6 @@ size_t journal_tag_bytes(journal_t *journal)
|
||||||
*/
|
*/
|
||||||
#define JBD2_MAX_SLABS 8
|
#define JBD2_MAX_SLABS 8
|
||||||
static struct kmem_cache *jbd2_slab[JBD2_MAX_SLABS];
|
static struct kmem_cache *jbd2_slab[JBD2_MAX_SLABS];
|
||||||
static DECLARE_MUTEX(jbd2_slab_create_sem);
|
|
||||||
|
|
||||||
static const char *jbd2_slab_names[JBD2_MAX_SLABS] = {
|
static const char *jbd2_slab_names[JBD2_MAX_SLABS] = {
|
||||||
"jbd2_1k", "jbd2_2k", "jbd2_4k", "jbd2_8k",
|
"jbd2_1k", "jbd2_2k", "jbd2_4k", "jbd2_8k",
|
||||||
|
@ -1859,6 +1858,7 @@ static void jbd2_journal_destroy_slabs(void)
|
||||||
|
|
||||||
static int jbd2_journal_create_slab(size_t size)
|
static int jbd2_journal_create_slab(size_t size)
|
||||||
{
|
{
|
||||||
|
static DEFINE_MUTEX(jbd2_slab_create_mutex);
|
||||||
int i = order_base_2(size) - 10;
|
int i = order_base_2(size) - 10;
|
||||||
size_t slab_size;
|
size_t slab_size;
|
||||||
|
|
||||||
|
@ -1870,16 +1870,16 @@ static int jbd2_journal_create_slab(size_t size)
|
||||||
|
|
||||||
if (unlikely(i < 0))
|
if (unlikely(i < 0))
|
||||||
i = 0;
|
i = 0;
|
||||||
down(&jbd2_slab_create_sem);
|
mutex_lock(&jbd2_slab_create_mutex);
|
||||||
if (jbd2_slab[i]) {
|
if (jbd2_slab[i]) {
|
||||||
up(&jbd2_slab_create_sem);
|
mutex_unlock(&jbd2_slab_create_mutex);
|
||||||
return 0; /* Already created */
|
return 0; /* Already created */
|
||||||
}
|
}
|
||||||
|
|
||||||
slab_size = 1 << (i+10);
|
slab_size = 1 << (i+10);
|
||||||
jbd2_slab[i] = kmem_cache_create(jbd2_slab_names[i], slab_size,
|
jbd2_slab[i] = kmem_cache_create(jbd2_slab_names[i], slab_size,
|
||||||
slab_size, 0, NULL);
|
slab_size, 0, NULL);
|
||||||
up(&jbd2_slab_create_sem);
|
mutex_unlock(&jbd2_slab_create_mutex);
|
||||||
if (!jbd2_slab[i]) {
|
if (!jbd2_slab[i]) {
|
||||||
printk(KERN_EMERG "JBD2: no memory for jbd2_slab cache\n");
|
printk(KERN_EMERG "JBD2: no memory for jbd2_slab cache\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -412,6 +412,11 @@ static inline void irq_free_desc(unsigned int irq)
|
||||||
irq_free_descs(irq, 1);
|
irq_free_descs(irq, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int irq_reserve_irq(unsigned int irq)
|
||||||
|
{
|
||||||
|
return irq_reserve_irqs(irq, 1);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_GENERIC_HARDIRQS */
|
#endif /* CONFIG_GENERIC_HARDIRQS */
|
||||||
|
|
||||||
#endif /* !CONFIG_S390 */
|
#endif /* !CONFIG_S390 */
|
||||||
|
|
|
@ -43,7 +43,7 @@ unsigned int irq_get_next_irq(unsigned int offset);
|
||||||
else
|
else
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
#define irq_node(irq) (irq_to_desc(irq)->node)
|
#define irq_node(irq) (irq_get_irq_data(irq)->node)
|
||||||
#else
|
#else
|
||||||
#define irq_node(irq) 0
|
#define irq_node(irq) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,9 +29,6 @@ struct semaphore {
|
||||||
#define DEFINE_SEMAPHORE(name) \
|
#define DEFINE_SEMAPHORE(name) \
|
||||||
struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
|
struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
|
||||||
|
|
||||||
#define DECLARE_MUTEX(name) \
|
|
||||||
struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
|
|
||||||
|
|
||||||
static inline void sema_init(struct semaphore *sem, int val)
|
static inline void sema_init(struct semaphore *sem, int val)
|
||||||
{
|
{
|
||||||
static struct lock_class_key __key;
|
static struct lock_class_key __key;
|
||||||
|
@ -39,9 +36,6 @@ static inline void sema_init(struct semaphore *sem, int val)
|
||||||
lockdep_init_map(&sem->lock.dep_map, "semaphore->lock", &__key, 0);
|
lockdep_init_map(&sem->lock.dep_map, "semaphore->lock", &__key, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define init_MUTEX(sem) sema_init(sem, 1)
|
|
||||||
#define init_MUTEX_LOCKED(sem) sema_init(sem, 0)
|
|
||||||
|
|
||||||
extern void down(struct semaphore *sem);
|
extern void down(struct semaphore *sem);
|
||||||
extern int __must_check down_interruptible(struct semaphore *sem);
|
extern int __must_check down_interruptible(struct semaphore *sem);
|
||||||
extern int __must_check down_killable(struct semaphore *sem);
|
extern int __must_check down_killable(struct semaphore *sem);
|
||||||
|
|
|
@ -324,6 +324,10 @@ void enable_irq(unsigned int irq)
|
||||||
if (!desc)
|
if (!desc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (WARN(!desc->irq_data.chip || !desc->irq_data.chip->irq_enable,
|
||||||
|
KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
|
||||||
|
return;
|
||||||
|
|
||||||
chip_bus_lock(desc);
|
chip_bus_lock(desc);
|
||||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||||
__enable_irq(desc, irq, false);
|
__enable_irq(desc, irq, false);
|
||||||
|
|
|
@ -2794,12 +2794,8 @@ sub process {
|
||||||
WARN("__func__ should be used instead of gcc specific __FUNCTION__\n" . $herecurr);
|
WARN("__func__ should be used instead of gcc specific __FUNCTION__\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for semaphores used as mutexes
|
# check for semaphores initialized locked
|
||||||
if ($line =~ /^.\s*(DECLARE_MUTEX|init_MUTEX)\s*\(/) {
|
if ($line =~ /^.\s*sema_init.+,\W?0\W?\)/) {
|
||||||
WARN("mutexes are preferred for single holder semaphores\n" . $herecurr);
|
|
||||||
}
|
|
||||||
# check for semaphores used as mutexes
|
|
||||||
if ($line =~ /^.\s*init_MUTEX_LOCKED\s*\(/) {
|
|
||||||
WARN("consider using a completion\n" . $herecurr);
|
WARN("consider using a completion\n" . $herecurr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue