merge linus into test branch
This commit is contained in:
@@ -133,7 +133,7 @@ struct cn_callback_data {
|
||||
struct cn_callback_entry {
|
||||
struct list_head callback_entry;
|
||||
struct cn_callback *cb;
|
||||
struct delayed_work work;
|
||||
struct work_struct work;
|
||||
struct cn_queue_dev *pdev;
|
||||
|
||||
struct cn_callback_id id;
|
||||
|
||||
@@ -491,6 +491,21 @@ struct input_absinfo {
|
||||
#define KEY_DIGITS 0x19d
|
||||
#define KEY_TEEN 0x19e
|
||||
#define KEY_TWEN 0x19f
|
||||
#define KEY_VIDEOPHONE 0x1a0
|
||||
#define KEY_GAMES 0x1a1
|
||||
#define KEY_ZOOMIN 0x1a2
|
||||
#define KEY_ZOOMOUT 0x1a3
|
||||
#define KEY_ZOOMRESET 0x1a4
|
||||
#define KEY_WORDPROCESSOR 0x1a5
|
||||
#define KEY_EDITOR 0x1a6
|
||||
#define KEY_SPREADSHEET 0x1a7
|
||||
#define KEY_GRAPHICSEDITOR 0x1a8
|
||||
#define KEY_PRESENTATION 0x1a9
|
||||
#define KEY_DATABASE 0x1aa
|
||||
#define KEY_NEWS 0x1ab
|
||||
#define KEY_VOICEMAIL 0x1ac
|
||||
#define KEY_ADDRESSBOOK 0x1ad
|
||||
#define KEY_MESSENGER 0x1ae
|
||||
|
||||
#define KEY_DEL_EOL 0x1c0
|
||||
#define KEY_DEL_EOS 0x1c1
|
||||
|
||||
+2
-61
@@ -14,63 +14,6 @@
|
||||
|
||||
struct module;
|
||||
|
||||
#ifdef CONFIG_STACK_UNWIND
|
||||
|
||||
#include <asm/unwind.h>
|
||||
|
||||
#ifndef ARCH_UNWIND_SECTION_NAME
|
||||
#define ARCH_UNWIND_SECTION_NAME ".eh_frame"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initialize unwind support.
|
||||
*/
|
||||
extern void unwind_init(void);
|
||||
extern void unwind_setup(void);
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
|
||||
extern void *unwind_add_table(struct module *,
|
||||
const void *table_start,
|
||||
unsigned long table_size);
|
||||
|
||||
extern void unwind_remove_table(void *handle, int init_only);
|
||||
|
||||
#endif
|
||||
|
||||
extern int unwind_init_frame_info(struct unwind_frame_info *,
|
||||
struct task_struct *,
|
||||
/*const*/ struct pt_regs *);
|
||||
|
||||
/*
|
||||
* Prepare to unwind a blocked task.
|
||||
*/
|
||||
extern int unwind_init_blocked(struct unwind_frame_info *,
|
||||
struct task_struct *);
|
||||
|
||||
/*
|
||||
* Prepare to unwind the currently running thread.
|
||||
*/
|
||||
extern int unwind_init_running(struct unwind_frame_info *,
|
||||
asmlinkage int (*callback)(struct unwind_frame_info *,
|
||||
void *arg),
|
||||
void *arg);
|
||||
|
||||
/*
|
||||
* Unwind to previous to frame. Returns 0 if successful, negative
|
||||
* number in case of an error.
|
||||
*/
|
||||
extern int unwind(struct unwind_frame_info *);
|
||||
|
||||
/*
|
||||
* Unwind until the return pointer is in user-land (or until an error
|
||||
* occurs). Returns 0 if successful, negative number in case of
|
||||
* error.
|
||||
*/
|
||||
extern int unwind_to_user(struct unwind_frame_info *);
|
||||
|
||||
#else
|
||||
|
||||
struct unwind_frame_info {};
|
||||
|
||||
static inline void unwind_init(void) {}
|
||||
@@ -85,12 +28,12 @@ static inline void *unwind_add_table(struct module *mod,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static inline void unwind_remove_table(void *handle, int init_only)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static inline int unwind_init_frame_info(struct unwind_frame_info *info,
|
||||
struct task_struct *tsk,
|
||||
const struct pt_regs *regs)
|
||||
@@ -122,6 +65,4 @@ static inline int unwind_to_user(struct unwind_frame_info *info)
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_UNWIND_H */
|
||||
|
||||
+24
-12
@@ -8,16 +8,21 @@
|
||||
#include <linux/timer.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct workqueue_struct;
|
||||
|
||||
struct work_struct;
|
||||
typedef void (*work_func_t)(struct work_struct *work);
|
||||
|
||||
/*
|
||||
* The first word is the work queue pointer and the flags rolled into
|
||||
* one
|
||||
*/
|
||||
#define work_data_bits(work) ((unsigned long *)(&(work)->data))
|
||||
|
||||
struct work_struct {
|
||||
/* the first word is the work queue pointer and the flags rolled into
|
||||
* one */
|
||||
unsigned long management;
|
||||
atomic_long_t data;
|
||||
#define WORK_STRUCT_PENDING 0 /* T if work item pending execution */
|
||||
#define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */
|
||||
#define WORK_STRUCT_FLAG_MASK (3UL)
|
||||
@@ -26,6 +31,9 @@ struct work_struct {
|
||||
work_func_t func;
|
||||
};
|
||||
|
||||
#define WORK_DATA_INIT(autorelease) \
|
||||
ATOMIC_LONG_INIT((autorelease) << WORK_STRUCT_NOAUTOREL)
|
||||
|
||||
struct delayed_work {
|
||||
struct work_struct work;
|
||||
struct timer_list timer;
|
||||
@@ -36,13 +44,13 @@ struct execute_work {
|
||||
};
|
||||
|
||||
#define __WORK_INITIALIZER(n, f) { \
|
||||
.management = 0, \
|
||||
.data = WORK_DATA_INIT(0), \
|
||||
.entry = { &(n).entry, &(n).entry }, \
|
||||
.func = (f), \
|
||||
}
|
||||
|
||||
#define __WORK_INITIALIZER_NAR(n, f) { \
|
||||
.management = (1 << WORK_STRUCT_NOAUTOREL), \
|
||||
.data = WORK_DATA_INIT(1), \
|
||||
.entry = { &(n).entry, &(n).entry }, \
|
||||
.func = (f), \
|
||||
}
|
||||
@@ -82,17 +90,21 @@ struct execute_work {
|
||||
|
||||
/*
|
||||
* initialize all of a work item in one go
|
||||
*
|
||||
* NOTE! No point in using "atomic_long_set()": useing a direct
|
||||
* assignment of the work data initializer allows the compiler
|
||||
* to generate better code.
|
||||
*/
|
||||
#define INIT_WORK(_work, _func) \
|
||||
do { \
|
||||
(_work)->management = 0; \
|
||||
(_work)->data = (atomic_long_t) WORK_DATA_INIT(0); \
|
||||
INIT_LIST_HEAD(&(_work)->entry); \
|
||||
PREPARE_WORK((_work), (_func)); \
|
||||
} while (0)
|
||||
|
||||
#define INIT_WORK_NAR(_work, _func) \
|
||||
do { \
|
||||
(_work)->management = (1 << WORK_STRUCT_NOAUTOREL); \
|
||||
(_work)->data = (atomic_long_t) WORK_DATA_INIT(1); \
|
||||
INIT_LIST_HEAD(&(_work)->entry); \
|
||||
PREPARE_WORK((_work), (_func)); \
|
||||
} while (0)
|
||||
@@ -114,15 +126,15 @@ struct execute_work {
|
||||
* @work: The work item in question
|
||||
*/
|
||||
#define work_pending(work) \
|
||||
test_bit(WORK_STRUCT_PENDING, &(work)->management)
|
||||
test_bit(WORK_STRUCT_PENDING, work_data_bits(work))
|
||||
|
||||
/**
|
||||
* delayed_work_pending - Find out whether a delayable work item is currently
|
||||
* pending
|
||||
* @work: The work item in question
|
||||
*/
|
||||
#define delayed_work_pending(work) \
|
||||
test_bit(WORK_STRUCT_PENDING, &(work)->work.management)
|
||||
#define delayed_work_pending(w) \
|
||||
work_pending(&(w)->work)
|
||||
|
||||
/**
|
||||
* work_release - Release a work item under execution
|
||||
@@ -143,7 +155,7 @@ struct execute_work {
|
||||
* This should also be used to release a delayed work item.
|
||||
*/
|
||||
#define work_release(work) \
|
||||
clear_bit(WORK_STRUCT_PENDING, &(work)->management)
|
||||
clear_bit(WORK_STRUCT_PENDING, work_data_bits(work))
|
||||
|
||||
|
||||
extern struct workqueue_struct *__create_workqueue(const char *name,
|
||||
@@ -188,7 +200,7 @@ static inline int cancel_delayed_work(struct delayed_work *work)
|
||||
|
||||
ret = del_timer_sync(&work->timer);
|
||||
if (ret)
|
||||
clear_bit(WORK_STRUCT_PENDING, &work->work.management);
|
||||
work_release(&work->work);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user