[PARPORT] lp interrupt patch


Andrea Arcangeli (arcangeli@mbox.queen.it)
Wed, 29 Apr 1998 01:05:01 +0200 (CEST)


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$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#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]M9L"H$Y(9'W31@!L'!TUSG^SX!S]T@Z7'V8_2(M9L"H$Y(9'W31@!L'!TUSG^SX!S]T@Z7'V8_2(WC@K%JS,]QZ?4S:!HXV?D#S
MF;"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-`;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=M&&@BX722&U+"#W`P/U1/.B3(0Y#@`6L<M9N=-@DR2>.EFV)0R#^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^:.#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=.(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<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,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?">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/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`MGQ5T1$/Z&:Y-&HV"30)[`G"0U2L4[=!5`I09@1',_.FLR0AH3)#QTBA0`/\-
MH@>8X;I1[-'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.$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>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#+M8^PW39D8"@F9U*)7HD5*L/9X.:F51"U#+%Q2@2V2Y"[,$5"2XA"X4EG-?YX0
M'7@=5"Y6=@(7_4V\F48I0,/Q*N4)[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+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<=)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,-;`*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(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-`MZB>E.OPS<930]G;\E!<=*HXHRQ#$9+?7-`W@LG/4-$4O@[99-0!]?+B\OAG6
M)L"[?C:Q/9!^O`(_LF'M)L"[?C:Q/9!^O`(_LF'8@T>^C3%(%//QFF1C4DH_TMDV*[ZH+>GH>I6QNDX0
MB&M"$27(*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\\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]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?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(!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"MXG,[)S1<S<JF7C%4W]T*'L;$@PQL&,95"BNOH@1%+5.TRI6K($YE?25E/<K\
MM+'OK:MM+'OK:3@9295Z`C82!-;Y*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/*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[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%:%]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!$%),/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;M#A>6.$CO9RZ_>T5;TFDI@G`GR!K+2=JUN;,:R[<R(-$ZT(:8AM_=*@KLP0E3
M@M@K@I?BL/1T#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, send mail to: linux-parport-request@torque.net --
-- with the single word "unsubscribe" in the body of the message. --



This archive was generated by hypermail 2.0b3 on Wed 30 Dec 1998 - 10:17:41 EST