From 73fa01d1d034618f02d2d921a154e202b88955f2 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 18 Sep 2020 20:21:16 +0200 Subject: [PATCH] smp: Fix bug where started APs would not be aware of 5-level paging --- limine.bin | Bin 32768 -> 32768 bytes stage2/protos/stivale2.c | 4 ++-- stage2/sys/smp.c | 9 ++++++--- stage2/sys/smp.h | 1 + stage2/sys/smp_trampoline.asm | 18 +++++++++++++----- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/limine.bin b/limine.bin index 12871eace252defbdb6d2dfd7814fbc32d96676d..36f13670997e3ed55e7815a141b1e5b9c041723b 100644 GIT binary patch delta 18911 zcmV($K;yrFfC7Mk0#Tg4M8izYbMUr1@53LTyw(zIc`x1ax2O|v{c=j#} zJmQac7CZuKN?Ykh$T8KoUO0RX+97=zx3l zn4pwuJca!Wq8#Nxu`xA&;^hUD{CUYqq{`$r)fW!TKVcuZq&>7W6i~IE*0jg-`wu$2 zqsT$ewLzMizQ=th7c6{=^_h4~?!p0@2?K)c2L2s4zsv2K#worKK%tHGeQ$CDa*YRC z(VE<}LSfW|{@p+gu~Pw92O!N9nv|Q|d6R-Ttlz2<<~Toq2+ibw2r-`oVU>>o8;EC9 z6NeKK9j{sPQ~6M?`0)a9PKMp=`D zW=G|KK=++)dry#mo@8i{5)XO6#tJFOHCCG!!`b^zRzP6wp|K>WP*c!jitl?sxL~0l z@SqgB`f3M2Jg;{>ry-*Y2I!^Rs&rv~5Zd)gL~s-9J`^s&K!nO_p#dpzwE)rC;{*gwi~#lV;ISEgWG4A1&?62>zg2s0>GuZwYC%>r9I8Hby!_*n}d#04OHr zVk9X!Nj5Ei_0uU?D+{JY9w8|uMBJg4@=F-O733SmTv-wVs3r;}q%B(5A(@M_ce;cl z0cxM<=%m)R&i}ivaN1zqd!GwH!?eNr&4c441$o@YIm3lMs)B#c|z zxYoV4X|24rjyJjockp++&;3cjzOAi$&_?bx#y@C(lkOcF&;Om@)N_#S9b1a+DceHZ z6Sl`~3vBbT%ou;|3$DErc5uAySy$TNp*D*x$u`H9XiK)uvsrB$2KL}L@>^Mr2YJoy zBjTY!g9aPa$47Ct5@Q!yQl474pkf{VaKG_0(x&tn8~;V#S5l-A2OyFQ; zeOjBz-Od{;@(w~rD$X6oj_iewoLF12_Uu~U+9TKziPA{4DCI%ep3A~3 z2cpeRdXwj2JWZ-4``|EX*5HUsTb^22F%Ke5JvoXckQa9815)=?#f^|LtP#3^nf@*$re?8l)aJq7Tyu$By`+`UfKy+o-I%)DOTx-Cdx4agd z@HvL8Exc!XnA0ulF0J!jlAhHs<}CAI0(`<$YpOS0F)5~>Dx^t6y42GRQ7a~3%>=dT zg#=bN!Q@Ubok%d%CYb6IOji<2KbcK`ZnLS@Y^pb#PMA&2X3V)_HYr`Fc9s4)(or@? zI#JqNog`lfa!fp38o2`} zf0gp83oyeGj=Buv@oDh|Tr!yCpPf0*8(l(+#U)&}D3KcvV2#VQzfsUqTj7|0y#4?c zmbBK0Yy}na}5-fZrcZ>Kv2TG0-XyBG;pJc~?W8AGj$D7`8+o>Y5u` zN5VE4;E73xw;Z7I+8=#oU|#zKe(h*@a>x@W@%(G|L6YC)Rt7t{3Itie=l_wyF5~lS zU>v+Xf^f2eh+jW|DMYG=KW`R)BAKkC3ss@j!377Hq{{d|&2EOLZNoMdq;Z|60@95IqkPd%;cNv=77@CW} zB5}#A;}+$pw+d=1z41xujcmOEG5$Cv>-|};t67_n_89v3Qjdhq_`PW#%_>l{D1M7F zj$$5%07@hh;+ww-vs{)lj`p6<8yx2iiAv-KEO^8r4|TNle0~DtfhfL(dBYu(5jsd5 z0-1{eMKR_^RtK;1(+1gpk0_Bl4$y@FCLIM-I{egk63rwAyH_2oQ>|fjus)FT3l-w)tk2o8oic}}-|Kum&8)WwXl zhf5Z{W0iq>p~vcSEF*Qkrp^T+s9GA0S~PkH*8(FoHmd7N&{(>EBx7!H3C*CWO{$_U zm_IL>F%<~f%jsY~kCc|A?S%232;|Kaf3{fsFp|(9zkMD>3{wN3_=(3Au~`wD0yw%X z=Fr8gade^Wf~lU=6zcP?PO$gPueDEz^<8u&Xkx1DJ@Zy6p?1xqQ)7;={Fd}aV23-% zm7o+_6i{xvF2CM?r^{Q_5sE8%a+SuvxaBw>ric-W2%iQ;)F&z{^oqscs5I6FIvhc) zGBG#v`|CVsbhb^;z!=#)auC1UO@tOH#lUZGl+5}~X^`*I6%gUP$*ql?4^PC}B#Gx; z5$~4v#C4_ICVto0o<};QT-ou1M$}5V&1Aw1N4d^%RS{2r$7)kr9BpCZ7mmt^ZmU?} zg@_=NI$}Lf4iIyTB9gw87k2 zNQ-i*mfG%1@6Uh2&)B@lgQ+GZP!3DIaeZF86Bq0^Ap(B8N7EQUA+69$79DHyTh`=- zLQXygii{Y4+mM?`vHVvcp(>bS?rdTbuJ5x3BD*zE7ia)cd(LPROQAkzst4S;6nAY! zfDvKx3@DUn_sDnB|7s)X}?j4dk0%cc`jZzOONqs|l42-tzPtBC!)WNnemm*u;lavWf9AT9ZBdqj2c zlX}~q zo}?FlGbC1_C8QA?85-(;f)RFJu^VPHRNk$SIg=rz!<4X@X8#YT_9-EzQH;cGfaicC z3+JnJ&c_}lLGA*`eSCp$1$bup&wyGInhSv6h{Lr)!`eu)AS)t~b5d{Qn;iBlj`hTG z*r3?AlOJ&^A^0&d7@HS+C2Yng`G;T8r{)w9y?PmKu&qtJ8rs)Lx9VJ(2YNk(La*3uab}hf(BjvIk3qR%% z6?3(48P$q45GFr-4!1tm`<+2$n7^Lmyk0H?e8r)A8lb|@#l}5f<2U*XjlAr8tcDJM zs~?pB^kx>CLi4_E3Z~H0?25(IHb`BfsjcXXXenCEQ8a~?xGzni7n@5{=)1CL3P}rM zq;*=ir(L=3E$Sn*nC;dIThTkEaR`0QrHkFGW65EE9)6eb zH%-mk!NY{(ilbi1Jf1g4!~Fw4T7Segt=lvy+q(3`d=fgTfoio&YA2B|$yXj_P@%Ac zcE8ZP!(V7Rp}ElaTA@(P3arJHfe=|{y2JWF)3}iZRE1l&-MD%2B)VZ@-U3<-Y@nMi zz?BG~MG~Tju+4ETR=gj_PTysJ?9Rh53r#r2;F{eam67t+AL(vgv9f0qWdFS9F8nmr z790OTm)_fdp5nL~X7BB|+Vka$dvFKvXWu!%%{%`_w?@D|b(x8|Qi@$75U@qc4Qsy+ zQ!*%W)EJ>eotyQ>_=HZ*Z~~Esv$Np~Z=RizE93-G5~K$c!1VM=aQv))PpIyJTC;dm z@`lAjl`;SMG$!FI-!R8Dqc~Wl4GEL(owu0VusBK?(|soOm9K-UW0cEkAlA#ci?<+( z<2seW!0#T{2V}zYgN|HstwCJ?a~Hgq=izO-JE`X7L-&A)=dpjz^R$l|Z%&q*`q>#2QExcoj26Kuf>kh3@5N>^)2yYSV29#cy8us@5+6NXVDXT(_nQi<7{@Pm|l+I2P(Ig)L7+cu9tN83m)@>|Mv zo+jPqQTQA=7JGkxg9V$41g$4RW3|vQ6v`8sE`-Y)n(3Ha5o$E{dw@I2IIOOWLsW{m z9()zQtJ0FO1bOx(dRIy@q4YziCF_>qLUFWphh%_iqWw^LC zI(J)43pw2HYK{&gWlORoY}E#1m%#0<(+b5F+5U^7XvE@wzPUSq8t+FPxNqA4u*J6hiJ_DzA1(UDPA*k@615>2dJ0;MM9Kh9YBN{Vm*YiK2fZ}oySAG z<2W5Kh~A>4SO9J$){|_sG%bDGUFIfW!yH9Csfdk<7CFm;VrL|RTN0WiYcml_a0As` zBc&V~cA?*YHL%Z;_2h7&B-*-<2oRDsOf=V##%Q4-rw4&lN`quJXf6=*HfYk})`7KB z#0EvILkeQ2;X;FOQnFS`DQwaN>M&m7s;Ef?70v7EfEu@{_Ru|+s z7vz`j8YbO`m~?NA5o#piP_(d(cYHymyGF7eV$$t0*CEH|B?GsnJVv=Cnd_vK24Y@E zQr1i6ty0Ri;pUp?ltaW^Oj34`3*_2x^SbDi^~CHZDcJRxlwv7mM|4VMjzKbGl9iP9 zg4SbyJf%oPzr)$LIouHDMM={f-~gJuI-I_{FN1GV6$}glh)0m;bP#JOMnskD*T%p4 z0qwN~YZS3k5#3Ts6TkfwHq@j6 zH@Ys|x*i0Ef$zAE;U0igYRol#Qx2iT+;x+tflBIK7G0vGr{_wN=D60q1$;cC!$Iq zr0ff!eWO(^7Oc7ps}8Rg+>CdBmDGZWO|ImQ)$KpQpz>=zMMol_24?ie#gG?UnH&ps zH-~(}7GlL%4~0#PAV)$f`22I|F5MWEO0$QWPJpumRP&PNfFipeRn0XuaUdly?zxrH z?5GlqT!0zxmmg`m;xXEFc%F$F^Ae>eJ(yC0ltzQ}m`kLTec3uqZQm1rpo&H?f0A_@ zurb)v6zo@8uzz~+8uC+DDeV~Sai$ZFmuGSI9{ldv^G#4SBae1{AHN;VeMxJ29cxg7 zSy#cX@Y^di)$omnxjL=;78SLQq3+I;)#tBc6zbIBS*s!rKfiR98Q{D04%OiU%}=Uo z=PJSy$%%0C-N0rV8}FHa3S4(Nu}E$`<{$jYP%jAT?bF;)@7xtk8d&sZoBYHReEweC zL;#7Vk&CxC)L2~>f$J0y?DEcE(QfX15;b_u1*EpZRhEGiVtkGCF~&IOVjD&C5st~I z=ZBsqMN`%H=)7cCQAQ^P8I*!mknAPoNkw?-u$MI-s0k_O^WUI1Vf}Vy!K)bqXzXn5;8(M3JnJ}qfCTUb&*;4G6 zeFQ@;m90QLDWTy ze+%Lw_}%6WHZt>en7zGQ5EmthACQ~@lK3gfF-p06$nOV}nM3*QRhk+SH^LW8k&?O_ zMeKDQidX?SI+t@Be9Ggom(KN&tah%uhU3g}NdCNemJAzzP~zR7Wii!GEX|uV>H$%& zP)MIwa@Jw6zZ>SUVZ`}5q)jmDSf&Lzr$DZ;;|p~Y^4;Qq&L&-%PF)qyJ9rJ_m@E%jTsU7@w zkJj0UUGB64KB!!Z)nh}ZX z1r#giT?C_)_ew9GckTh$t+Dny5;Kqki;XVYQ;U3mHw*U*2RY6TT5_VdEAA3;z65nA zYjKkL+A382c^cPFgx0i_;wrhk=xd;KULV)Afo-KYBb5_r#sJ9ZD8-4jJOwfwWrzoq ze=OiAL3AJmM*Huo@`Ia^$*!XBs5l{J`H8QYKh&ekrJalQ{t1n`tjVeI9WuE~HPoE) z``7n>{uWB}>+MhFwT~1>=AYo5cxaK7JKB4`(rao}e&j|dH~Lyk^^P|ED?Rt1attfi z)P1IbNpM>z{|358M_bRA^-wn-8*yd-#nI94d9CA|v0#1hCTx6)uZV`4t|EK{^*r5x z1d2=iA`>j_2)+&@VIwTi z_~ir$94I-l2#<0z*E*Go3zp&!I%IuD0os?_TbPffWqy6%gGS7|t;IiuT77;5#%fM~ z4jpt6c8$2&uuo1TLw@mUccbN9q@yQR2UDZvl9ALRgaliO@NpOY4(C1UaL!}qnj`*j zZ)`~dut0tuZA%raLVCF3b;Q|>@g!|oqEyHnYx!PZe%EZ5(};y<+o&|^}A$j|G)`rROZ?cImiyKhlCU6Zgs@5CZ;vm?mDD9JejbBab` zjAD=YsBz`bS9!hG+aTdQ2r%Vx? z$39VH5=90^L+feMYH4veEl!$4T(q@!5CB4*Paa`Qsx()kxzH{-#cyxZ9L0!#g2ay? z$)jLKgu4`E_E@rTJVq}heiBKJg&?uo+4L)ulWJ$9n#z0R0Z}{M*Jg4T-Z352u1{Y3 z1LDXkN(blb$r2h+Y8-5^iP$!?j+fPxZw6=;md5(_5my5Z^XIsnm?J-P7{?X!#<;NU zG4EizA;YAN^W|kU`PJU_QCxs`+Lhw{X zMTZS{tzdrEzG)!)$&~O^T?0rKh{LoGe|( z6Y?Z}nzUv-cHxhc;FD;`9G%I{n5pT`%sUw%p+hCDq2P3|yoo5<^Yt-hlnXA(AnH|e zrb@}vT!#Lj0eVfj6eK0;{NfZpHavNJfJ;5(_kM={v1V14Q%?E*CNUGR0^=Gn6)hRn z&hb(iY9Gc|wA&Kxwp2!cfv1O&c@bWonuLrRj=4izI#&&YvC}Zz|1*mvSC<)qt4Y6z za~x%3X_(co)rs>lPo9Qjns^Gw>5NZNN{nbM9!2X};fmEU)$3*?PF$u&Vwm^IYu!s! z>C3so>_j`*IIliH4bi%GB5mENCKp^uI(an{5Sydy3A)fiNebD21@&pX=t5<`^~}P7 z^JMbo04k`o89Hn@6?L9OiHM6z#(-Pd$)vcE_6AF2<)S(r(lbk#H~s;!XDmyX(EBRW z+7;DwxN@ROjMUXoL*lvgKB=ju-DP17n%vSyXxQy4l4+k2O(8ew0X}~YFe2Y=?^O__ z(A=rM(^XE?P7O1E4K%`~%}8bVJaLtdcjV*zpAoHnJJF)-#B${`x;XF|b{geQqV-Mn zxC^T~kL8q=Mt+wQ4?@Jsc~|{*H_@MGSqzvlM}F}HQi?bnZoR2qZEp-|^(cepCEwg8 zziTIAz)&8Wlqg>L+IehplvH&6*MJb5I^=Jb-&KTl=xXtQusXUJ>?p$maO5uR`OYwk zGOr9-qB;|MlEa-xVO;!K+)MMxCTHiT=T(zU-1oC_zDObdGZ#clf(0(bY@c+@UzNEAIK}w=x9_#*+DA)v*!O zVBN+iAu7kdiz1)r1`wFFNVB1dKi%$9e5>cv-cQ+h>+s*-^6;oC#BhQC*|1h^nQ;e zt9U1F_q%d*7K_x&bRubv_iyZ3>gB8z?<%#zu=@H-TEGg{C`6j6(|E{1-@UXz?ak7I zFp3X87>UzV3r%dzsrgi~{%t7|QLUbgKzIa=U%P=WkVuACSD(gz ztvKn)S9Pn;0)Jl#IYtg1_Kn%_>R6cII8JNEJn3p8173}tOm}3y{8u&XxO&;82DSt> zUfmbMaYJaG(AB4DjT+)P>>X1$3Y%!sjG5(ZB83RWx0Tw}o^!oS z<)qHj)N@E)@`!g>ng_&HznJQ<_%>62UDu0mb6f-JB<)s>y(c}We1` zk-?4wJxMqkgCyM(3%aVK(2S=jat)FYMubMXvD!fDNW14;&(&v8N{O`zm+tv(#|CokRC6OezDR$rBez*+za2h<#V|w>#!$%f>4sjDY@y#L>Ef$oZOl7=;2;r= zQf>ozsZr;s9MR2EOu{{yZ;1I&Uc08>2}eb6mp-+eMbmMzTBu_qk5}*%+@lrybjiyD zJAQ>ahZfRKkA6X%mS`ckbtAWfn6IwlI3wpcN{?BsL4c4pv5wV&S`@Ax;N~T>)mYpq z^4H(fy}psOLC6@=B7QEJ4+S=VP!3HL^nCtDn8sr`q%QSaQ#9^9;i@;=%yQ#qR%K2S!Igh{OpJaqlI{bN*fS$nD>Q{$ zoBafbbR~E->I|f;&1~bQ#C*m`=W@jCAf*^ZMhT2-G)XBY;tow?-;0b7ORA%!Vr)bzX~w25lB?QvGNi%_&f{|( zIWSQuCI_QacJOaj6dap>C>E1z@R0rBM5uoxI;E2TLq+~E`yI&4Yqi>der z-NQPX-51%j#99(1rIgI{meam&k#^I5{Dby`HnzG7tHJoZ)(X;pfJY8PRE%dYCG-gINCM(PS6b*i6|2KYR_8TQTNTDt=QaD!V-9h+qhiYKk**T7!Y(={ zbfxIh`@Uv!C(4I^V&10+`@D4+!D6xLgk;^|dQ>6i;+T};l`AAYG4GQsI$|v$$H}P} z>xPy0FS!^ct);z${_VonCYtw=3(@A1oL=N8bQ-DNvR`ZgLb|?e1(CexQSRvzLHW7#h9BUvAN%OIX$G@ zCMl(PVs2e@N(29DA2g;1rQAak%}t~uT5JY@lqM;+d18t?I=7N{{6rVJvC-jTU36~4 zlJY20i~>)8N~plMfzi2F5^54+>Q?rf3hZ<3#{pSg)pbD5ZpL2Fu1v-NeIh1T)Ibpo6b8gW=^Oed%!02@=9B`SX;WnU?_sM=%j7?QXzMm%JH+VMh|Mog4U z(hE8w){)!>?Q{C@7Ys}baeR+RVpB{jZs|4W1d~=eU~V)6chb@r7(=1CUtRan%!y=1 z)b|#DlKxjDec-ofPHVJ6<7SQ?o@nfL?j-@HO%Zg_%330?Y=9UH*XH&d#F$Yiku7fj z`cx!htV4`(CuyFe2Hd<&vL2ulL7SspYwvAx!}r7ddUt}OCbn~1md;4%+6F1YZ4Kh0 z(^w|;bbp1=%@uI|k~NAr=hGbA$gx#BSJM4|9f%H0^;!xWPGO1jX$qA_H&76(O)5iJ z+r(9qc*kvQMi>hd7|irE^?)Iwdn(%LL&N8dNVK@DTO~@9{0dtdbmVT+*+Xm!t>F6* zH#J+LdI`<;7qRQ-F}zM?hK&e$#G21`hGK*~DJ4Jp9i%BISt~Y$gXXAbK5{+<5~9$5 z`D+DtxU~`+U8go0dIbCX7Pi}_xBo3M(UNfoxE=ZX(kFK#cD{G~JP5H+6K*{OqENIVFp%=~Iwpd2n@>Zf5G(jTk;FVHH{Yqe5Q3o- z1dvBL?N01&cp2Tsq=!ogUA!WHMflcz5FOHn_N=F^@_Mo+4&MJq>6h{?ZJdPq-GrkbJn+p zmD~9_iHkW+i$%WofV!5ITcYKi_bAk?Dm&*=6xb6*d`l7Y6)}$->l`(I58aS5;<{N2 zzW-scB)BDOCB-5dv~4-~ZR30!=xKX%YBGts2N4|t17|VoWhx~`Hx{JdOdFkGp z#bHohZmEVnqd53@Xt+wt0~ISsh3@)&Mk&=o&t8$CW_fJfYa;loqcHT!4|zsrgH z1{V1K3BNNc5N992xnLpa0WLOqnsof`qMvcaug;RuNcI0~MR{sIl;f%oEALRtf57rD zzs7UvP_7G<<4zcsbEvN$e~qWzpM@NT?LR|wy`jvIHn)o1YCJ^ZeBHq&h9 z``2mbhG4FyQFFjv0p0kAR7Qy^kQ`XZa#pC%PmeNTn1{={js(SFd=}MvJER2`)3UaT)_bD=*;=c}c z#f{Ky4X);Y7%cx7}k69OxfQotw zwx7QG>M`n{%3cH*)kQ_3i#pC?AK|Yw@bMqWa}^EkB!L{jBwYxhj>46|J5J+T@vuYW zM_gd<;sM&#I#y=OO|`a(<}JMA3(g;8d59~*A7%wwLt{>>4aBB|t(rD+T>fS!ZoATM zO0)#wf2c#7rqyA(7r8bKC zlNv?br-&tz3u|@b`{IAH){VY?Q@jsB&VIZ%;xp{WvG4`&528oyZ#0(M=rGTvLrO!9 zZXPAJ_C}A=f9K5u*@t?R&Qbi8d3<_?&-*ifjiAxP&M6RvzA5L;vc*hw!at-81>K&YTJP1=bauoW1YdS}+Ip-yY8%Avw4NC$ISYKD+ zmmqfGbr`aX@;y5O2a_aPK^zYL2?pu;d$Wf#r?i27QRb)!?pHm~?NfZO?`2Hh%b2`> zmohmp4ROsHtaCKCD9>GI?4GmwJl&(z5Vmt79AXo(Ip}t)zoHiucVbD#Ld@9-In}zs z%Q5|T=2lH7@a+F)%=yz-c)%V^rYk>~2E)fBx*a9od#u~UrVN1>v+CZxJ?IV6j3bz7 zW%$oQ+Fu!C$hcGf`gnXjR-F^xI>^CtD^E%qhlGh>eDgib9q++Hy2cExuw)^~=6B}iNe1OV#wDp&5- zOCOd*;U>#F-zm!Gxt}vsCt&VrlI;4AJ?LD&Ug}9&RB?D ze;Pja;MLL+yhkb@yrMdLU@&RKYYm4+^+i6`a6RaiDaODsx%M-p4Ht*&f1!gspN@bb z1M@(Sw}BLDg&meeS=kTHXw%c|_NtcO?cR*H?Kb0eGn*8-kmjEQk62HCBJrXfiNq^u z{PyxCZiBoMaBs$ol^~P!diRAYytIZF)c*Lm|AN{t^ZggpY>)ddsPXgt7u2#J_g_%! zAM3xMHZInGL2X8?|ALx^T~I>?kGhG$ImML0{|Hu35Q6q?{YR%$(V~YKE`tM%4mngaiqg}#s1u!ImsEDuy_>f4!%i$PyX~%zhyA6{%gF~ z;B&U`3&i#Vf@>Hyxe>Go{jX@^gfQ|4Nz_)6lS z6Q7w*__l)uSy>KrMdH{>clzc3p1m+U>^J~G+N^FD-& zfQ@p$e~bKfe_hdkcr)UwANvcnfE3F|??oek?tdKOBQ5fXkC`(uSdx?FK`>>g(hcMu ze+sq8<;3try~aNOiR6rjuyzA;_wt9Iqgdc#$?{itN83N`6C7<deE*n@5JS0 zcGaB@nFVI~zGs{#?4QqMxf2lE1kC*m=-BcROoc0Qw#IdTxgCEe6p{;g$%RrPzv%|x zHGtw(*Y6e0r9y2%oD!Gs7O!+7^od=hTYej8+(bL-Z0ulDJYd2kWRg+U9(+BbJno~w z2;g3?ZxIj_4tbM1@bww5h2bfnh#m!VduU=R?Aip7{oiW}3c?d7gO8;j(z7D!D(cH!8>R%0?%wbl*zg_gIRBuAME3 z{^nJBScM+!ITz?cn~~4|i3(aQ@8t2QDZNzr-emk*Nw=8uBp2f2-y^P*^c-UYKJ9rQ zzwTuBcz(eKMqkBULDJG~+xmjPT9p&wIjDzEVL5kTy+Qk+H;1a!W5x)eNyNZmaa3u- zKAg~hu&|yIovOOvD<(XsX}{te1!X$>68Y~hfJ7>lbe5^?)KTgYTgGNA_@NTrd0nmlEd&jEl2oQfd z7$W)pzx%aIR}~jV+d5mO>ap4u^ZGW{9MiBa(ZJ5XQImb%;1ahcGd@XSYFSW2zyvP~lP>wykaqdgW_;|-M75A8 zG&!KQv~e#yj3K|*X(>c_8A6jBJ^8(%+TnjQYPDm%nj&;GI%Pzn%qCIlLa&QfAvDub z8Kvw*K4cj81559(pzq)SPnNL}Ly7+I{P;p;C-OIA7v|_I*s#-e??ae#rCiN_fq(jp zGnjQ2oiNiAn2hwNDhFAcYidy-4yghmQ4h0uBhB2RX3E9j1~xaL1Bz^h&*Vf)#v@4D z8|AqE;T(-C)0@j{=>ivC@~woV{Na9f8JC(0jeSf~QbrZzXJBC|0`GCxvX%4wK01-# zTtZvj*D0HFN)x^i1Os;zlLgp+W^_4D4ls-ET*~A}yvJKitL{*%(vr%;PNm}orS%@`nOl%1$`%1)}MuFKT^V|kAYPgc|E$@b8qhK_(XjqY?{{hPZvur|K~8}M5WtU+~P^o3SMb^ zQXkrXvmY~K!9Xb3V|P;mOE}Qh!qBNOj|(o)$NDZ;f%u`rDqJ@aAoA<&AqDFYCf4^; zRURfdCiV?qp#P}mUU#0gg85zLcxPO7Y#2SN&W?R<%0oL4nU7oTQ}kqxf%ML!uldSX z4~Z~5uYci>_NuvmFLmF20Jv<;Su+6_*NLmsz5a$%&D-P;Nmc!Pj~=q7K_pP+utccS z4|EXnmt_I}dgwR&>w!)Gp?~eMN%gNa-TkX|<8S-d_YMVO+j%frmob*w{WF@u|G?2w z;ke1y#((>7eeKvCzv*jl^sAlD^A!}BpY{fv=U?#o+r7+xc_Q;Nc4E%Ky2#i>@t}35j7Vj4ZGqm#B$IC?DbF0lQLE-wEqo{xq~y&tcf2cSV*C&n zRvmYf$i?YNl7ZZLD@6ScGSOZAw?7GhD0=aa-!qR*ri4{b`M(J7R|gnLJtNi@0H&XQ zzc^X0-Aze6U&3fV!`u@Mat2+-@>@U*O z9P$%tqwRWK5j0w#nr5*{@nJR+7X{z9!FPZ7j)3ohu9;D;qyZL-D{dhC^~VK8`HyF5 zobZ3(8kz~(-KJW#yWicm23mf%^|iZXt`Qdyx&;@1`%AkA7b9?CHOJrFl8z{L#k5V1 zr~6ihc^L?1ksTlYCv1A-Wo~rois=u$sj_KIvFaxLCU%sm9xOmn`90K00#(U0BvFHr zJ#@42az__?vFB9I=%-5ck;VO0lufu&R^>dw7rF1DzNdgnt@8?>pB4nY8j8#~Qsejg zzff2#4r}gC85_Z1?Uxb;rir1_Rm*z*2Q@vIVu!mH!u*nxH%@1Q~aB)(c z&LIzusp1`fM(}D#B$nqv~_6UAgoJLb2P1kAKVk)xFdwXI* zStDJaI}3%{e7F6CG*d?o96o0{katF7{{j!$Oh;sSfQ;E{Dsy)u-Mf;4NEp8>M@v?J z=r-e9UaRPPVZp-V5N^gd-xgAm-;1T^sJ3q2Xuh@i9hnb(9nMtb^xLd@UA*#Fx^#DH$C#eEuVVa(~!; zfMB+GeTGQ40o>(K=@V36dLtpqJ1V$;o3=@G#q!oBPjZc-2SmnFPfufjqU-ctDfNUH zbT@Pfy60q|YfiNI7g8E%&_ILG!(jIJ{N57?r!TzC!s%DEw+yEr{ByT(dhOf46;4B8 z=$`}rw&5q{h!-M!H4CCY`TSNv^oq_(%|H2r=ry0yy+7y)xvB=wxt|BZ=4(HHu~()n z<}!ll8w}_>4qD`A*izl*^b=7d^0Hr3f{wiC9)s+)xWghPBGa#I0%obINI?J6HEymJ?M+y2JpM; z66q_KPGVb6?_j4f9DR@#`C25zl5rJ_1SqOf#(jgXmI! z1PW)w4r+iQREQ6gk|T!GfsQUhQWGsDc%~Ny%-29o+)d?OyR-*kp+|LpA0omCSMJt~ z`^wcQ%~TIuIrXP*tAS&n&|CRElPYuhjgz!b0?@(IY@N>^Q)&LB##Hm9+tsXj72TEz z7b4!JDqcHw(e#`LNymC@((%Utbf7KYHez5bkuXL$H@^= zEs2fJ6ZpQO=9s#Fl_{j9wG{#zp^@EJv#pba=9r3=L)0A83A`oID4Cm_wf3GW7XOu$ zb$r=D$Av*ag7`Q%JAF(m|JqKdL{AU+s%-0E0D93QqxkMQXxZG1`)AOghcyc|eSdMS zCBj-YYj^i7SQW^`69r=;u*5PZ& zjzaz~@O*|`f|M`h2x%nktzrWnBW+Eui#eJ-z}`pglJ|aGZdzApZanfsOjV8-+Mnq= zyUujNi*Mb&k-yzIyRi#rzX8sM_}TgmsfM|T`K0rTcn>o6=*lOde|32N`c{l1=7x!4 z^GZE{`o4vK_W80ZN6R2003RVgJ9uL5$>+nQlxE3%a@f^=mjE2kZVL?v{}I4Dl}^51 z0lo^r*Va}^IO!wn{JiYs;vCvv%12TGgE{O7NvSJ1eB=kx1}u|9TIkg#$oNqbo5^v= z`x)8>KAr`PkS&McA$8=}S-?szB43ZR{s@EkP0W#h><8>ap#5PrK<0Oa=DH(4NV$#V zDpaZ>Ek}Ihxc4f~7*}#JLUYbH@I9<8+S&jN^Z054ydFSbV%aQ-1}O#E?W`9gVlJ(W zg|;ri?62K_rz_^-$}p2+a(Cv~KnB|#t%Jnan2XsV_^$WYHgoE$@O_Qs7)W{-3B>K& zmevb@qzWj8uhy=3D1U~v0qJM(YS(d;G#I^*!+3K3Ds=rK<`C;ic=!PZf=c2yFhZn- z9B37r$YD~|dN$^8c7MBpw3rm{Jcaff#S?JGl;?QYx#ATlc$kid$?YB2Ro(`$xAsc8 zetD}Gqhe02oD1lWgDic6=Ux5Ok_$1%SN6ewlCFFxr!v$ePKh}I!wEe0o~?^%eLiGZ zN53QF0*+Y?P~is!n#k3z5`^m5i2oTO<;^#~qIIgyHG$5Z!5+86;81=DCqwG+x`5CG zkDz>wU~*|@Z2b; zVmIJhP{Y*KakOF0e&s`1JhgI!Bu3$^=1%(lz9a1@!ZQ?W3!7pTIQeMRkDvuKSu z1$M5Ae=P*JrjG+7@O?_u;7R5vQ1$hIm-HaXe>z{GZ5_D)2BC|lqWm=ik1L>FD-Mj; z+(kFbQIE=r^$_JP<7G9;J&ErD2bm*{n1iASd_$IpT!REM60IOaRgK7Q5M2-0ydUTl zo`x7}Q+A?#7IYB&W-5JWW8H8ozK@Yq6`Bv>5Fl<4Iva(+=rY>EYwJ6n|nYG+#e@o3=nx4i@%gk9~OwZ2F$_4}@jnlF-SEfU1 zgmKo?DVP(=rLVG&o?x_RXRcWKf-!S>T4r|oBD?V!K(r*sC@#+tSFFg&wgW0#s(lPV zGQ>uEmN7d$HO;tashDF=N9;yhcGfcEveXr!H-j$C>JAE7%P7eKSc;5Q7y-?uf3I2r zWI*L~U_q8GP>Dj5z04_RM zIeuJhbQ05_6Vr2ORc!9=Avt#&GjoioMmAc&$Gfa~Q7iqelS; z?I0Qep1C|HGc6rzsiiqk6*xB1FFi1H#`IMgsmSTHkz7LNvl;3r`2{O0e|v)QG0~0# z!V0)ogjw-i`cm5j<7{9+s*#NbWKv2|ys*r=e97{x=a(CEGM)lzaxz~`hyG<76NOn* z{8Zd^11K%Czpx^Gf^o?FQ0|dO9^tHv?8GT%Zc3bG28hg}rKy?AFq37>PEO*cf*7f^ zC8p=3XRidwotl+pM+pS^f9YChW_tGW^ra7&v(iKuDsI7$`NrQp46UUYu}!0K(vX~o zL%EgD00}cdcru}DIho6!9XWEOnwy-Sodcu;v^a8zsAfJUm?0xaeVU$~x*{WUQI2sX z2r{xSP-4l3c0tpYr!GssMRs=j%1jlxzet!iW12B7-OdyvXHj-~fBJHO%gI_QQk92M z86vI<5Yj0$w}9ycV^(Has(n!gbk4XeD~%b5R6B_73OnY3w&tYU{qWg9@H3*#2HZ?d zO9R}X1!$b&vc#onR1W|cMFE5@i{k4lAhR;<_ND2+18!udF26}oD9m!>s__p#_2Afl zRSGKJrF2&2vdrb_f5uTG$AyN{(Ke=`p<{FhMS| zE+c)>608$2EXE;ew1Op&(Fxu)*PrviGeE}!ODSa|7ulZe))EDRzNAshn2zuQ>guw9 zCQbF+B}TfAgZOWy>f-kYC(PA#t`a>!~>Nv{^G|3()h2jogqNm`|$(mc+;AKE~0{ zxW{G%5={KSb!6HyLGg3!nP8C8{gtLA&PWyl7{GnZm^C9uOKEe3lf7stW13W-w8QBSspy)fs{cdUc zO2D=v^;sMgwNfZIQiaS&%kHd%N&?!k9Aq6-2(f~`bSg_H;1H3v=`RUbme5X+c+Aga zq;|3GU63R(>uu~pN>?@dmvHH;7Nw`BeQ?+%d1i%6YWqxd$b(X+HLro{m zO`I`%dS{7W$T~?_M*WTP`AmBTj3|6icOGEcU7@$4Tdg!ioY18>PRz~*oie7c$Xb*E z6j?*Ny7Fv)<&govrKvAuiS|wuqXUWmt8k9~f6t|JbQkd){U6Kc=>I@KNB?^X9euO( zjJ~yu{ubnaD5bwu{r@1RqyL?tj{X;tI{M#;D)Sf|c#K;%*HylZfgcNq=LGo15Tr9V z3B1JeXD8f{J2f4KAAqs3&Rk)68X~xX(pw1b6w8dbZu1_h73#c)<#*Q;z_)CLA9xXX ze~!$wRC~H{iiNuQXOP6-i7Q4LXCY?ejAYyZvixzRp2^M&<^rNgQW|zfa(= z=iKgPbJgcx;Cop<$Gr)Ee}=zJ@W<&mt&uZo=LZ?Nyr3oxE*o&Vpgx*lZBOnue}6up z|2XRh^b0>fz%2NPP$4ugCUTmW^qOdcPFJAexDk*y0RGl{73C>hy_nKR?+lvSJ2?I| z?HZjUIOyfjiYZl7s;7Jo6{hy0@U!5r@|>b9xfT4pF7Q)&aR~tO5;lBZQM9*!U(^kJ zc9*BPUO`j4J#zD*I=-o}1aKK|NrCIxe}OB#%hR-8L2q@ZlH>5@aCo2PCETsMRllZn yL$LJ5`nWZuVekK-|CJy9H-GxG>=_44VK4XusIYD$rl>#v4;psFML@HlR6Z;A`t;iX delta 18881 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 UKmQM>_DqKWg|pFAFDsECFpvKkyZ`_I diff --git a/stage2/protos/stivale2.c b/stage2/protos/stivale2.c index 695fc727..329dd8b7 100644 --- a/stage2/protos/stivale2.c +++ b/stage2/protos/stivale2.c @@ -327,8 +327,8 @@ void stivale2_load(char *cmdline, int boot_drive) { if (smp_hdr_tag != NULL) { struct stivale2_struct_tag_smp *tag = balloc(sizeof(struct stivale2_struct_tag_smp)); - init_smp((size_t*)&tag->cpu_count, bits == 64, pagemap, - smp_hdr_tag->flags & 1); + init_smp((size_t*)&tag->cpu_count, bits == 64, level5pg && level5pg_requested, + pagemap, smp_hdr_tag->flags & 1); append_tag(&stivale2_struct, (struct stivale2_tag *)tag); } diff --git a/stage2/sys/smp.c b/stage2/sys/smp.c index bfb1f789..72eaa8b9 100644 --- a/stage2/sys/smp.c +++ b/stage2/sys/smp.c @@ -47,12 +47,12 @@ uint8_t smp_tpl_target_mode; static bool smp_start_ap(uint8_t lapic_id, struct gdtr *gdtr, struct smp_information *info_struct, - uint8_t target_mode, uint32_t pagemap) { + bool longmode, bool lv5, uint32_t pagemap) { // Prepare the trampoline smp_tpl_info_struct = info_struct; smp_tpl_booted_flag = 0; smp_tpl_pagemap = pagemap; - smp_tpl_target_mode = target_mode; + smp_tpl_target_mode = ((uint32_t)lv5 << 1) | (uint32_t)longmode; smp_tpl_gdt = *gdtr; // Send the INIT IPI @@ -76,6 +76,7 @@ static bool smp_start_ap(uint8_t lapic_id, struct gdtr *gdtr, struct smp_information *init_smp(size_t *cpu_count, bool longmode, + bool lv5, pagemap_t pagemap, bool x2apic) { // Search for MADT table @@ -120,12 +121,14 @@ struct smp_information *init_smp(size_t *cpu_count, // Try to start the AP if (!smp_start_ap(lapic->lapic_id, &gdtr, info_struct, - longmode ? 1 : 0, (uint32_t)pagemap.top_level)) { + longmode, lv5, (uint32_t)pagemap.top_level)) { print("smp: FAILED to bring-up AP\n"); brewind(sizeof(struct smp_information)); continue; } + print("smp: Successfully brought up AP\n"); + (*cpu_count)++; break; } diff --git a/stage2/sys/smp.h b/stage2/sys/smp.h index 28a87b09..fa207f72 100644 --- a/stage2/sys/smp.h +++ b/stage2/sys/smp.h @@ -15,6 +15,7 @@ struct smp_information { struct smp_information *init_smp(size_t *cpu_count, bool longmode, + bool lv5, pagemap_t pagemap, bool x2apic); diff --git a/stage2/sys/smp_trampoline.asm b/stage2/sys/smp_trampoline.asm index fc467fd2..a78c3b32 100644 --- a/stage2/sys/smp_trampoline.asm +++ b/stage2/sys/smp_trampoline.asm @@ -36,16 +36,24 @@ smp_trampoline: btr eax, 30 mov cr0, eax - cmp dword [smp_tpl_target_mode], 0 - je parking32 - - mov eax, dword [smp_tpl_pagemap] - mov cr3, eax + test dword [smp_tpl_target_mode], (1 << 0) + jz parking32 mov eax, cr4 bts eax, 5 mov cr4, eax + test dword [smp_tpl_target_mode], (1 << 1) + jz .no5lv + + mov eax, cr4 + bts eax, 12 + mov cr4, eax + + .no5lv: + mov eax, dword [smp_tpl_pagemap] + mov cr3, eax + mov ecx, 0xc0000080 rdmsr bts eax, 8