: sgiserial 7/7: ->pendregs is a WOV
PATCH 1/1 : sgiserial 7/7: ->pendregs is a WOV
Hi
->peonages[] array is a WO variable.
build/drivers/sgi/char/sgiserial.c | 49 ++++++------------------------------- build/drivers/sgi/char/sgiserial.h | 3 -- 2 files changed, 8 insertions(+), 44 deletions(-)
build/drivers/sgi/char/sgiserial.c renamed from build/drivers/sgi/char/sgiserial.c~sgiserial_remove_pendregs +8 -41
@@ -223,11 +223,9 @@ static inline void zs_rtsdtr(struct sgi_ {if (set) { ss->curregs[5 ] |= (RTS |DTR ); - ss->pendregs[5 ] = ss->curregs[5 ];write_zsreg (ss->zs_channel,5 , ss->curregs[5 ]); }else { ss->curregs[5 ] &= ~(RTS |DTR ); - ss->pendregs[5 ] = ss->curregs[5 ];write_zsreg (ss->zs_channel,5 , ss->curregs[5 ]); }return ;
@@ -285,7 +283,6 @@ static void rs_stop(struct tty_struct *tsave_flags (flags);cli ();if (info->curregs[5 ] & TxENAB) { info->curregs[5 ] &= ~TxENAB; - info->pendregs[5 ] &= ~TxENAB;write_zsreg (info->zs_channel,5 , info->curregs[5 ]); }restore_flags (flags);
@@ -302,7 +299,6 @@ static void rs_start(struct tty_struct *save_flags (flags);cli ();if (info->xmit_cnt && info->xmit_buf && !(info->curregs[5 ] & TxENAB)) { info->curregs[5 ] |= TxENAB; - info->pendregs[5 ] = info->curregs[5 ];write_zsreg (info->zs_channel,5 , info->curregs[5 ]); }restore_flags (flags);
@@ -527,13 +523,11 @@ static inline void status_handle(structif ((info->tty->termios->c_cflag &CRTSCTS ) && ((info->curregs[3 ] &AUTO_ENAB )==0 )) { info->curregs[3 ] |=AUTO_ENAB ; - info->pendregs[3 ] |=AUTO_ENAB ;write_zsreg (info->zs_channel,3 , info->curregs[3 ]); } }else {if ((info->curregs[3 ] &AUTO_ENAB )) { info->curregs[3 ] &= ~AUTO_ENAB ; - info->pendregs[3 ] &= ~AUTO_ENAB ;write_zsreg (info->zs_channel,3 , info->curregs[3 ]); } }
@@ -699,14 +693,10 @@ static int startup(struct sgi_serial * i* Finally, enable sequencing and interrupts */ info->curregs[1 ] |= (info->curregs[1 ] & ~0x18 ) | (EXT_INT_ENAB |INT_ALL_Rx); - info->pendregs[1 ] = info->curregs[1 ]; info->curregs[3 ] |= (RxENABLE | Rx8); - info->pendregs[3 ] = info->curregs[3 ];/* We enable Tx interrupts as needed. */ info->curregs[5 ] |= (TxENAB | Tx8); - info->pendregs[5 ] = info->curregs[5 ]; info->curregs[9 ] |= (NV |MIE ); - info->pendregs[9 ] = info->curregs[9 ];write_zsreg (info->zs_channel,3 , info->curregs[3 ]);write_zsreg (info->zs_channel,5 , info->curregs[5 ]);write_zsreg (info->zs_channel,9 , info->curregs[9 ]);
@@ -808,58 +798,44 @@ static void change_speed(struct sgi_sericase CS5 : info->curregs[3 ] &= ~(0xc0 ); info->curregs[3 ] |= Rx5; - info->pendregs[3 ] = info->curregs[3 ]; info->curregs[5 ] &= ~(0xe0 ); info->curregs[5 ] |= Tx5; - info->pendregs[5 ] = info->curregs[5 ];break ;case CS6 : info->curregs[3 ] &= ~(0xc0 ); info->curregs[3 ] |= Rx6; - info->pendregs[3 ] = info->curregs[3 ]; info->curregs[5 ] &= ~(0xe0 ); info->curregs[5 ] |= Tx6; - info->pendregs[5 ] = info->curregs[5 ];break ;case CS7 : info->curregs[3 ] &= ~(0xc0 ); info->curregs[3 ] |= Rx7; - info->pendregs[3 ] = info->curregs[3 ]; info->curregs[5 ] &= ~(0xe0 ); info->curregs[5 ] |= Tx7; - info->pendregs[5 ] = info->curregs[5 ];break ;case CS8 :default :/* defaults to 8 bits */ info->curregs[3 ] &= ~(0xc0 ); info->curregs[3 ] |= Rx8; - info->pendregs[3 ] = info->curregs[3 ]; info->curregs[5 ] &= ~(0xe0 ); info->curregs[5 ] |= Tx8; - info->pendregs[5 ] = info->curregs[5 ];break ; } info->curregs[4 ] &= ~(0x0c ); -if (cflag &CSTOPB ) { +if (cflag &CSTOPB ) info->curregs[4 ] |=SB2 ; - }else { +else info->curregs[4 ] |=SB1 ; - } - info->pendregs[4 ] = info->curregs[4 ]; -if (cflag &PARENB ) { + +if (cflag &PARENB ) info->curregs[4 ] |=PAR_ENA ; - info->pendregs[4 ] |=PAR_ENA ; - }else { +else info->curregs[4 ] &= ~PAR_ENA ; - info->pendregs[4 ] &= ~PAR_ENA ; - } -if (!(cflag &PARODD )) { + +if (!(cflag &PARODD )) info->curregs[4 ] |=PAR_EVEN ; - info->pendregs[4 ] |=PAR_EVEN ; - }else { +else info->curregs[4 ] &= ~PAR_EVEN ; - info->pendregs[4 ] &= ~PAR_EVEN ; - }/* Load up the new values */ load_zsregs (info->zs_channel, info->curregs);
@@ -1037,10 +1013,8 @@ static int rs_write(struct tty_struct **/ /* Enable transmitter */ info->curregs[1 ] |= TxINT_ENAB|EXT_INT_ENAB ; - info->pendregs[1 ] |= TxINT_ENAB|EXT_INT_ENAB ;write_zsreg (info->zs_channel,1 , info->curregs[1 ]); info->curregs[5 ] |= TxENAB; - info->pendregs[5 ] |= TxENAB;write_zsreg (info->zs_channel,5 , info->curregs[5 ]);/*
@@ -1113,10 +1087,8 @@ static void rs_flush_chars(struct tty_st/* Enable transmitter */ save_flags (flags);cli (); info->curregs[1 ] |= TxINT_ENAB|EXT_INT_ENAB ; - info->pendregs[1 ] |= TxINT_ENAB|EXT_INT_ENAB ;write_zsreg (info->zs_channel,1 , info->curregs[1 ]); info->curregs[5 ] |= TxENAB; - info->pendregs[5 ] |= TxENAB;write_zsreg (info->zs_channel,5 , info->curregs[5 ]);/*
@@ -1166,7 +1138,6 @@ static void rs_throttle(struct tty_struc/* Turn off RTS line */ cli (); info->curregs[5 ] &= ~RTS ; - info->pendregs[5 ] &= ~RTS ;write_zsreg (info->zs_channel,5 , info->curregs[5 ]);sti (); }
@@ -1194,7 +1165,6 @@ static void rs_unthrottle(struct tty_str/* Assert RTS line */ cli (); info->curregs[5 ] |=RTS ; - info->pendregs[5 ] |=RTS ;write_zsreg (info->zs_channel,5 , info->curregs[5 ]);sti (); }
@@ -1521,10 +1491,8 @@ static void rs_close(struct tty_struct **/ /** if (!info->iscons) ... **/ info->curregs[3 ] &= ~RxENABLE; - info->pendregs[3 ] = info->curregs[3 ];write_zsreg (info->zs_channel,3 , info->curregs[3 ]); info->curregs[1 ] &= ~(0x18 ); - info->pendregs[1 ] = info->curregs[1 ];write_zsreg (info->zs_channel,1 , info->curregs[1 ]);ZS_CLEARFIFO (info->zs_channel);
@@ -2245,7 +2213,6 @@ static int __init zs_console_setup(struc zscons_regs[12 ] = brg &0xff ; zscons_regs[13 ] = (brg >>8 ) &0xff ;memcpy (info->curregs, zscons_regs,sizeof (zscons_regs)); -memcpy (info->pendregs, zscons_regs,sizeof (zscons_regs));load_zsregs (info->zs_channel, zscons_regs);ZS_CLEARERR (info->zs_channel);ZS_CLEARFIFO (info->zs_channel);
build/drivers/sgi/char/sgiserial.h renamed from build/drivers/sgi/char/sgiserial.h~sgiserial_remove_pendregs +0 -3
@@ -122,9 +122,6 @@ struct sgi_serial {/* Current write register values */ unsigned char curregs[NUM_ZSREGS ]; -/* Values we need to set next opportunity */ -unsigned char pendregs[NUM_ZSREGS ]; -char change_needed;int magic;
_
Signature · 2 lines
In theory, practice and theory are the same, but in practice they are different -- Larry McVoy