summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/sfc
diff options
context:
space:
mode:
authorEdward Cree <ecree@solarflare.com>2020-09-03 22:34:42 +0100
committerJakub Kicinski <kuba@kernel.org>2020-09-05 12:21:39 -0700
commit8cb2675634ab8ec7986aa9dfe1a7a934872ef51d (patch)
treecc5855605e9a9253ab2631c892fffa9173c05aa3 /drivers/net/ethernet/sfc
parent1c0544d24927e4fad04f858216b8ea767a3bd123 (diff)
downloadlinux-8cb2675634ab8ec7986aa9dfe1a7a934872ef51d.tar.gz
linux-8cb2675634ab8ec7986aa9dfe1a7a934872ef51d.tar.bz2
linux-8cb2675634ab8ec7986aa9dfe1a7a934872ef51d.zip
sfc: make ef100 xmit_more handling look more like ef10's
This should cause no functional change; merely make there only be one design of xmit_more handling to understand. As with the EF10/Siena version, we set tx_queue->xmit_pending when we queue up a TX, and clear it when we ring the doorbell (in ef100_notify_tx_desc). While we're at it, make ef100_notify_tx_desc static since nothing outside of ef100_tx.c uses it. Signed-off-by: Edward Cree <ecree@solarflare.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/sfc')
-rw-r--r--drivers/net/ethernet/sfc/ef100_tx.c22
-rw-r--r--drivers/net/ethernet/sfc/ef100_tx.h1
2 files changed, 11 insertions, 12 deletions
diff --git a/drivers/net/ethernet/sfc/ef100_tx.c b/drivers/net/ethernet/sfc/ef100_tx.c
index 8d478c5e720e..ce1b462efd17 100644
--- a/drivers/net/ethernet/sfc/ef100_tx.c
+++ b/drivers/net/ethernet/sfc/ef100_tx.c
@@ -117,11 +117,13 @@ static efx_oword_t *ef100_tx_desc(struct efx_tx_queue *tx_queue, unsigned int in
return NULL;
}
-void ef100_notify_tx_desc(struct efx_tx_queue *tx_queue)
+static void ef100_notify_tx_desc(struct efx_tx_queue *tx_queue)
{
unsigned int write_ptr;
efx_dword_t reg;
+ tx_queue->xmit_pending = false;
+
if (unlikely(tx_queue->notify_count == tx_queue->write_count))
return;
@@ -131,7 +133,6 @@ void ef100_notify_tx_desc(struct efx_tx_queue *tx_queue)
efx_writed_page(tx_queue->efx, &reg,
ER_GZ_TX_RING_DOORBELL, tx_queue->queue);
tx_queue->notify_count = tx_queue->write_count;
- tx_queue->xmit_pending = false;
}
static void ef100_tx_push_buffers(struct efx_tx_queue *tx_queue)
@@ -372,15 +373,14 @@ int ef100_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
netif_tx_start_queue(tx_queue->core_txq);
}
- if (__netdev_tx_sent_queue(tx_queue->core_txq, skb->len, xmit_more))
- tx_queue->xmit_pending = false; /* push doorbell */
- else if (tx_queue->write_count - tx_queue->notify_count > 255)
- /* Ensure we never push more than 256 packets at once */
- tx_queue->xmit_pending = false; /* push */
- else
- tx_queue->xmit_pending = true; /* don't push yet */
+ tx_queue->xmit_pending = true;
- if (!tx_queue->xmit_pending)
+ /* If xmit_more then we don't need to push the doorbell, unless there
+ * are 256 descriptors already queued in which case we have to push to
+ * ensure we never push more than 256 at once.
+ */
+ if (__netdev_tx_sent_queue(tx_queue->core_txq, skb->len, xmit_more) ||
+ tx_queue->write_count - tx_queue->notify_count > 255)
ef100_tx_push_buffers(tx_queue);
if (segments) {
@@ -399,7 +399,7 @@ err:
/* If we're not expecting another transmit and we had something to push
* on this queue then we need to push here to get the previous packets
- * out. We only enter this branch from before the 'Update BQL' section
+ * out. We only enter this branch from before the xmit_more handling
* above, so xmit_pending still refers to the old state.
*/
if (tx_queue->xmit_pending && !xmit_more)
diff --git a/drivers/net/ethernet/sfc/ef100_tx.h b/drivers/net/ethernet/sfc/ef100_tx.h
index fa23e430bdd7..ddc4b98fa6db 100644
--- a/drivers/net/ethernet/sfc/ef100_tx.h
+++ b/drivers/net/ethernet/sfc/ef100_tx.h
@@ -17,7 +17,6 @@
int ef100_tx_probe(struct efx_tx_queue *tx_queue);
void ef100_tx_init(struct efx_tx_queue *tx_queue);
void ef100_tx_write(struct efx_tx_queue *tx_queue);
-void ef100_notify_tx_desc(struct efx_tx_queue *tx_queue);
unsigned int ef100_tx_max_skb_descs(struct efx_nic *efx);
void ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event);
ӽd4{oQs3'cs?Tަ߼b_'Op8[O.8X\eO. /7^\"N:iq3@xCu ?U=CYx[5Y'EIl{i{bAt䵌q^M%d/7ޑwKϋʾpI_Ӥj~cb/ W_Kmg'mu3Tc%UUmD&GZ,~!ٶsC :5M4ZM,X,y D'ĭWY7n9tHxFƘ_۷o|:ZשAp>,wL !zqA*]kKwZS/9n mv^dZP=5_D /e$.oq#1^*w.a#L]]$_QFP1dAC%:)V׮wb{ 0Qe",EJ%Ov;uJB/m_;' X{L8y[^ yJ(';[,/Q#8P]8#0#rh)Qo]7NSnoQT&ٷдR0B'a[F_zb|Ҟn R>(i,hb7 V/6;s"\;#Uza%זz19*uXbDžeFT]=ܢZnƺi69لO 4=;1~n7fNɉobtjZtYN6 |p ~Lu$XYzhwh[ƼD_CWmv;꜡WvISg:D yݫY o&#J^._}s?DL,uK(/۰z9{]:h'Njrws1PH" zd__9= pB'=E_H]b ci>sm{ӓeij6eodfO;Rq:PxEH֢Y}6'N 1.q3^?ڄA}#mv7ż =}93vGRBF u\{- V#q2j vҢ@=-'FeՑ{$\梖h0:"Ȏ OE /#E@X]iˬ-UaZ#XC /u.EgyGuz:)$t_&\=]*iswipWdW$X!sk!u 0gyXz@A26CeʹzHMGl1}|MԸA."J _UIC5v8^]Q~Еy&x&fUGFiUE2Zdv[ WXju"mrEo gepr_Jl F MGC}mbރG{'dU.(grDo_PĺI:(RV.{]$< xS;j8V }[iV-< }e="p*'PG^NJ| Wbm:% {gg%{kO;wg"JG {icߛtHΨ BJkOMcosmjM&-#y p/fyy!j$,SqoI ȶ l~Gn]R N rrb?.i lZ7Q wz~imA155o}Ui_ ٞiNe "K$5a*mZm"g0Dޟ57$i&MH%AFpAr8'p/$#'ʑ9Oy?vS5#2Xudf*$3`nn˧[^3kьlC]L*ŃXas$'Y[1X\t>C~o ;y 4\5mҶx03Fq8#^JT7 ^AJ0* UWc- LjC8iuY^T޸V!jE3A:2:.gאDy񭹠_Gdn;Q2WJLTo-0a(@@H9!}l>^ d⎍pRP:4kb5ty6%}.^?fEŜ;9l|7E! dc` [rU'Z DI@k"{g4əsnwevGp4xýĊ9Ö!]ЪQM Bgq;G3z2Sfޭ6{ Ef~u$GSm'A;v٫Tj)ܢp! }׸ӣ7˽YǨ d;l9mCG@7 sL  zAvT˦y67j;ZȾ!sh!Cqh5rahfڰ\bgV );pP>!PzQUɐNwNZ (#Rƒq/ozçq|C7ioY@ΦYXjM~׷C?9bcd(t]ho6a<;v+obw(|ڞDrWGQlvVEtS2ԋSK˄@yZj\zo=쥱z{ՌM&(4C g(y1 QxƊeϊx~T3 iO_Xf0${>Ph+- tEn/fs@oe%~nfJNݑhW]ggONPϿ0q[:;B=hXBL ȆP-B^d|KJ# ~Pp9ը+.` rI{D .'$X׻51ӥIX')$MEaСJ6=9Gf魊 SOf$ʒDMc ~&d -S7b\2{K<7Fq^@9:FjRY*艫c؍Ņ/ԠeNjW`VoZ0[5ddo)_OۜX Q.Ök^:QRQ̈gCu)qh?d;3YRO] hԮ3ohX;j ZgXQ~,ГJS*+ ' VC]˥wU;naUlLK-V `|)Vc6oߧǢ'b=<;ZI<8g@ϐHLco7C#ҕlk h< M@ZQI+*!i/'Pfӽ\ BYjgj)+Go[@ Y퍷r,g&p:>K9J22ZQk){Z},s,wafwljheݔhT u$b+;RhÅ:SZPSUmpT@>f|,ʡ,[:"'t-Yq 6Tճ(ȩ%=*XTPKNyFD3ɶ5'u#;Pj6 Y͆VΡՉjHTi[9cL1]KQ{AȴW=?zJ =a GyF>2ż7<Ფ-,W'-ǽMEI2AU BMf@jdoTsR {6(Dy c-u#Աo$0!Ѕ5mGgf{5鹼5ZB @'[$i,` @NU']%)蜪xE-i+n&(<.h=Asuâ>Hѻ=f$CJqG,dݐfcI2[l6PV~I8.%8zԂmHYWmw/r b,ގug=.ϖ"+[r,8d_0zOzwIcbR= , xLcR[Xm(O7/ Rq/^_ir9ÞR["xɇ 7I6(ڎoY٨S-5$B;xj?H T}o}puf}nNAh유.t7}ch4+RWf@ iq $b4UҚ԰z'[ g%T3ԙaOC,wnN;oq3:Ԁ[.׍Lz|sF+iK\zvVmf_K&Ҍ?cfZŜ]lSy)_UXOf=i&~%ٲc/u^/$O-sn!fkU',q*,II˕]5D-Z+F遅?mKobPURednl醠NgMjEw(M'؎~Y񽍲z '\Bv|ŹڅUeH0:Č|mr S먠– Vf G?GA "X?>˓B1ߟ:^x>)5&eo5s7N`"qw6%|>@bN;똟j Zrƛm'pЦ@X)`p̲-,f6\gHVxTG,ZZx\|N Қ&Ȼ#Qx(Rz hjKЕ{r@3yI.dr7}blYy, gaeb;d͜)̈UA>zMW ]"Q/|>='[.׌ F !"8OqKbs)^G;y.}R5~aBsw,1S>Wo!'7?`}x RmM4eRaT$M) ҅򵍅`ÂIImSmp7jSg>ZCӯI-'4ip+c߈2kNThUjfim|,KEVaDzۈspXwTU1]ɽDz 7tZ@1F ٽIK4>ܳ{bFǣM@CshcZ:wPsc[e?gg(vSHjzZ\ 16ڜ*D7prI V4ɲzG@/! J9Ô6dvItV;@d' OOQ@N)*BZ#qix%A8g.h/ߥd$=X}/Zh}mσkMaXSgD~l*FTF+\E΂Y^\3fهqsS@?t`iV&ypXBe={ j[I 74Yk 2k%=[o⠚kC]L=͑NqRqB~!53 eyvHQ(ZRjKGkxT6b#I kPVU~f[`}3Kym6{{uR+2+mM&OmSĦynᐖRH,S )YkNHŭ7C%~e0EJ5Ykf"pY7g/7十}H 4Gǧp.SIw>fx.,\BVjdrGb?{̜+oIyxeSp9Fg .~85\Q/޽H9渙"cx$uxNy~VOӮ0uIM[&C'_֞[v qj w,g7.ؠvg (q~BTK:5X0&[J\U۔S%#%i v(-犿 JUWjGa{۩t_d5.H2h3߳&:ߍM@7FSQ4[zۆ"mݐ^Y;m _-DQ\œ=Vg ټfWߧà &,:yrI-+VPF< em-Y"X &#S~, ? M+jbyD\Z_3\:_/wtC)@ױ) z$RI C < Zt`tcSWo[iLP(s5]@%Eod\zr*]ۥ9J[ц,ywG43D3:Pc1 RhО%?Lb>?mwQklRq\&t |4W+T؊⒦[YBDdh+xAs<%r|8C/Yx!I'>Xk&!^F&VsD8M6,Q*'P>歅^C?O! gȲ{lO[>2<_Оc^z P{p6OO9E;5F eHxPx#1wީi SA}T *,A~L#hrSjciѵv 1sbDZ,j)cFR"pSr쀶[ ۲Zz0/xj6fQ{QgZ%}ZFdhҶ"YpP0vHSnePV640ԯNLנ KkU 91`S/=x<)2,I*ц$Z8̆ȆX{x2Ϥcv9E} N3Ofd|/P0Z)IGG}QOg;|^yO)VeɴhI#lʊ>AGE;nCJ0 or{•<Kz뵵lhyޟZݡ3ۑڞRǶ^j//_Q@ &)E7&zCCeYWx=QPh^ SC`Lz]V;+aJ&RQW2mtnV:7G #\idtGs9>AHW,Y2A"=*iÕJwPN!s2L{W =(ysT4)"l%<=%Y@I XBu0t:NjMJ)id[Jˀ ~P XB5Հ;"#ݳiO3 `La&iV6>R BI{32 wNj5N{WmkkU|g>Y<h"?^凊?T}ZJ3k?9 k[fԁI‘2H61gr9ۢ9󂦓S K[ HݾnmH|lj1 7$ӹA& Nb۾G$"z(} +"}P9C+Kڏ FRn*߳qr[̺"eo]k%-k/̱9\9u^!]6WݐH qPPܬe;kgSg7nBvE{pN3&܃6ÉƌB)&T=9X/U"_iRE;ZvA9iVM&NNnIGG޺}DUe粯^5qp8 G>ʘڸSo=O,m9:,x<4W "]U? 7*m C?.S;݂&f07̨ ZCCZ @U$AE>VR֔.Y* LlԀW'R ]dpNmόk45-ZoNWI5VW6*`18*ҍ.,7%:Ӥ)Bw(ܲiϘ@>.b= mgA\.btru:M!m>a ֞iRcP7µE.Zz1417&P߰$@rmCz ȡFk'4xdgb_|^VMAy[0 Ls=gL?0d6w#Zh\nf%,R2V|~;e3lxNBs 5?hY$nxBo w[v؅YJ)~1I F\$>w=Lʕ&Q:۰s:nY XeKTU%>yN,[2AE{0%мb+{oMeSs}n7q:`z7=<ī}MɣCrԽjR_V® Mëѐ*Nj5G@d:/PGc'sܜr5S ;v-3sPMn"s BVu6~jb?ܞ_ޏ?Ny3sI,XWҞ"tJIm!-DlS+_i'-l@;#CC) WX*'U*C{ꤪ'pAE;*pUT|ޚRJYS7{Ϝlӌ١̈́ic}ws@*kɮ;)FC4E!n#qI1ZzyD&Eni5zZq>0s_5Uϵ$pchFP}#*95vc-s UH&L{.g%L_99'4 I!~κP"Qe3;ω<2>^a*˒Q $V9--5MI611P ͸5Fm[, !6[Ծ Vܗ J¯9x$&V`+8άᝫw$nZkk@:q[jd@7yҹM*F0 )R+g7SVȆح0?u/"7t#zu?Kdx%t{ښ̀@-=xkU([*bc:Q]4G蕝'9~95^cjo!M[͛w6H.WŧWal@e&9>Tt F0%`_OlSiK:zbTQdȵcJA@ Ku襨gڰw%WW^}ү^UU˥RZF Ӹ x_u:$&凘4N\`9aE)ќ:MIbb#3~9]>'YԊʥY3!6jځA0.{R9$ANrםvΔDe&z+g$'~4]P'L3#0Pz&۳HLVV.'+Acko,9D{25kGp{|)ΖP)QH7j8va>_-WdL@"c$ +T}@hL2/`4cN{DIKHVعK_ 3svڸƭiKWf-h~z "naٱ=pzjO 6Jd6}G`nM_8ۏkM J!^Z~ JP{XX~RU,/îVm7Y-R*͟uM6:n:II4Y gC+xid43;uDmOH}̷EqH+0Ө'I7˃-9d$~Z*"D=;K\(J:}΢ ;XptzI-,zuڤKq(ZN*FK̩̀'V,6=SXq38SNYVD:?-o1xm3gWěY٭쬩SGm瀆(/t`"Y4 2JI7顿Y:AYZaBuQγ^64էy/ &唻>ގ`LkIEu@Srxvou*jpҊ L^ff8":ta3 [j&QLi7T7捾IPY E+fCӏ7q]xNyRAp /M5́vM`Ǚ)Z\wJKUA*W'Eo(zӥm{PwbtfW5M+zr֗Ǘ4sC5ç{VD*Et%o'%O3>_zzJ!3}eX' [|̀FMٸmX>^F#p&ї];tJ9¨v%=ɝwqV*ʍEBݖkŽ' mxZBA)rGlw90}tjoދ3R%F - Qdf_,_89˜q`(F .T0Ov!'X3nR5_3̷!Rb K>7Z35<}`ѭCzL61YN]>t%2.HHVpSqȆޖɺwG]ћp=okS$RI`LtIѵϸ)QX;'[csg#Q]*=ojk uτbܘ"D~d)ϡa:.̷sv6[<jhΏq+lj=Y$:'҆PY|h;FdiZ:Q4u{jQ^ \.cl(\EigzܨT'*/s?L rʥ>*ꎔN;="2c>LcKo32e9o.D['.3.OO Nax#G,s=) nUPzg|eݥ͑iJ;& EW! 5fy!y!!]U5 "DbT6 geS3GG #>\[k^m%`@88X VInYd,홄ޫ3pR:.WvPHj;i @$4[6T 4-Nd3bl/DY+y/Քp"DfYiιZ٨T{uU:R=5feɎW%@cZ5ߋ"T-Ut9ozίrj=Mc+/Xk[H5+UC1KKr i*Nw$H%عYM'1az ^Rӕg{6غս :ԫNWP!˜6j\z@!KpJꍲU)׍K6_ENQ-8F|KRuG Ȅ9ΖV$c4]^\||h81s$uVWhCI컟xrرӓ!aۧ`&` S8 ;/z-n(!H6~[VޠjM:w;Z' i1[Ѓ;-@ p!@NlH8x#>%h*j>@@Aջh;K =هh-hY%\dL0Dڦ.'3kkXhtaCΊHA {SBxJr%{@׵.-cT@rV=Msj.IYf=!QQ ulWVdIM+CᖽyֽIMK][t2{ǝbZtw%i\ou}&Ӎ235o8HA*f&9+*rXB7o{"{LB Έli=(9zXL'&Iv[G٨綤YrT'Y8Pl8 a٧PkhOƗf?!: ?0ժnM 0sc A΁ursrz*g[*MZGB SRBVTg5+NiT v6 )rsf=+~Doi9us5>=vTztuMFWDk| hz в:vvd^S*Jʽ e%05ڨCӘNUBS䅖FÖC~yl5uvHAf\lh&:~"9v,\z)/u4CM VO.H= z?ۛ#S,-);{WNq|="}3=5c,4.nHb rU>MQXyWk'V*(&p0RTԂC$ZUmQ (֔r韙,w=^H4z7ދ&{Š!gU¶V;WNN>$z~0vRڬII|O} Dh!ŗ_݊v`ᝆŔMO\AJ4**hXԎ\-ʨN6~?\z{{ENzH25iu9HblSKބI95 {v`A> g,:7ulRsžHTJu>ӑg;]]0Æ:gӶ'ettgoO_7i:WT7l6#Eqx!f{RܬT 墙S}纗Aԕ'w+$GnOؽ纩势lɞ{q60`JMQa.) n3ݞFb**^X%3Ag¿t~/ܺB#\86~q3z͆pfM U{|>x +hG^ z$>޵WԶ!ʎTѸfW%o=!ot^lwBY8&A&qLװ-|?*Z!B1qRnI2,2o* ªӉ3o՞9]ޅzh(8I KM'j*?'(Gv7kw3/l*lk(|4))1y`F'}6Cq:rqMZR$=;9Fc {V$=EZ|UUog2SkGz ^Gr/ {dxJU2WKzBbHC~P>K gfBZ.VfY>llPX.W)pcߵRDVI} =b۴=+,b?rW`&fN5LR&)( -DMu_F{Ҹ^֕- [ w3 lg="&%+0oI3TPnG_>>HJ woK[2-PмᅫT{R(.~V$= 4M6↩kkg+=x4X{=߫;m?Rs8)uH W]0VVc@=5ڌx!TeP%խTVg+ GKBܲ|$G2m?5l~V?+!R^uEt'jy^)7ۑ)ȟ^-R?l1)=uZ $r\I.ۑ7e1I4G,K?RmW&nl'ON.uj0q4 ^ՎTX; ?xJiExnkwnEsMjG_ O\2 94ohڨ_#_pT%%6VD"#Rmp=&;Ȓ95痷n`񅂨V_듴P$N yn|x`}o<F 9on=g^Ҵ) zE@#O3s2{ʱQDQ䆌/R>OH4-ue]i'۠W{\P8{EMG IW(!}`-U؂g2PEe;U@ sYƿ|@ EB֮^ (:Hhi?ń:~D0,hQ\u2Y14Uu Kzխ0pWNUc\ hHm$& 2aXgFګU7aDy /W2k5 |9W+ Ob:ǃ (,qh˄3t{f5瞞/Z)MLoSن&6/t3^bCj?#eַXD(lmhbva#7X8%b6AT>8k1ufP@ pts3EcϜ[@;p4"E-GC\yL3vf6٫ջ rfY'JdxrH(~gdl[s/-_Pwv1YD قhӕ!BR/n"f׷U9TSS4rxzfצ[B ^lyjxfsT[}G@FJ*k,35%Mi Kj^=#UP0 'g0cvEBߴ̰]$ȘVd"/Մ7swpbRB~pDE):90"PO\]7fvmIem` "mM0Gϝ4'78iA!v0a_YGnN%l[ľ: yx^_GLXOKGsj3q;6bZ멵1;zl>aڐ1V7ªjC/OHQhW @Iu;|MCZɉ^E -%wLqa{B.X2 v`5z( cj3P mR2΃ֿaI¶Tۯ- O9q2r5)@c*Hf g.\&e~t\^*l5H}{nECjۚBnҶg079ݏ$g3/Q =DmkN=E$gY\g֥:~.д)Q#RPqiꅺnZ1_h;(\X򽽂4T*!H^Xr$U@R+eD6|YA+HKqH ^:BiEK͟2+mRSUjt2*(+`K DJdQVR“VQ#+AND6ʰ';uU8uDw(]ǧI@V3|{++) ЂLB QI59*>#m$F3҅W!jVCjbkڊrg|Ҝ1vQ C;2z1?ӽ~= Kdg*D'G!y D),7TnׅSχ,Kךv7}0$?iT&y=zr'ДH-ZF j'zk~j^ =%ߏ1pHXD%%/Tc?|VA\4ğie=D _g1Ќ)^,vf82fYzSnDU:ݒtIUnJP5 ï%kos6^ L _/n62wkӑMM8K nXZꜾ0!3zIK7%;WEY}(}ISSWIY>`}?r\Hw˕jIzW$[݁TLF9C`LmHQDLAJ[ G^;g?N}仆Sz!I>a`Ko;Yu03.Rٜ!9 Gn_a*,بBcf鹵*1;$LxAc֗?ם~ a@y,eQHh{(&P.5Xԟ[o r2lVJ\^=5vpɇtSyeҹVp.AoM@3zUZ)ePULVK [4wUVnUF ΆJMΩ^NnZ!K["lM% 6,ЊSxg\&S-ѝAk xpW0Oh[곺\Bt?Zw4mS~*ʮy6y.|{P\ !̜7r(, S;  .Vn+j*al. -o{YZޠg6EiAY5ڠ{e dnÎL d3P&b;$6&dmuSu>h;?fH`6&3I%r0Q"qQFn8#5 7EDұuI; A>riN0*,mDcv!V Ԧ **j,Gs79'ZnT;"tݠGZɖ'_[aj \!0cRgM拃ܷs^=ujf/0uٚRHZϗRRkYC"cl%t.#`X (Yuvlf34qT̍l5SG?I 1]g f<_׌6H6יLab吨YK^":WA5.CYbWpu;ĥT+2kV&gkܶvz@JN3W3M$õ^_s,tQ$mEkrj%~>nԧrB[ʽHb/a>q-z} [TIˏ҉ҩ-ÓTb~jC֨}AdD"wvOCo$OCY$n8>cjof/:OЩIk@gM DvI(4-< B6aIqKJV|`hb͡iU{*Q273\qHc kA?`MRRӘZLc|#4?69B"VܮJ:(6S&FPҶ +K8:gecZ$+Y _b~A _|Ќk輚w*9W5 %q%dᚗꗛz^eJk(?/Dzn'Zg_ 7]{5=}I+27yZKK ks= V&Lñ)F-oB!CPe %zQCGoY9:><X>]Y=;L~'fsB=^vg%(5a3Y9wr&k;j/.,{o7?>!p:y~sZ3DIb-|YKvr^m>}c9ek@⓷ `( 6q0B3EݘܨI5Myq9zg77\\E>bhHPITR&Ԁjz~H$2/ ?{I.O_*VUUþjvito*rm(u28i1r>[zmmbǴ笌-RӵgwCML6n*(&&8UpV@USRyPUjXWTMTg0RnD\D]ELP.T <8BC1+XWqir*Jf31žbF5^)(Iu )'vM %˧A%q(i?Z~|T:~%U@a0-tA?&Qz3i_ZFV.ō Po+<tunX+ɿTfD/:Iv_4:ڿHJ%,T,`l6xDk8Ԇo}RNg^ѷX׶LџIs Rg ۊަ@ރANא$󘘑R0_hBЅ$\~1,p혇vV3Djs+1aepw /\t  4z\,ۯ퀭ȏOҨ>אּk. jo)J ;:Q!izY7VYB?OJ&qt%0t<\nzFu=X7qXH1%x`@(|*9duÕܴ BgCv8}?+TpfNK(T8xHGaù(IfO6MʐxfWŵrS' NO ˕r!Iĝл&*qj+﫠T.rj:JQHJh)깿H_iv!إŕqAqFƆo@Ǔ|`1y.ZT:c~PS}Ӌ€-uVEgfd"@guh^,ށ@bfwKu" w& (S2Hl2,RigpN7+Ԑ:[t4hp|# a,i{K Qryf(r4Cϐ<® \&5j77f'%tl~ \l`\M03 zq#ЎB PTސt䊪TZi ة>k+RdKKhgd;~5޲Q}jwǦȺwW^ y;Ѧږ?E-ٸlOZۉ ߹aեcIOp^ qIk D.sԛ.!A4pdgd6^ڪǔyX7p+#[G2X[]ٵg 'хI*6J~U#SF^AI({ U>̂ W@2-̂[d#~;x#wO$L1M㳤BIƦε52!GHm.؟IE/9>aPX;۰Gq@_bxAŽqT+_mypCHU)I 05s,?urS'׹c(9 ~nHp1w hPF-3fgsc` ^ggZÊKz\fb-ϸPExChg(Iz#U1ɸHn+.,=;Y9G ?] 0%T`sGƼmhSWZ{ Ĥ[!lжi=N>W !F> Pܻ>ңykrIwgڶOدY*PX9$kȺpD誴+ ;7R-G@zD_%&3.l*1O'GWcRÕ[¢`)լN7W$qfȢIW 0ΔԙT#+sNZYjvЁe12D%R-=:ЈP²zk>Ġ!) 5Ifb?C%h?wE"@5 Q _IwX$g+y/wc[nN)'{z_#alٴ;ݱ} mvYZkyZWo Ljhc4G;Qun\kfPAJ5I'I?C:]&d@>P!ϒ4he#& . s߲:HMs/v ^d!-495S1ٞ}, p :nXOR̹cA7 $8R;`-C;GGdbґ-nO7l-D{MȁI#"OmVŞƢ<ε)3$; dX.6z*T'MNuܷ0.{{[O(lpKZB6Ev"Lz:ѱSb+'kk ;kzԶ9]z];Dȳ{|vcS$?xo<'IYڣE}PU; OA2*]kU`Ǧ :iҐc֛%%9Yw/DPY"Ɩ?}p;ڥr8sEìhW p,^S q>X KI*X"}bRh$MUI7F07sZ'e2.*e.&UFh6-~!ެ χI0-&mOϐE/_r$LUkىQ@յ5 Ek8۶{Eߞ- s,r ;Q[(.~k ITkD.D1Q8uT)Ȟi(N\m &P|-7LlH_ )Ȉӳgzpɧp=U0WT0ld>][;C PTjѡRRybѕPHάAU4&Yl@`aiJ$\lq`1FWGIٴ4c׷5!M(]X\L`B[Fϧm-ƹ`4Ni1䆢lB8Xx0Tp~ G| gx)Nm& }qIDT]0hyf 3G=6#-찘CE}Mqo~ ,Dq':liի w@R"^a E'ȥfCޣ' X$mȩ/Ɵx%Zm=x^Q\9,y/dXa\)78Wӯ7jk뷯)4vSdz8,: >%>ɞfs5jH\;3[BsZ!1Nj:1Š7fwhjEΆ&$Y/O];+_vӿ/vsDcP(ց.fz)k[\yoXpAaSgxh֍f#u+67zM\}S+$3;iU"K)DW^°}zZY4@ۈnR3#O2' vЬp)G|FSe]EpvVV:S}D֡|HW&$CEണnw56A R+ǝ7E|VOTf2y4(Z/(xp1L2]AZT5 Z%͸YTEqRޯ xJG[xfTVh}F֒i^+o_%0ǗԦo4ʟu!./zoW҈\-)).r';N^ g _#"c֚gI#$ l:L-v(=?o溽җ'4\+5L &d%eY=l;ilޓ/OS-fch`<25$"]$ oK19 'hz9iT7=26A:.jquPz\oTcn=M_/h;o@+rl&ʧL V մwչ^U#Ke:jW28{-0 u@ma1h[D4$ S%ntR\e 8N4~R5K-<*ӻA,@+M8=.|ܞyn "|􄼵aZV:$72`oH8wzl ~iтG)>Z0GLKogbI.Ӱ8~e $2e85lHٜ.Ac;M՛ xx|x;XvՂR0RX411 A?JGqΜ@Tb)37KU4j Xu@I͜ | e2UG$o+|ڈQrdTMZʺgxFƤhH!m@SA\vO]~n? AaA$NXy#4SCJQU(4R~`1'+q$p#fbgρfԔPǚvOHxW%u[$N\ox^rV_c$L_Xr6i1 NsETfp@gpo):o1]!o~礘Ŭ`u7^D[c*g ;(G=C-Q= R|t%ӖXϰc߷,w5ݫw",tErlM!cgl{(¬KXy@< 't@*rQͬkޏ(A-4GZ1>T#Ki_z}ƭіY[~YRX@[rv0Л nz~vξϨd]rLxaE8+\]d c k{ .M~_ 4zT PŃɯ+UӒaaJPf#%|n?919 Bه2 {K{V+oIRPX@F`˴/Bjˏ.l?`6:rKK&̾^"b}H7N\֙Lzip\~V'2?fw&'$VBw Ib x,X tWib8Q2ŸXꬃB@a(di/lFs 3'.ljìZTӇձ׍KȃHE|GK9PgU)ZIIg+C3 .,RվVȢS|U92A}o|E0i~'@pv 4VZd8Uɞj627,'4W2<8d^o\h2FVB9e쇈88rǨmڔr?Ӛ &g4I1j4r hv,<ÕGgA--MLiZ/Û@UK3QIZ% dKecE+s/d %0cך2$S"Mg A"Y\0Vk{MDN}oOAShO$]z9ls=@/ q[]8أYRZwJh-rޒR"hߞ:R ; k4w-) H; rCf(\c5`&vH= QʣFW/Eg4`s%BS&8 H@'~ M.ǟrRo4; D@@b.& o`r~( }j7&&siϙ,rrx~mjgM:[*71w|0ӿ5tʛ2Sa1tt swf2kq1sSnȩ8}#gEKBMG2<-hI̫[hH/ZP]GUBH8Y}ߺs1geg1?-3Ӻ_bJN |Ҏ}5YϬкG3<1R=[ktks.l3H eu@Tͳh{))poSfIh}KTyD2??0(=g#r3(sL)٨B 3s#ҐIܤmֈA6%zC!ɕܵiNeCd]!`X.iYFrA`}+q)J}۾-:r.=tII4I/8i#;%19ot9 {NUW7|(yÊՍa`( hvNzV-UAzIFJXM:޸bu%P& {cx3m%i\eYG3#wM;Au{Jvo!ZV] 7eڼVPc3Mr`J)jP'FHunrT}ZǏ@H'EtrޖSP xj)sGbs)]U+kv$%;`H@Ϛ#yo1=5#/N`@RіW/ӿq_)L, ߚ4MM"~C} ͵'ҙFÅZU`4r'gY14Ѐ^ uHVdJblt'R!6N G[xE ViKf' '5`储<.],JjȟS4+EBő\/HTVEOuaMAwXQCx:MB}pj׬ՠzT.Ij+* '$4C;nqWA [>wrМȅpACOlD]$ɍ#BSRa$GR R;36Ǜ$b _"a-^l8X&gF֚:!, z?_7ݒd 6@v\m84}*qUޘPp Z_rƃ-i~48S}+Y d|08N3Ԫq@wؘMյFF,moU&Iyəc !]Vp+k x<[@xbwOÙSmHؕy 'ɹ;o"5&=q)x%Ru?hbNn$xMrݨk UEvְÔ;;]}P܏wӑmiW}a*[Rj^B(S}&QΔkի8Rohm`pu:hvjf薝5EK`WÞj&ڢkJX%}2ONVZM+ȷÔmii@ K*5_bM0$Ň{ ;u2NI?ZrIN5 Qr*hUyӧfFKMVj?v܉m~JYl3":]\f$2Fs 8ݩmpOĀ42,?ԄQ?ݶ7+Oo|k^'3p*ٓv3dj5ul¶zcsOksVKb!fC8F4+l5\H1\l9" W{@'YXRkԟ(av v2P͌4k;k}2ygRWGnNa-wJVO<))M& g;.bEOjDq&Y@|vԹP{@N4s?"b؛OT@eF2@3RJkMygi9PP,֑?o:Fű"#?CaBt`O -NҴY[`-=^P] m'`=5S~LE>*&zuUuk^uX.}ZMlUFR>եN* 7(ܡp 跋Q;z7ERw~6Zn߾ O=,3h6e>zX&*Gl>Ds|%l(5)8Cq+o-T;]]џ+S&[[י#XKI6I$.>W!Gv387oߛ#Dyf6o3΅"x#˄r\Z8] EB$\˪Ċ|f\9HAs i?lٯ K"#JZv;ued jE xMBbqo46i'DtmF5S VxR'08Sr\vc(Vk r UmIFW\etvV+6tD Eyrxp>VfGv%IQGى "?xu+!q?Hm4 ܿ3H?,~I˾:]M]Nb+64\LܷiTxJ1n+N*W t}۱ף,͉ԉ6,L&hΜۆVf5Gl El0,9H.gUT篩-V:-sL05üY641Rxp.g{X+@3\Fk\(|L"aFO=vijsrGQN5vP4%piZ ~Ej]1|IVHiizÏyxt\l7j?Ru?X3R?jͅU Eu?ҏyѢOtRI'^`KwQ{iW!.Vø%xⷻ½3&l+`O:5K~+有@KZ(Jz^So"u~O]Ѓ0Lam1ihҮ>e>C}ϳA3凕G>q,02:J /-o!ٖ'I /)n,p8P m$| Ըsmp!2@?֛zWjYRX 4c֡h}Dwsz2gMO 2tF2r3h. c1)$^rYlj{釳JcL0Ď.{:sи ]q:OC SZdOhb՚NoJCR웝fM ONjj@kP 6PeoN$_+O@܇w4Xɧ(3^'\DۘL"yv$ll7` $0J;!C[2q1]74c |-&Hrmձ &s!be/7Z%hQ6f4?~{qdC¹ 깼y `Kgs˸-/vxZo$KxUq3Ok}fĜ>AHD& 9#{PUq%5Ƽ!U"EZюޝ~ZZPd6Nj|ҩWUy¼ '%Uk;nI&dEf:=N=YgS~8zSeNnnlqtApwOfjUAn/蒵'lSzLIE7犿3IR@Mή[t^]F"EM ޒ,YNsvV%p e w/`6L<רyӫM' .Cކi. oHHdbVt] ҂ͬ௧8<[(R3w ˳){ {]xwF~&xm$iEuaiM(2!˧ bRh"7mp.X2ɗpoboƜF跂>ur^ M"<'`sIX;/KnHwh^j*WRǓJK0KhTĽݞ.w@79 bW0^ FOpOi 6BI@b_ Ǖt%;h(fΌ,CDFq:g juerڨiő+FWB0BݽwtS*pǐO3hIlwmt "&1~Ps6B2(JKH\rvKuyL9l4tΩ;Zna)14Z%,vm4u=Z9% ^qaOA%C|Liŏ"uAMu"??F\LN|*2l'2Unac 7Tqv'];Ц/)A7P_2w.l=>+ c26 <)sK&QR N 0píXC1@ijs FhE?P#GTRT35C㱘RڪI.r'IPmyth!b@O)%[&eKTD>'-.2Z+^M+C$Yҹʯ@b)dNgYH.@*&5%x80>>xw=/ꘕw [)N 6? zJX(@Zi'H/tBzT- _U~|:ܼpA ]Dru%|5MS#B2cLPcK|>[v8q"Ot]5N J 9t!Y ΩqGK'8rS^ ެ=QboNH*raXtA-ȆB"+TU$mA?5Af4Qu?uaP/~rh JFJ`^ ŊUS+ϩ҄h:-A&珀G×[|b0ƵFq>)Lݔҧ"7uLͽF9ö Dh>&z$nRBb5QlJkW,EOW - t]h 55{dGiPCF"^\ސb'_|%W_g͟$'z$puT GjLj [<@$(}ō=M,IPz^ ?T8,"֍28:=scl6PzdM:!{a;9PRڏ#7E \-gKǙQhI kX =3Gg44M2*Ḛh.71PIp ;asd\ ҹT9ʗ)&si[V;Oc\`#Ap<{a}VNZ4}5,*/C5ӣ9P= ^r)ZC;Ki}k%n)ILFgP;5M[%L_Z2DPZ-oRF]A~A׃ޥ@<>m+Hr)δ#Q5Y@ݺ= &قEg+gFrw%Y9ϞL9䀟'shnV;O͸"~b6uFN.۴fb_Lj,$eMuRQl1)"y+`jem"p'[4. nb|ڬV~G= +~q[!zO7b⺝ 'L4ҍҭ&yYPD{<,Fh{\>;Dvz'$@.,0Λg%Z"Iwq֪VS%H>Mna!x;(qdN<8W4QәںԣM/E8NïF-l ේ+= vt@AyF#=4088t6 mmSцti]ܝ|VYPSӊ'(ň+ ۏ! o= 7Orv&DTejwG.=a*FgNZEw40>zyUPX\qϝVj/x9OGWŞ7R:yZլZڴr1KӦ=:7Pʷ٬g_\*zZnVxRUS;DHM[K}OaA~h4j/r} ߋBpSa~,ǟ|/gƗ\k4hc@,5  qi6uEy,c6aiGt3H.9+bӬlMn0G&4לPP(@  #WTTeC3aC[G4ж!Iӷ7TRK° G?u6@R~mh jֽ1< |#ȈcyglEe1 gon-)NɻyWn[<:2k|W:ݳ"qHԿM1:i [.zrҰ7goď vXqθv hM9oWwo&(ҿPa9nQvM j9lɗ?ŧx ,uW7T~ u܏1u5#^>|iJY䘫KƱΔ ~5pJ RNۘzlE'%pN2䐡 SOuOBdzWo" qԏ# 9F4Y;aoijwɬ )*䝚KͽF~}nMԉ،ET#saݚ+m~|c h.?ZD*HAIZ`/b, 8 G LIFVb~ܹu2oG{A_ q禣< ,!Mͣ+^Nڡ, *ۭnš7[FOd+s Ԩ~qX(Ҳ3MFF Z ozk م.O̧cߣ{Lom<(eafV.s`ӦhV;+ċ~O$bAOsoO֢\i5jZrER&._5T8\lVvց =Sם [̆B<`i-jvxZyM xd܊FШTTǾp Kl4Hٜ[~ {r9%!QR%ό|?ڹ=[Ft<;=Oq)ݳ7B/MhbLh/䪠k6 +7';$l=>.B;kR;E\Ht5v%@!K-{w ˿-K׍Y(~iߜo]%Q3n= n H~yZP&pCz!D4)x^$+A'l2k7]Z)72魠 182PhTjn[-I*3DxȨt-?/hQ>C񰗺2uWV!hWZ62_qw7n$<a|/-θwv醄+jQ' ;s~K[.nY[OvjXEґf"pHOɾpBZcg}\1%lma#i|EGuE֏un5] 32HNCcvIgs#F:"d-].r1EML&ÃwWeL`hDvS~e/c7z{Ѥ qZu*/I[:~QJnFѩ_ߨ__OXÓfo b$z_r`u9rPA`O5yYn$`x.=ǯݚ#'װ'b%uTc[8T8R삼XWbA.y)Ԭ9Js` :\ -zfWp#yl*C5eyNݎTfBȐT6?"b"P#D'zbK$=ÝuLNoL{OIwtq~oߍu T ~GG+R tZjF6/T~`| ?jKH DMSާ4=sca%-T ?Hq-5cnH?=7-'؊kT1[[EBd;y ]kMy(_%v]dlUEAQ2hNHr}10+.a~|YRcڍy~ g}8C5ŇEwu99I88dӪ~iNwqT^߼) J;SI}_qݰdG"ݼ~#h^fRr@[uet׈Ln½}yW l6%7.c 7b>9 \of$]Z.o_Fgp`~m<47e5k*p,/L -6ӍcA"zg_{yZR}P`lJ v6B{[r+ [SZŹ|Nm0Ȣ r$}urts20ȷ(2oł }| D8@=9eG_T\$Y'N[nK 'N8ZMy,Fx .NwbvkKla /pTRd4N,--x5 sHśEQ9t\A7 #|tI UC~'w 3@H(}0 x{RsBGIo;?kmP$:p~v/>~(g&ZQ_#(@Ϗsx#dǂ _oT>BQp K6c 3h Pn^|4=c Kor/`i:}E5u|ߤrAOoʨ'ܭȁ2:[_{yzj}Nnb5xO_&#L( Riyۻ<ԯ?_L"5>ⱕR<*qI8P+mڎW]/R\: Vʍ蘃eJZzTyȼϔUG:+’Cuta0?+_u 3^Zs=ZB[ ex;ЖA-Ng"~l=o[ve]}.-}fRoIIg׀,UhV5.o@PZwmކwMoYzD8o]^19 &MNHBTe퓿w|Gl\}g AS#0OJ1[ݖ^DM迷%cf }OFpF$i0!_p"<_si&R){'K"isKVk3U;ω+VVs*~q?ޮݵ}^_an]"Ջ1y6k-|Q9vY~LsWkGGD+46iK[qK&w[85^E*@#XWw{hR\Q(haǒc^6~nT༂j:766ۓ- %NM2luT^ի<0 nWpvm}=?_q"{9Lj}5g>UB(+3ߵ_!I[H V׈^/q>9 k5]DoWju#liF[޵@@0w./*nvl~,Nt&ҾI˿Q/4CCEnw f/Nĩp.Y'B-`hV_Eo4xꣀ}`&|MN-[.NS;d'ײx~r뀱_o3/lw/WYE<R?.\z?:UE(XTzrY3~]):Bk z^auj?O__RT{6_?Ky4k}5Gډ8ܼ#B%R=8>ƿLI}aoxUr ۨ5{,ͳB.# aN %sQSAUJf:Q5eSk7Ky9;uݬ[\Vӊm}5rB^cY ӛvr.~/;˾ o]{ omʝD -Ϣi S[p,3L _{x/_u}_Ju>]-c yJ/n˯0ҭ~-kBc26D7=2" !s[7#ѢM3_~Ct kocoGW;2F1;!ֺ3Ŕ/eaH>~ʄyRq|0/LfGiޅA\SY篟6ojSΜڤv-Ғ 4i7d~k-3N8߳|ۍ::-rm[Z)i" 2Cɢ6װzVcM2O ^tzR\I2\?(|GmCLb}5~/FJ]{`7E?>)ʧ۟U7iB AA/ŸWᶿ#jvIBx4Z(ˣ+dFuDžlJZ%3ʠVn++[3&—d߁~r,'ԕsvq58isFk=d#H@`Zmt:u_k*}mfWyԳVoDL7{tw|ƩT &=%t_dF. ϐOtmOm^M ~8<=~؀Js}9h{ QֆQ{_2*2 PBAp765҉Nu6rW+'{/+,1t n&||F|jdlz>Kr=\>`+~'[,՟{:w('R џ\QLWG6*C&}GPg}_}ࡔq2ݞt X9\֙Kl =+!@)u<DoVԸ\H^j"_KHe895ry^2k<0Fs@~?jf OQ`_uN@7:AMEy=GӜQ 漏k.#RQ<4N\ze<B3b:Ѹ^I=">J[eIEv'5#N]:V4%Stoc93wYGY߫.7mm|_Xl<JZ>NCm߿'*7YznV߫4pJsP+Tk/cpIؐH)E?2 ?$& @^aN %[<2Pz9 mצ7<4e1rAN]Qv8ki_.Qg[@|pfvPa+)Y`+EН;L7 ]Lt@>xWp 1d}dH[5H!fqt^X }MKzLOoX fk;l)~L+<;i<1yy||\*=,ݟzLT-. KOsB-"|ї-گA3MvJ&P=WǬ?YkG=r-gD¹L ?~={A1ч^+ljFrS Z.}$n(|fokx^