3.4.86-stable review
Greg Kroah-Hartman
maintainercover 3.4.86-stable review
This is the start of the stable review cycle for the 3.4.86 release. There are 6 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu Apr 3 03:28:04 UTC 2014. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.4.86-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 3.4.86-rc1
Daniel Borkmann <[email protected]>
netfilter: nf_conntrack_dccp: fix skb_header_pointer API usages
Artem Fetishev <[email protected]>
x86: fix boot on uniprocessor systems
Hans de Goede <[email protected]>
Input: synaptics - add manual min/max quirk for ThinkPad X240
Benjamin Tissoires <[email protected]>
Input: synaptics - add manual min/max quirk
Theodore Ts'o <[email protected]>
ext4: atomically set inode->i_flags in ext4_set_inode_flags()
Samuel Thibault <[email protected]>
staging: speakup: Prefix externally-visible symbols
-------------
Diffstat:
Makefile | 4 +- arch/x86/include/asm/topology.h | 3 +- drivers/input/mouse/synaptics.c | 55 +++++ drivers/staging/speakup/i18n.c | 12 +- drivers/staging/speakup/i18n.h | 12 +- drivers/staging/speakup/keyhelp.c | 36 +-- drivers/staging/speakup/kobjects.c | 80 +++---- drivers/staging/speakup/main.c | 366 +++++++++++++++---------------- drivers/staging/speakup/selection.c | 14 +- drivers/staging/speakup/serialio.c | 6 +- drivers/staging/speakup/speakup.h | 72 +++--- drivers/staging/speakup/speakup_acntpc.c | 6 +- drivers/staging/speakup/speakup_acntsa.c | 2 +- drivers/staging/speakup/speakup_apollo.c | 8 +- drivers/staging/speakup/speakup_audptr.c | 2 +- drivers/staging/speakup/speakup_bns.c | 2 +- drivers/staging/speakup/speakup_decext.c | 6 +- drivers/staging/speakup/speakup_decpc.c | 4 +- drivers/staging/speakup/speakup_dectlk.c | 6 +- drivers/staging/speakup/speakup_dtlk.c | 4 +- drivers/staging/speakup/speakup_dummy.c | 2 +- drivers/staging/speakup/speakup_keypc.c | 6 +- drivers/staging/speakup/speakup_ltlk.c | 2 +- drivers/staging/speakup/speakup_spkout.c | 2 +- drivers/staging/speakup/speakup_txprt.c | 2 +- drivers/staging/speakup/spk_priv.h | 8 +- drivers/staging/speakup/synth.c | 38 ++-- drivers/staging/speakup/thread.c | 4 +- drivers/staging/speakup/varhandlers.c | 66 +++--- fs/ext4/inode.c | 15 +- include/linux/bitops.h | 15 ++ net/netfilter/nf_conntrack_proto_dccp.c | 6 +- 32 files changed, 470 insertions(+), 396 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/6 staging: speakup: Prefix externally-visible symbols
3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Samuel Thibault <[email protected]>
commit ca2beaf84d9678c12b17d92623f0e90829d6ca13 upstream.
This prefixes all externally-visible symbols of speakup with "spk_".
--- drivers/staging/speakup/i18n.c | 12 - drivers/staging/speakup/i18n.h | 12 - drivers/staging/speakup/keyhelp.c | 36 +-- drivers/staging/speakup/kobjects.c | 80 +++--- drivers/staging/speakup/main.c | 366 +++++++++++++++---------------- drivers/staging/speakup/selection.c | 14 - drivers/staging/speakup/serialio.c | 6 drivers/staging/speakup/speakup.h | 72 +++--- drivers/staging/speakup/speakup_acntpc.c | 6 drivers/staging/speakup/speakup_acntsa.c | 2 drivers/staging/speakup/speakup_apollo.c | 8 drivers/staging/speakup/speakup_audptr.c | 2 drivers/staging/speakup/speakup_bns.c | 2 drivers/staging/speakup/speakup_decext.c | 6 drivers/staging/speakup/speakup_decpc.c | 4 drivers/staging/speakup/speakup_dectlk.c | 6 drivers/staging/speakup/speakup_dtlk.c | 4 drivers/staging/speakup/speakup_dummy.c | 2 drivers/staging/speakup/speakup_keypc.c | 6 drivers/staging/speakup/speakup_ltlk.c | 2 drivers/staging/speakup/speakup_spkout.c | 2 drivers/staging/speakup/speakup_txprt.c | 2 drivers/staging/speakup/spk_priv.h | 8 drivers/staging/speakup/synth.c | 38 +-- drivers/staging/speakup/thread.c | 4 drivers/staging/speakup/varhandlers.c | 66 ++--- 26 files changed, 384 insertions(+), 384 deletions(-)
drivers/staging/speakup/i18n.c +6 -6
@@ -390,7 +390,7 @@ static struct msg_group_t all_groups[] =static const int num_groups =sizeof (all_groups) /sizeof (struct msg_group_t ); -char *msg_get (enum msg_index_t index) +char *spk_msg_get (enum msg_index_t index) {char *ch;
@@ -540,7 +540,7 @@ static int fmt_validate(char *template,* -EINVAL - Invalid format specifiers in formatted message or illegal index. * -ENOMEM - Unable to allocate memory. */ -ssize_t msg_set (enum msg_index_t index,char *text,size_t length) +ssize_t spk_msg_set (enum msg_index_t index,char *text,size_t length) {int rc =0 ;char *newstr =NULL ;
@@ -575,7 +575,7 @@ ssize_t msg_set(enum msg_index_t index,* Find a message group, given its name. Return a pointer to the structure * if found, or NULL otherwise. */ -struct msg_group_t *find_msg_group (const char *group_name) +struct msg_group_t *spk_find_msg_group (const char *group_name) {struct msg_group_t *group =NULL ;int i;
@@ -589,7 +589,7 @@ struct msg_group_t *find_msg_group(constreturn group; } -void reset_msg_group (struct msg_group_t *group) +void spk_reset_msg_group (struct msg_group_t *group) {unsigned long flags;enum msg_index_t i;
@@ -605,14 +605,14 @@ void reset_msg_group(struct msg_group_t }/* Called at initialization time, to establish default messages. */ -void initialize_msgs (void ) +void spk_initialize_msgs (void ) {memcpy (speakup_msgs, speakup_default_msgs,sizeof (speakup_default_msgs)); }/* Free user-supplied strings when module is unloaded: */ -void free_user_msgs (void ) +void spk_free_user_msgs (void ) {enum msg_index_t index;unsigned long flags;
drivers/staging/speakup/i18n.h +6 -6
@@ -218,11 +218,11 @@ struct msg_group_t { enum msg_index_t end; }; -extern char *msg_get (enum msg_index_t index); -extern ssize_t msg_set (enum msg_index_t index,char *text,size_t length); -extern struct msg_group_t *find_msg_group (const char *group_name); -extern void reset_msg_group (struct msg_group_t *group); -extern void initialize_msgs (void ); -extern void free_user_msgs (void ); +extern char *spk_msg_get (enum msg_index_t index); +extern ssize_t spk_msg_set (enum msg_index_t index,char *text,size_t length); +extern struct msg_group_t *spk_find_msg_group (const char *group_name); +extern void spk_reset_msg_group (struct msg_group_t *group); +extern void spk_initialize_msgs (void ); +extern void spk_free_user_msgs (void );#endif
drivers/staging/speakup/keyhelp.c +18 -18
@@ -115,10 +115,10 @@ static void say_key(int key) key &=0xff ;for (i =0 ; i <6 ; i++) {if (state & masks[i]) -synth_printf (" %s" ,msg_get (MSG_STATES_START + i)); +synth_printf (" %s" ,spk_msg_get (MSG_STATES_START + i)); }if ((key >0 ) && (key <= num_key_names)) -synth_printf (" %s\n" ,msg_get (MSG_KEYNAMES_START + (key -1 ))); +synth_printf (" %s\n" ,spk_msg_get (MSG_KEYNAMES_START + (key -1 ))); }static int help_init (void )
@@ -126,9 +126,9 @@ static int help_init(void)char start =SPACE ;int i;int num_funcs =MSG_FUNCNAMES_END -MSG_FUNCNAMES_START +1 ; -state_tbl = our_keys[0 ]+SHIFT_TBL_SIZE +2 ; +state_tbl = spk_our_keys[0 ]+SHIFT_TBL_SIZE +2 ;for (i =0 ; i < num_funcs; i++) { -char *cur_funcname =msg_get (MSG_FUNCNAMES_START + i); +char *cur_funcname =spk_msg_get (MSG_FUNCNAMES_START + i);if (start == *cur_funcname)continue ; start = *cur_funcname;
@@ -137,7 +137,7 @@ state_tbl = our_keys[0]+SHIFT_TBL_SIZE+2return 0 ; } -int handle_help (struct vc_data *vc,u_char type,u_char ch,u_short key) +int spk_handle_help (struct vc_data *vc,u_char type,u_char ch,u_short key) {int i, n;char *name;
@@ -147,15 +147,15 @@ int handle_help(struct vc_data *vc, u_chhelp_init ();if (type ==KT_LATIN ) {if (ch ==SPACE ) { - special_handler =NULL ; -synth_printf ("%s\n" ,msg_get (MSG_LEAVING_HELP )); + spk_special_handler =NULL ; +synth_printf ("%s\n" ,spk_msg_get (MSG_LEAVING_HELP ));return 1 ; } ch |=32 ;/* lower case */ if (ch <'a' || ch >'z' )return -1 ;if (letter_offsets[ch-'a' ] ==-1 ) { -synth_printf (msg_get (MSG_NO_COMMAND ), ch); +synth_printf (spk_msg_get (MSG_NO_COMMAND ), ch);synth_printf ("\n" );return 1 ; }
@@ -169,47 +169,47 @@ int handle_help(struct vc_data *vc, u_ch cur_item--; else return -1; - }else if (type ==KT_SPKUP && ch ==SPEAKUP_HELP && !special_handler) { - special_handler = handle_help; -synth_printf ("%s\n" ,msg_get (MSG_HELP_INFO )); + }else if (type ==KT_SPKUP && ch ==SPEAKUP_HELP && !spk_special_handler) { + spk_special_handler = spk_handle_help; +synth_printf ("%s\n" ,spk_msg_get (MSG_HELP_INFO ));build_key_data ();/* rebuild each time in case new mapping */ return 1 ; }else { name =NULL ;if ((type !=KT_SPKUP ) && (key >0 ) && (key <= num_key_names)) {synth_printf ("%s\n" , -msg_get (MSG_KEYNAMES_START + key-1 )); +spk_msg_get (MSG_KEYNAMES_START + key-1 ));return 1 ; }for (i =0 ; funcvals[i] !=0 && !name; i++) {if (ch == funcvals[i]) - name =msg_get (MSG_FUNCNAMES_START + i); + name =spk_msg_get (MSG_FUNCNAMES_START + i); }if (!name)return -1 ; - kp = our_keys[key]+1 ; + kp = spk_our_keys[key]+1 ;for (i =0 ; i < nstates; i++) {if (ch == kp[i])break ; } key += (state_tbl[i] <<8 );say_key (key); -synth_printf (msg_get (MSG_KEYDESC ), name); +synth_printf (spk_msg_get (MSG_KEYDESC ), name);synth_printf ("\n" );return 1 ; } - name =msg_get (MSG_FUNCNAMES_START + cur_item); + name =spk_msg_get (MSG_FUNCNAMES_START + cur_item); func = funcvals[cur_item];synth_printf ("%s" , name);if (key_offsets[func] ==0 ) { -synth_printf (" %s\n" ,msg_get (MSG_IS_UNASSIGNED )); +synth_printf (" %s\n" ,spk_msg_get (MSG_IS_UNASSIGNED ));return 1 ; } p_keys = key_data + key_offsets[func];for (n =0 ; p_keys[n]; n++) { val = p_keys[n];if (n >0 ) -synth_printf ("%s " ,msg_get (MSG_DISJUNCTION )); +synth_printf ("%s " ,spk_msg_get (MSG_DISJUNCTION ));say_key (val); }return 1 ;
drivers/staging/speakup/kobjects.c +40 -40
264 lines not on this page · raw message
drivers/staging/speakup/main.c +183 -183
965 lines not on this page · raw message
drivers/staging/speakup/selection.c +7 -7
@@ -10,7 +10,7 @@/* Don't take this from <ctype.h>: 011-015 on the screen aren't spaces */ #define ishardspace (c) ((c) == ' ') -unsigned short xs, ys, xe, ye;/* our region points */ +unsigned short spk_xs, spk_ys, spk_xe, spk_ye;/* our region points */ /* Variables for selection control. */ /* must not be disallocated */
@@ -51,12 +51,12 @@ int speakup_set_selection(struct tty_strint i, ps, pe;struct vc_data *vc = vc_cons[fg_console].d; - xs =limit (xs, vc->vc_cols -1 ); - ys =limit (ys, vc->vc_rows -1 ); - xe =limit (xe, vc->vc_cols -1 ); - ye =limit (ye, vc->vc_rows -1 ); - ps = ys * vc->vc_size_row + (xs <<1 ); - pe = ye * vc->vc_size_row + (xe <<1 ); + spk_xs =limit (spk_xs, vc->vc_cols -1 ); + spk_ys =limit (spk_ys, vc->vc_rows -1 ); + spk_xe =limit (spk_xe, vc->vc_cols -1 ); + spk_ye =limit (spk_ye, vc->vc_rows -1 ); + ps = spk_ys * vc->vc_size_row + (spk_xs <<1 ); + pe = spk_ye * vc->vc_size_row + (spk_xe <<1 );if (ps > pe) {/* make sel_start <= sel_end */
drivers/staging/speakup/serialio.c +3 -3
@@ -116,7 +116,7 @@ static void start_serial_interrupt(int ioutb (1 , speakup_info.port_tts +UART_FCR );/* Turn FIFO On */ } -void stop_serial_interrupt (void ) +void spk_stop_serial_interrupt (void ) {if (speakup_info.port_tts ==0 )return ;
@@ -130,7 +130,7 @@ void stop_serial_interrupt(void)free_irq (serstate->irq, (void *) synth_readbuf_handler); } -int wait_for_xmitr (void ) +int spk_wait_for_xmitr (void ) {int tmout =SPK_XMITR_TIMEOUT ;if ((synth->alive) && (timeouts >=NUM_DISABLE_TIMEOUTS )) {
@@ -195,7 +195,7 @@ EXPORT_SYMBOL_GPL(spk_serial_in_nowait);int spk_serial_out (const char ch) { -if (synth->alive &&wait_for_xmitr ()) { +if (synth->alive &&spk_wait_for_xmitr ()) {outb_p (ch, speakup_info.port_tts);return 1 ; }
drivers/staging/speakup/speakup.h +36 -36
105 lines not on this page · raw message
drivers/staging/speakup/speakup_acntpc.c +3 -3
@@ -182,9 +182,9 @@ static void do_catch_up(struct spk_synthstruct var_t *full_time;struct var_t *jiffy_delta; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); - full_time =get_var (FULL ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY ); + full_time =spk_get_var (FULL );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;
drivers/staging/speakup/speakup_acntsa.c +1 -1
@@ -128,7 +128,7 @@ static int synth_probe(struct spk_synth {int failed; - failed =serial_synth_probe (synth); + failed =spk_serial_synth_probe (synth);if (failed ==0 ) {spk_synth_immediate (synth,"\033=R\r" );mdelay (100 );
drivers/staging/speakup/speakup_apollo.c +4 -4
@@ -112,7 +112,7 @@ static struct spk_synth synth_apollo = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = do_catch_up,
@@ -145,9 +145,9 @@ static void do_catch_up(struct spk_synthint delay_time_val =0 ;int jiffy_delta_val =0 ; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); - full_time =get_var (FULL ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY ); + full_time =spk_get_var (FULL );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;spk_unlock (flags);
drivers/staging/speakup/speakup_audptr.c +1 -1
@@ -162,7 +162,7 @@ static int synth_probe(struct spk_synth {int failed =0 ; - failed =serial_synth_probe (synth); + failed =spk_serial_synth_probe (synth);if (failed ==0 )synth_version (synth); synth->alive = !failed;
drivers/staging/speakup/speakup_bns.c +1 -1
@@ -100,7 +100,7 @@ static struct spk_synth synth_bns = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = spk_do_catch_up,
drivers/staging/speakup/speakup_decext.c +3 -3
@@ -130,7 +130,7 @@ static struct spk_synth synth_decext = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = do_catch_up,
@@ -162,8 +162,8 @@ static void do_catch_up(struct spk_synthint jiffy_delta_val =0 ;int delay_time_val =0 ; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;
drivers/staging/speakup/speakup_decpc.c +2 -2
@@ -375,8 +375,8 @@ static void do_catch_up(struct spk_synthint jiffy_delta_val;int delay_time_val; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;spk_unlock (flags);
drivers/staging/speakup/speakup_dectlk.c +3 -3
@@ -134,7 +134,7 @@ static struct spk_synth synth_dectlk = { .vars = vars, .default_pitch = ap_defaults, .default_vol = g5_defaults, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = do_catch_up,
@@ -214,8 +214,8 @@ static void do_catch_up(struct spk_synthint jiffy_delta_val;int delay_time_val; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;spk_unlock (flags);
drivers/staging/speakup/speakup_dtlk.c +2 -2
@@ -198,8 +198,8 @@ static void do_catch_up(struct spk_synthint jiffy_delta_val;int delay_time_val; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;spk_unlock (flags);
drivers/staging/speakup/speakup_dummy.c +1 -1
@@ -102,7 +102,7 @@ static struct spk_synth synth_dummy = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = spk_do_catch_up,
drivers/staging/speakup/speakup_keypc.c +3 -3
@@ -184,9 +184,9 @@ static void do_catch_up(struct spk_synthint full_time_val;int jiffy_delta_val; - jiffy_delta =get_var (JIFFY ); - delay_time =get_var (DELAY ); - full_time =get_var (FULL ); + jiffy_delta =spk_get_var (JIFFY ); + delay_time =spk_get_var (DELAY ); + full_time =spk_get_var (FULL );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;spk_unlock (flags);
drivers/staging/speakup/speakup_ltlk.c +1 -1
@@ -161,7 +161,7 @@ static int synth_probe(struct spk_synth {int failed =0 ; - failed =serial_synth_probe (synth); + failed =spk_serial_synth_probe (synth);if (failed ==0 )synth_interrogate (synth); synth->alive = !failed;
drivers/staging/speakup/speakup_spkout.c +1 -1
@@ -107,7 +107,7 @@ static struct spk_synth synth_spkout = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = spk_do_catch_up,
drivers/staging/speakup/speakup_txprt.c +1 -1
@@ -100,7 +100,7 @@ static struct spk_synth synth_txprt = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, - .probe = serial_synth_probe, + .probe = spk_serial_synth_probe, .release = spk_serial_release, .synth_immediate = spk_synth_immediate, .catch_up = spk_do_catch_up,
drivers/staging/speakup/spk_priv.h +4 -4
@@ -45,8 +45,8 @@#define KT_SPKUP 15extern const struct old_serial_port *spk_serial_init (int index); -extern void stop_serial_interrupt (void ); -extern int wait_for_xmitr (void ); +extern void spk_stop_serial_interrupt (void ); +extern int spk_wait_for_xmitr (void );extern unsigned char spk_serial_in (void );extern unsigned char spk_serial_in_nowait (void );extern int spk_serial_out (const char ch);
@@ -55,13 +55,13 @@ extern void spk_serial_release(void);extern char synth_buffer_getc (void );extern char synth_buffer_peek (void );extern int synth_buffer_empty (void ); -extern struct var_t *get_var (enum var_id_t var_id); +extern struct var_t *spk_get_var (enum var_id_t var_id);extern ssize_t spk_var_show (struct kobject *kobj,struct kobj_attribute *attr,char *buf);extern ssize_t spk_var_store (struct kobject *kobj,struct kobj_attribute *attr,const char *buf,size_t count); -extern int serial_synth_probe (struct spk_synth *synth); +extern int spk_serial_synth_probe (struct spk_synth *synth);extern const char *spk_synth_immediate (struct spk_synth *synth,const char *buff);extern void spk_do_catch_up (struct spk_synth *synth);extern void spk_synth_flush (struct spk_synth *synth);
drivers/staging/speakup/synth.c +19 -19
@@ -20,9 +20,9 @@#define MAXSYNTHS 16/* Max number of synths in array. */ static struct spk_synth *synths[MAXSYNTHS ];struct spk_synth *synth; -char pitch_buff[32 ] ="" ; +char spk_pitch_buff[32 ] ="" ;static int module_status; -bool quiet_boot; +bool spk_quiet_boot;struct speakup_info_t speakup_info = { .spinlock =__SPIN_LOCK_UNLOCKED (speakup_info.spinlock),
@@ -32,7 +32,7 @@ EXPORT_SYMBOL_GPL(speakup_info);static int do_synth_init (struct spk_synth *in_synth); -int serial_synth_probe (struct spk_synth *synth) +int spk_serial_synth_probe (struct spk_synth *synth) {const struct old_serial_port *ser;int failed =0 ;
@@ -59,7 +59,7 @@ int serial_synth_probe(struct spk_synth synth->alive =1 ;return 0 ; } -EXPORT_SYMBOL_GPL (serial_synth_probe); +EXPORT_SYMBOL_GPL (spk_serial_synth_probe);/* Main loop of the progression thread: keep eating from the buffer * and push to the serial port, waiting as needed
@@ -79,9 +79,9 @@ void spk_do_catch_up(struct spk_synth *sint delay_time_val;int full_time_val; - jiffy_delta =get_var (JIFFY ); - full_time =get_var (FULL ); - delay_time =get_var (DELAY ); + jiffy_delta =spk_get_var (JIFFY ); + full_time =spk_get_var (FULL ); + delay_time =spk_get_var (DELAY );spk_lock (flags); jiffy_delta_val = jiffy_delta->u.n.value;
@@ -139,7 +139,7 @@ const char *spk_synth_immediate(struct swhile ((ch = *buff)) {if (ch =='\n' ) ch = synth->procspeech; -if (wait_for_xmitr ()) +if (spk_wait_for_xmitr ())outb (ch, speakup_info.port_tts);else return buff;
@@ -166,7 +166,7 @@ int spk_synth_is_alive_restart(struct sp {if (synth->alive)return 1 ; -if (!synth->alive &&wait_for_xmitr () >0 ) { +if (!synth->alive &&spk_wait_for_xmitr () >0 ) {/* restart */ synth->alive =1 ;synth_printf ("%s" , synth->init);
@@ -192,20 +192,20 @@ void synth_start(void)synth_buffer_clear ();return ; } - trigger_time =get_var (TRIGGER ); + trigger_time =spk_get_var (TRIGGER );if (!timer_pending (&thread_timer))mod_timer (&thread_timer, jiffies +msecs_to_jiffies (trigger_time->u.n.value)); } -void do_flush (void ) +void spk_do_flush (void ) { speakup_info.flushing =1 ;synth_buffer_clear ();if (synth->alive) { -if (pitch_shift) { -synth_printf ("%s" , pitch_buff); - pitch_shift =0 ; +if (spk_pitch_shift) { +synth_printf ("%s" , spk_pitch_buff); + spk_pitch_shift =0 ; } }wake_up_interruptible_all (&speakup_event);
@@ -241,7 +241,7 @@ EXPORT_SYMBOL_GPL(synth_printf);static int index_count;static int sentence_count; -void reset_index_count (int sc) +void spk_reset_index_count (int sc) {static int first =1 ;if (first)
@@ -277,7 +277,7 @@ void synth_insert_next_index(int sent_nu } } -void get_index_count (int *linecount,int *sentcount) +void spk_get_index_count (int *linecount,int *sentcount) {int ind = synth->get_index ();if (ind) {
@@ -384,7 +384,7 @@ static int do_synth_init(struct spk_syntfor (var = synth->vars; (var->var_id >=0 ) && (var->var_id <MAXVARS ); var++)speakup_register_var (var); -if (!quiet_boot) +if (!spk_quiet_boot)synth_printf ("%s found\n" , synth->long_name);if (synth->attributes.name &&sysfs_create_group (speakup_kobj, &(synth->attributes)) <0 )
@@ -412,7 +412,7 @@ void synth_release(void)sysfs_remove_group (speakup_kobj, &(synth->attributes));for (var = synth->vars; var->var_id !=MAXVARS ; var++)speakup_unregister_var (var->var_id); -stop_serial_interrupt (); +spk_stop_serial_interrupt (); synth->release (); synth =NULL ; }
@@ -460,4 +460,4 @@ void synth_remove(struct spk_synth *in_s }EXPORT_SYMBOL_GPL (synth_remove); -short punc_masks[] = {0 ,SOME ,MOST ,PUNC ,PUNC |B_SYM }; +short spk_punc_masks[] = {0 ,SOME ,MOST ,PUNC ,PUNC |B_SYM };
drivers/staging/speakup/thread.c +2 -2
@@ -23,8 +23,8 @@ int speakup_thread(void *data)DEFINE_WAIT (wait);while (1 ) {spk_lock (flags); - our_sound = unprocessed_sound; - unprocessed_sound.active =0 ; + our_sound = spk_unprocessed_sound; + spk_unprocessed_sound.active =0 ;prepare_to_wait (&speakup_event, &wait,TASK_INTERRUPTIBLE ); should_break = kthread_should_stop() ||
drivers/staging/speakup/varhandlers.c +33 -33
174 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 2/6 ext4: atomically set inode->i_flags in ext4_set_inode_flags()
In reply to Greg Kroah-Hartman3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 00a1a053ebe5febcfc2ec498bd894f035ad2aa06 upstream.
Use cmpxchg() to atomically set i_flags instead of clearing out the S_IMMUTABLE, S_APPEND, etc. flags and then setting them from the EXT4_IMMUTABLE_FL, EXT4_APPEND_FL flags, since this opens up a race where an immutable file has the immutable flag cleared for a brief window of time.
--- fs/ext4/inode.c | 15 +++++++++------ include/linux/bitops.h | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-)
fs/ext4/inode.c +9 -6
@@ -37,6 +37,7 @@#include <linux/printk.h> #include <linux/slab.h> #include <linux/ratelimit.h> +#include <linux/bitops.h> #include "ext4_jbd2.h" #include "xattr.h"
@@ -3580,18 +3581,20 @@ int ext4_get_inode_loc(struct inode *inovoid ext4_set_inode_flags (struct inode *inode) {unsigned int flags =EXT4_I (inode)->i_flags; +unsigned int new_fl =0 ; - inode->i_flags &= ~(S_SYNC |S_APPEND |S_IMMUTABLE |S_NOATIME |S_DIRSYNC );if (flags &EXT4_SYNC_FL ) - inode->i_flags |=S_SYNC ; + new_fl |=S_SYNC ;if (flags &EXT4_APPEND_FL ) - inode->i_flags |=S_APPEND ; + new_fl |=S_APPEND ;if (flags &EXT4_IMMUTABLE_FL ) - inode->i_flags |=S_IMMUTABLE ; + new_fl |=S_IMMUTABLE ;if (flags &EXT4_NOATIME_FL ) - inode->i_flags |=S_NOATIME ; + new_fl |=S_NOATIME ;if (flags &EXT4_DIRSYNC_FL ) - inode->i_flags |=S_DIRSYNC ; + new_fl |=S_DIRSYNC ; +set_mask_bits (&inode->i_flags, +S_SYNC |S_APPEND |S_IMMUTABLE |S_NOATIME |S_DIRSYNC , new_fl); }/* Propagate flags from i_flags to EXT4_I(inode)->i_flags */
include/linux/bitops.h +15 -0
@@ -185,6 +185,21 @@ static inline unsigned long __ffs64(u64#ifdef __KERNEL__ +#ifndef set_mask_bits +#define set_mask_bits (ptr, _mask, _bits) \ +({ \ + const typeof(*ptr) mask = (_mask), bits = (_bits); \ + typeof(*ptr) old, new; \ + \ + do { \ + old = ACCESS_ONCE(*ptr); \ + new = (old & ~mask) | bits; \ + } while (cmpxchg(ptr, old, new) != old); \ + \ + new; \ +}) +#endif +#ifndef find_last_bit/** * find_last_bit - find the last set bit in a memory region
Greg Kroah-Hartman
maintainerPATCH 3/6 Input: synaptics - add manual min/max quirk
In reply to Greg Kroah-Hartman3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <[email protected]>
commit 421e08c41fda1f0c2ff6af81a67b491389b653a5 upstream.
The new Lenovo Haswell series (-40's) contains a new Synaptics touchpad. However, these new Synaptics devices report bad axis ranges. Under Windows, it is not a problem because the Windows driver uses RMI4 over SMBus to talk to the device. Under Linux, we are using the PS/2 fallback interface and it occurs the reported ranges are wrong.
Of course, it would be too easy to have only one range for the whole series, each touchpad seems to be calibrated in a different way.
We can not use SMBus to get the actual range because I suspect the firmware will switch into the SMBus mode and stop talking through PS/2 (this is the case for hybrid HID over I2C / PS/2 Synaptics touchpads).
So as a temporary solution (until RMI4 land into upstream), start a new list of quirks with the min/max manually set.
--- drivers/input/mouse/synaptics.c | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
drivers/input/mouse/synaptics.c +47 -0
@@ -232,11 +232,22 @@ static int synaptics_identify(struct psm* Read touchpad resolution and maximum reported coordinates * Resolution is left zero if touchpad does not support the query */ + +static const int *quirk_min_max; +static int synaptics_resolution (struct psmouse *psmouse) {struct synaptics_data *priv = psmouse->private;unsigned char resp[3 ]; +if (quirk_min_max) { + priv->x_min = quirk_min_max[0 ]; + priv->x_max = quirk_min_max[1 ]; + priv->y_min = quirk_min_max[2 ]; + priv->y_max = quirk_min_max[3 ]; +return 0 ; + } +if (SYN_ID_MAJOR (priv->identity) <4 )return 0 ;
@@ -1412,10 +1423,46 @@ static const struct dmi_system_id __init { } }; +static const struct dmi_system_id min_max_dmi_table[]__initconst = { +#if defined(CONFIG_DMI) + { +/* Lenovo ThinkPad Helix */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"ThinkPad Helix" ), + }, + .driver_data = (int []){1024 ,5052 ,2258 ,4832 }, + }, + { +/* Lenovo ThinkPad T440s */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"ThinkPad T440" ), + }, + .driver_data = (int []){1024 ,5112 ,2024 ,4832 }, + }, + { +/* Lenovo ThinkPad T540p */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"ThinkPad T540" ), + }, + .driver_data = (int []){1024 ,5056 ,2058 ,4832 }, + }, +#endif + { } +}; +void __init synaptics_module_init (void ) { +const struct dmi_system_id *min_max_dmi; + impaired_toshiba_kbc =dmi_check_system (toshiba_dmi_table); broken_olpc_ec =dmi_check_system (olpc_dmi_table); + + min_max_dmi =dmi_first_match (min_max_dmi_table); +if (min_max_dmi) + quirk_min_max = min_max_dmi->driver_data; }static int __synaptics_init (struct psmouse *psmouse,bool absolute_mode)
Greg Kroah-Hartman
maintainerPATCH 4/6 Input: synaptics - add manual min/max quirk for ThinkPad X240
In reply to Greg Kroah-Hartman3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 8a0435d958fb36d93b8df610124a0e91e5675c82 upstream.
This extends Benjamin Tissoires manual min/max quirk table with support for the ThinkPad X240.
--- drivers/input/mouse/synaptics.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/input/mouse/synaptics.c +8 -0
@@ -1434,6 +1434,14 @@ static const struct dmi_system_id min_ma .driver_data = (int []){1024, 5052, 2258, 4832}, }, { +/* Lenovo ThinkPad X240 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X240"), + }, + .driver_data = (int []){1232, 5710, 1156, 4696}, + }, + {/* Lenovo ThinkPad T440s */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Greg Kroah-Hartman
maintainerPATCH 5/6 x86: fix boot on uniprocessor systems
In reply to Greg Kroah-Hartman3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Artem Fetishev <[email protected]>
commit 825600c0f20e595daaa7a6dd8970f84fa2a2ee57 upstream.
On x86 uniprocessor systems topology_physical_package_id() returns -1 which causes rapl_cpu_prepare() to leave rapl_pmu variable uninitialized which leads to GPF in rapl_pmu_init().
See arch/x86/kernel/cpu/perf_event_intel_rapl.c.
It turns out that physical_package_id and core_id can actually be retreived for uniprocessor systems too. Enabling them also fixes rapl_pmu code.
--- arch/x86/include/asm/topology.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/include/asm/topology.h +2 -1
@@ -157,9 +157,10 @@ static inline void setup_node_to_cpumaskextern const struct cpumask *cpu_coregroup_mask (int cpu); -#ifdef ENABLE_TOPO_DEFINES #define topology_physical_package_id (cpu) (cpu_data(cpu).phys_proc_id)#define topology_core_id (cpu) (cpu_data(cpu).cpu_core_id) + +#ifdef ENABLE_TOPO_DEFINES #define topology_core_cpumask (cpu) (per_cpu(cpu_core_map, cpu))#define topology_thread_cpumask (cpu) (per_cpu(cpu_sibling_map, cpu))
Greg Kroah-Hartman
maintainerPATCH 6/6 netfilter: nf_conntrack_dccp: fix skb_header_pointer API usages
In reply to Greg Kroah-Hartman3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Borkmann <[email protected]>
commit b22f5126a24b3b2f15448c3f2a254fc10cbc2b92 upstream.
Some occurences in the netfilter tree use skb_header_pointer() in the following way ...
struct dccp_hdr _dh, *dh; ... skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
... where dh itself is a pointer that is being passed as the copy buffer. Instead, we need to use &_dh as the forth argument so that we're copying the data into an actual buffer that sits on the stack.
Currently, we probably could overwrite memory on the stack (e.g. with a possibly mal-formed DCCP packet), but unintentionally, as we only want the buffer to be placed into _dh variable.
--- net/netfilter/nf_conntrack_proto_dccp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
net/netfilter/nf_conntrack_proto_dccp.c +3 -3
@@ -431,7 +431,7 @@ static bool dccp_new(struct nf_conn *ct,const char *msg;u_int8_t state; - dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &dh); + dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &_dh);BUG_ON (dh ==NULL ); state = dccp_state_table[CT_DCCP_ROLE_CLIENT ][dh->dccph_type][CT_DCCP_NONE ];
@@ -488,7 +488,7 @@ static int dccp_packet(struct nf_conn *cu_int8_t type, old_state, new_state;enum ct_dccp_roles role; - dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &dh); + dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &_dh);BUG_ON (dh ==NULL ); type = dh->dccph_type;
@@ -579,7 +579,7 @@ static int dccp_error(struct net *net, sunsigned int cscov;const char *msg; - dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &dh); + dh =skb_header_pointer (skb, dataoff,sizeof (_dh), &_dh);if (dh ==NULL ) { msg ="nf_ct_dccp: short packet " ; goto out_invalid;
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.4.86 release. There are 6 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu Apr 3 03:28:04 UTC 2014. Anything received after that time might be too late.
Quoted 7 lines
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.4.86-rc1.gzand the diffstat can be found below.
thanks,
greg k-h
Compiled, booted on all my test systems. No regressions in dmesg.
-- Shuah
Signature · 4 lines
Shuah Khan Senior Linux Kernel Developer - Open Source Group Samsung Research America(Silicon Valley) [email protected] | (970) 672-0658
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.4.86 release. There are 6 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu Apr 3 03:28:04 UTC 2014. Anything received after that time might be too late.
Build results:
total: 119 pass: 97 skipped: 18 fail: 4
Qemu tests all passed. Results are as expected.
Details are available at http://server.roeck-us.net:8010/builders.
Guenter