Messages in this thread | | | Date | Wed, 29 Apr 1998 01:05:01 +0200 (CEST) | From | Andrea Arcangeli <> | Subject | lp interrupt patch |
| |
Some people was having troubles with lp interrupt driven. Great thanks to Andreas Muck <andi@koala.rhein-neckar.de>, "Garst R. Reese" <reese@isn.net>, Anthony DeStefano <destefano@usa.net> that alpha-testing my _lot_ of patches made me able to discovered the lp bug (or better to develop a workaround ;-).
The problem is pretty simple (now that I just discovered it ;-). HP Deskjet (for example) reput ACK low and so generate an interrupt before to be ready and so before to put BUSY high. The current lp code check if BUSY is high or ACK is low and if this result false it thinks that the interrupt is not yet happened and so go to sleep on the interrupt.
For some printer instead the interrupt could be just happened and so we can' t more take care of the state of the printer to know if we must wait or not the interrupt.
In this patch I implemented the workaround.
This patch make also configurable (via editing lp.c) LP_STATS and LP_NEED_CAREFUL since I am pretty sure nobody is using it. If somebody has strange hardware or so on, he only need to exchange #undef LP_NEED_CAREFUL with #define LP_NEED_CAREFUL 1 (does the same with LP_STATS if he like to compile the status staff) and all future patches will apply cleanly and all will be fine for him, and LP_STATS and LP_CAREFUL will not slowdown us. Theorically we could make them CONFIG options but as I just said I think nobody is using it.
I also fixed a possible race conditions in lp_open in SMP system due not atomic operation. To do that I added a spinlock to lp_struct. Since lp_struct is a static area I tried to initialize the spinlock as usual. Unfortunately this code doesn' t compile.
[0 ... LP_NO-1] = {NULL, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, #ifdef LP_STATS 0, 0, {0}, #endif NULL, 0, 0, SPIN_LOCK_UNLOCKED }
SPIN_LOCK_UNLOCKED on my UP kernel means {} and unfortunately gcc2.7.2.3 segfault (sig11) if I try to use SPIN_LOCK_UNLOCKED there. egcs compile the same code fine so it' s really a compiler bug. Since I think it' s better take 2.7.2.3 compatibilty instead of force people to use egcs ;-) I didn' t initialized the spinlock in the static area (leaving it as the last field) and I do it by hand at runtime.
The patch for now is tested by me, Andreas, Anthony and Garst and works great for us.
If all is OK next days I will forward the patch to Linus.
Andrea[s] Arcangeli
Patch against 2.1.98:
begin 644 lp-interrupt-2.1.98-3.0.diff.gz M'XL("`5?1C4"`VQP+6EN=&5R<G5P="TR+C$N.3@M,RXP+F1I9F8`M5M]<]I( MTO];_A23V[H$#,(2&/RV]H782M85Q^8PKKU]]K940AI`:R&QDHC#);G/?MT] M,WH!83N;?5*[-M;,]/3TZV]:C:[K+/##Y:<]+_8_\CC9<V=.O!<L6JYF'AT= M[AG[>^U]9G:/][O'W8YFMLR=1J/Q])I#9AX>M]O'IKGS^C73S4[SB#7@IVFR MUZ]W&-MEP<*.N>.QVFWJI,N$X1]CQ[VOLV2Y6$1QRAS/XQX;K]BY$R<I#]F[ M.$J2)JW^EG^N6/XZB8+60S0+9]R?MY:AKR^#><OC1.]6[CF)8K9P8OH,.P]F M?N`OV)M@&7H\"-B/XD%+/7B]B,;1IY8;S<]V="`CE]H)2,0/IVP&!\+?0*H? M>G!$UH]=)YSRP&<_.NKCZSD2^6/)>=CRT[.=!E`:2":^CQ(>[:W_"<1XS^.0 M!W8MC?8F<32OV\N$QVS.YU&\8FZT6+$T8NZ,N_<D`Q['49S0>@W^P:Y#WP5! M>A%[Z[@P+TUAWXG_G[$3OD[]G&^Q6SKCS`]3H+)<I,![Z`7(/$DWIH&$.0G[ M:<`N>'+_.T]AA9.R*0]Y[*2<*#EA@<28PUJ./(XYF<JJR8X.C?WV095$6LCX MW@[;87N[;#3S$R9,%:09+0.O"82113AZDSU$\3U[\-,9;+A"!3I!P`-&PB>F M9L"H$Y(9'W31@!L'!TUSG^SX!S]T@Z7'V8_2(WC@K%JS,]QZ?4S:!HXV?D#S MF;"K@7T[ZH]NBP^N+>O"/N\/K;=W5YM$P,O6J3O)?,^/_Z#GY:=+T!1/DHJ1 M9`4>,1>LE`<6?AA$[KW<!<3G3]@J6H(4/G(V)QV`.EDGTV,3U`%F-`;I@G:` M&&@BX722&U+"#W`P/U1/.B3(0Y#@`6L<M9N=-@DR2>.EFV)0R#^ESCC@O]*R MW]CI#ON\P[1?#=9JM00MW83'[//UW=55DQE-?'AY?3FRSW_J#_._1I<?K/RO MG_N7H^:.#B8-@2%;*?[[;'S]NM,H#*%P)F4]B=%L/D[AH>=/2NO$N'JTMZL^ M@5'_#$)<)BG(R4]])_#_P\E7E-AMC#J%Z>@Y#&PP7H:I/R?[=SY&OL>FKLO: MK8-6N]4I3$_X=.(L@S1IY0_W<C[8[>#RVKZZ.7]OWUWC+^L"QK_NL*\GRE<X M\C91RF6^B,LK5D-&HD7J1R'XQXJ<(HQ$F(#P`2+`H:1.^^526S/FW!*&5O_B ME]K<#Z.X"<K'#%!G_X88RFHU&'XKANKL)4Z6!.KL'\S._Y0TU.)C)C^*-8,W M=[>_U.L02;Z'8O:Y1+-XD/+2C0.Q[]G>+&RU?1Y)K7#XFN+T"WZXN1L-^O3I MUKJRSB_HHS4<W@P']3H[/87E#6(R/^DW$Y!YMKQN<S;Z2I!`<'_*#BK%7EKV MJ-3-S"DQ3F:!]<)Z<_>N^``7RZ>$48S#YB&`E#;^PICT61UL,SKM!HL$8D]M M<Z!.R8ZC0^ER-?A3[<'Q4TC+2VX[;@JIB-5>`@G]S.,?]3,<M/\`P]+7D,N# M<\_MY<+.\J`/$;%BY0GI\*F]LFT:W[!-M@/+I`%QXB(*7P%`<],E18.8!Q3T M,911X@RC!XK]\E_,TV4<,O-$"+I[T.Q`&C4ACW9Z).H=4I[O0EP,4,7`"0H5 M@64-?\`?^*M)`\*34#^ZAG\+O8,,M&68^-,0\`>M4<]9_ARGXXE`=T9I((@` MGK@1A%DQM!'YF5;4M9,F;)=^G12-34.`4SLYJ0-O$'51&4C?">P%S@FG-7<9 MQSQ,40D0E:5<<#]-$WD"HOCUS<AZP8:053&IUL((0O(<Q>H`=S,>\[H`)D"^ MA+/D\@<?@.K,6<"6S%L2>`2>5W[`O5H=))CB.0,/@=3<3Q+NM<1"4)>FT4P> M>#)<H8PT&5E.68Q6SK(A><(M7BQ..(;T<4]4<&JC(45\2DX,>5H2J^.,@CCT MC/3@YNKJ\OI=-@]&/E/^?G1K7<OWAL]?&08>EB]\\?C*$B,:!:UUBL`P_`]G M)+6!V&_>-X7]KZ=.U!A+(O80^ZEP$;3.%JU"F3_87AHK/H2=U[<8()K=*7LI MGQ5T1$/Z&:Y-&HV"30)[`G"0U2L4[=!5`I09@1',_.FLR0AH3)#QTBA0`/\- MH@>8X;I1[-'0@KLMQFZC.<_A?,C1O](FB^"(\+>'(:(E$*`_H9AKVPF`8->V M11@XHGC;;G<0"Q*:)DF#5Q*,KIEX-'D0'0\"G''%=2`BC`[B<W/Q98EGP+[0 M'PCZ!F2K\W&-?A?LRKK(S(K\KVH#&'CN#B*Y:>3Z&7RE9;^U`*!3V.`RO#R+ M:O9Y9%W3#@!/JPP#.%\N/"2.6B:@2.$T@8B:""/#4PO?.V/26.;.)YR.L8KE M-/-\V#;;S1[H9[_7%.K11"H4B[D3DDGI(FH6C#`;@OS8[G81EJX--&2D;3!( MMG6VQ]K=7I$`I#9<7#/A=I>OAJ=U6"(I]/9Q(:PO!^`\T["OXA1MHVEVX!A= MN+MU55[7JC*Z+?>M2.H,AFS?HZRN;<VQ-N7DM90.FMZ67C?G*P-]A'R>Q9^D MG!.%R>IAT1*%F/+L2U<+F$BPOK:1:ZLB,OLBC'1H61\&H]RC*`-6^=HC"R`' MR/RHGRD61_W;]S9ZP'!X-QA=OKFR3DKST-JC)1K;[_YDXO,$;`/(XZT/D*O< M^D2F-E6>D7@E"Z!D*!VT\T;[H"/-_6L)ED@\PN&.)G)%03PD'3FS#$$")U&` MH@Q"Y,!ZF,#'0OHE=%*`,RH-%X(_2KE\]R',KD2*P[3=B]/"((S1J;L]<O*C MC@2]E-DH6^:\,V$^6SC%8\`?:&6LM)E18&#C"M1_<S,<E=*^1(?M7K=Y`'FA M8^PW39D8"@F9U*)7HD5*L/9X.:F51"U#+%Q2@2V2Y"[,$5"2XA"X4EG-?YX0 M'7@=5"Y6=@(7_4V\F48I0,/Q*N4)[8DUSDI@6IIRLB5\(3)8TQ)"E2V86.J* MYK&S4U%1(7U(6>O6];\N;TZDWZ^KGT+E*94[ZM+1@P7%LOSQ)JTJ0]K(C(]: MFJ$BY(O*'/XGDBJPZ47"4"LUH64*Q-P@$M>/)*\W=V_?6D/[]O+_++C(BY'C MM0%Q<=)D_@5"6'REVBO)"\X*)C3AP"V94K:7.`Y!"4T5D';9!R>Y)P0)VMZH MC0I9R\J/+/MLR$.AE8+?Z=;;_MW5B$#)5\'MPPQN"Y)AXD;(1UD"7<M*[/]: M$MUO358*ZIJFZR4W@'^-QII1$\!>UWV\#`N8MJ(8IR$;Y5D*^19@/^V(;AJ[ MH,0JMVNP*G:J+%]M!D"JC,-;`*A@4%XAM,K!BI"OZ)U48;M&SD5^S.T[-Y[8 M.:<AM;`V-0DX7Y3%F`MB\S(F;KF/WW/5'&7%WV;'N24_8LMB&)EXAF:5D)3U M/\L8Q!*)[XNK=0OBR%!.('2N%=VD@!8*04KY]?^_3"278/7_P!_'R.]-D=LG M74I50V21.S_?1OA5;H8P*PKP=<^Q](3'Q*%KCS&JK]]+Q'2Z<][7WEO#:_&< M_2U8_-UC9+YX0752]G>1\``^XV44ZS+P1$+$?X=_:[+LPEWMCDV%(A6K(@`Q M48/T:HHE@#,OBP])CLK(_EI&<ZU4,,<*<>_Y,%I['I(N5H.$BA/0IK?$)%$: M*D=<S0U\O'3G9K#UIK`MVF;H0(E43<Y]!YUGM/:^$8M?A-K(H_#BB:<K+,!Z M#&<.N-;O6!T1E9HT$N4,*MFT\MG*VY["+N+0`,X*I]:F$9#-G4*Y)L`*X"E< MJGP(_B@6\!!WL(&T0E3Z&5Y:Z.:6D=T"=+YD,>!+$>3HDJ_*"T2NG=J+\C6B M?_Z>KFN5+U;$,BP)O'SY5$F^+DMOVO.+*<^RF+(1_,R9ZX2O6"K\BT7A9GU4 MJ=\/75!_2+4J?.D+8O;A"16Q5!6[8`%4DQ555_#!4-94E1/4ZF!,A<FBOHK% MU3(#)9.J-);<*!I;K$<9R_.=%Z_!F>=GZBY6#&R2EQV%6#I8+TB(^9Z??(=9 M5FOW$18*Y9#OC`SOHK2LA.::LS_'SS>O(,\)!XV2JDJ*_HZ4*&/%XWA9,*#G MX.T1>*9_&WS2OQT^Z3E\TBOA$\L%13]%Z:ZS?X"UB?UV5[4-87F"99<34<TT MZB>E.OPS<930]G;\E!<=*HXHRQ#$9+?7-`W@LG/4-$4O@[99-0!]?+B\OAG6 M)L"[?C:Q/9!^O`(_LF'8@T>^C3%(%//QFF1C4DH_TMDV*[ZH+>GH>I6QNDX0 MB&M"$27(*M@C%H,2WDHOBRVEDBN5G\\#QY]G/4MP7A&!L6LA8/3BP8WF$)2< MCXX?('%<ARI`$>X?=;$[K'MHJ+::S<*!R$\;523K7Y>W(WH+;535&QH:-E;8 MV%E1>[EQ+GB:U<\V*,MWSB*J$)5E^`2=?'=<+.KU3"M2_G*J2&>\/445*'RX MN8``?F[?W5KV^<W=]>A$VE[WT$2;:_0.S%QRFGR)(FYW^:%.V7]5V>UF8%T+ MIY,OM+9V;$"&$<T\\LEQ5@9PXFE]<Q=Q0#GYY&EV2C,S9C(D*S?'IAVQ,RS! M/Q254T!PT])B%$O/.,*X<6"8ZL6%(C2T;BU)B=H/$YZ6\.NF.)3#*0KOK!$] MR@5!A8TT$C4=*@KOUI&MYOI[NJ9*!.#=T:2V]CJY#NY)S)L4]`Y,(V->T^9\ MCJRN$\0F(P4CMA"MEFSI/&^O^N_P/*P($0NZ.GG.4<5"`'R"#Q]SBSC0@6'0 M@8[VU8%*V3Q<+R:R8D&X$(UPXB1PIHDT,G+]DHO;V%15\*2P[$:X+:E<Q4&A M_Y`P<-8'*[OA]O)VNV(C;+MS;':.C8.U1MC'%AU0]^S!L7$HQ$'"D,5V2%>7 M68HJM[W"^@Z[]J<\8.^<N8B8U-+X2,->@WJX/CA3WV7A$EORQ(62KJ>(60FP M2:@[ATL2/$O6>_0&_>$`8H1]=WT[L,XA.E>.]N]&-Y#\1,5^GUZ<]""(TUO< M8K_?H,^8\<DP3*,T`&"4B8%V>8#B$PWL&\]J))//:,FAD9OX.DV,>3C)-`S9 MZZ8@,[6[.NXLOX:WF&@:I5?X@4,OX+#S%#S#7;D!Y#$P%S\5_DJ]H`V,P(?* M7_%2!$0-T>\JD#OV<;#+X3_K:_(&!X2GR%G/Z%%OS90+Q"HQ&BZ2VEQ;BI%0 M2+%G'-)2-X(ER2(*O009+C8]/K,Q3XE3DCT29#'[4XOL:'AGH<<C]9C_L?0! M4X$,]6BB+YP%EK&CR43/A(!O9T1K@0#//NC&==((['(:11[>T(@TOF])FMFR MM_VK6XNZ2:>AZ#CE<]#)!:?F1E2+&&B)0VUHO*3PGN$\<@AG3(`%<#%<XH`= MXG,[)S1<S<JF7C%4W]T*'L;$@PQL&,95"BNOH@1%+5.TRI6K($YE?25E/<K\ MM+'OK:3@9295Z`C82!-;Y*B2@Z3%2[3`&40XSAJMBPXE*E^OJ,:E!JCM6EU/ M:^"(Z2P!>X$)"<<6TGJ+/.K(H";KH\.LR3IWY4+RSS.#?/!;"V^-U,<A6SBH M56`MO($W;2=0OM52]W,6GG\H7-IQ#X/*2@GY-\3K)]12S-L5&Y,:).N9FASL M::_63.G=4[O;HT['PFC_UJI]*F[TJ7RZL8.@K(+C]2:WBO>9ZO5!^;%X=2`; M_(P.9CG3S%)^^48D^T`V.O.PQ>.$NI$+]XN-5YV%]HV\<+-+2VESTZ0+F8E] M14<5VZ,U5C8%XD/Q6C=[KU6)!3=>Y&-HV:"8OVG1-[=2/*R+>ZVEL*$FB'H( M-H2P7?$9D<_'")-3(%Z`9\6'REX#U520WY,IPU%KV%ATI=%K^PDV_\GRF!P4 MT_.&=?I*#C6F>\".D[>B0X*<YE?K0DL[_CK)N\R%FGH(<!OFH0+IZXYZ85WU M?V%:%].U7D0@Y?:3VI->#,A2H19P?L`DUU:YF;C<GO(G"99`TEK!\@F:J-`9 M?A7J18:!24SZQI>SYG[B[HUN+FYTV<F2P\PN,XWC?>.X?;CE2UI/KC6/]WL" MTC3;X#\];)L219=VB_7!$%),/_@UKV/9W.S4V67Z"@(5L^%RG]A8<(+'XSK# MFI_"LP^JVS0$1U70RG5"2+?!2GS]!J#Y.(+,G/4/@W51E[+SUY"2;<C%]DQ% MTD];\C0N[$7?>I+U6R\2<&',Q?>OL*W;DV*@O7G,7]&W(!81N5DTG5*^4VW< M*!-G"J`!Y+\"$<LTE["'&0_7>T4Q<4(N)!358E*27IW]1/NJC*N^),><91K- ML6<%^Z^!FTO+LLSVX7[>CXEB642)2M8DSO%?2$_*=.RG^8%6XFM"233GZ<RG M#A>6.$CO9RZ_>T5;TFDI@G`GR!K+2=JUN;,:R[<R(-$ZT(:8AM_=*@KLP0E3 M@K@I?BL/1T#Y@8>J9)U6]FT^^KX2!&'O`=_TU/B4S7N']TT8#]EXL:C3_/V" M=0^N+@?(PCUG<,E%A8Q]#T"N*[[XL@?&N&<-!F19"2P'->W\#S!/!(9$.0`` ` end
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu
| |