From owner-freebsd-ppc@freebsd.org Fri May 3 01:29:03 2019 Return-Path: Delivered-To: freebsd-ppc@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 50F2315805D4 for ; Fri, 3 May 2019 01:29:03 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic314-20.consmr.mail.gq1.yahoo.com (sonic314-20.consmr.mail.gq1.yahoo.com [98.137.69.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7A5C9818E0 for ; Fri, 3 May 2019 01:29:01 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-YMail-OSG: 0hwqGi4VM1lCxV.z91_weOhSCsI_x.ffF6yAwh1vkozLWsn5RmfTdZm.G3U4nV7 jueXZ8LXXd7OgUjtZU0NSKluoIciV0lshy6ivGG.9cM0x2LNU12OFA7t7VtCUQ7sYqq43lgJRvPK u8I2VPQSy5zYyXiPZfeoychVtrHjrRrM.5rvROjuE0zCoCjhiebNmFGtf7z920xCsfAzUzhESMRQ N6Lpha4_2nGgiWdx.KWAQeHdkIzglSG.pZZm5EZP52HlJ0c9CFqVNG1i4xKYeEi.0bootQmmAXyq IqJBZ6c9BvLHyxGWqVE4pBy_TzZz4V54c5h.PcsgXt8tLeCsZoTPw92mNQ0Dkbx16OPOtfxzF0BQ M8ZUTWmz4ttvFdr4tEmLPj3cCBzVXd0kiOO9.Ipx0UK_m_FbI_0hftC_D1xgYeZAsLtC7pCJsllV mBV47NhXwvuAnYTVWCipaf1XD9ynwtrAS2miQyAfT0E1QI_o7Y7AoqXJKdGOY475JAS60mmAQdRe RVZ924n_EhhcyDcgWx81Hbe2zFY_GBl.RVvcBIFs0yyHimAaIEsyG.ugOLO1VXQXUZ407.hRfVcN SUsVund5.GgJREIZRuLUgjNTySXgI7tnscfLspVQVIlIxF2ezp4TlAxlcXCdaRiZ5oRE3m5lxkRR DFKo4swqS0KyK7qSPrtub6rkls8lpqi1wCoZJyJ1frEPFDXRpSAyA3YeS3zleTEWxAgJhgq2GW5e L3lUGPH.NJAjZKAlPC.zfd70jS6RT_H.mRiEQ74JSRawXBnYAm9h45zrQv37oluV87pJxAtXdm8j 7o9kwuDQ8pIkB1lqNf7Br6Jh0bWwYFtFBfIWCgtt2.hcEUKp_TTK83Y0HPsha.NB3Ju1zsMKnZ2. OBvmb79AVb_iEKO.3dN7wN0uSIU_kNMozfrtb4UFbpyAj9rxHSA2ikPyjPQHrTRsr3nrIwEISUVv wKBpJXPUxfe8SP4YIWe7AqkxZGcVxAGJOK0QQtbwMYAlKrWRkn2IG9tWUNS.6uvzoBPf6U6pgf9A 8PSuYIlS7G.zdVoI7HN0PcShtd2jAvtvTd04nLT7iraz_Ul4mf.Em4sC6dl3mpDBW_ANNwrJE_Al etC41ME_g0ihZP77QCEK560DbXPbvTbrGpD5oETpk.zGRGnkHKj6_WzKqB.iodFb5_4cIKJ6Qy3D KrYk- Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.gq1.yahoo.com with HTTP; Fri, 3 May 2019 01:28:53 +0000 Received: from c-76-115-7-162.hsd1.or.comcast.net (EHLO [192.168.1.103]) ([76.115.7.162]) by smtp418.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID a29860db5177766b0b5c188062fa0055; Fri, 03 May 2019 01:28:52 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.8\)) Subject: Re: kernel mode EXC_DSE handling depends on td->td_pcb-> not slb faulting in setting up its slbmte use? Date: Thu, 2 May 2019 18:28:51 -0700 References: To: FreeBSD PowerPC ML , Justin Hibbits In-Reply-To: Message-Id: <959E3373-B45A-4CD9-B191-39A0DBE24458@yahoo.com> X-Mailer: Apple Mail (2.3445.104.8) X-Rspamd-Queue-Id: 7A5C9818E0 X-Spamd-Bar: ++++ X-Spamd-Result: default: False [4.69 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; MV_CASE(0.50)[]; FREEMAIL_FROM(0.00)[yahoo.com]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; MX_GOOD(-0.01)[cached: mta6.am0.yahoodns.net]; RCPT_COUNT_TWO(0.00)[2]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; SUBJECT_ENDS_QUESTION(1.00)[]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/21, country:US]; MID_RHS_MATCH_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[yahoo.com.dwl.dnswl.org : 127.0.5.0]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; FROM_HAS_DN(0.00)[]; NEURAL_SPAM_SHORT(0.99)[0.985,0]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; NEURAL_SPAM_MEDIUM(0.55)[0.553,0]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_SPAM_LONG(0.91)[0.910,0]; RCVD_IN_DNSWL_NONE(0.00)[83.69.137.98.list.dnswl.org : 127.0.5.0]; IP_SCORE(1.75)[ip: (7.24), ipnet: 98.137.64.0/21(0.88), asn: 36647(0.70), country: US(-0.06)]; RWL_MAILSPIKE_POSSIBLE(0.00)[83.69.137.98.rep.mailspike.net : 127.0.0.17] X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 May 2019 01:29:03 -0000 [I show other examples of what is accessed in order to set up a slbmte in some other places and list a question that I should have asked in the original message.] On 2019-May-2, at 14:40, Mark Millard wrote: > /usr/src/sys/powerpc/powerpc/trap.c has: >=20 > } else { > /* Kernel Mode Traps */ >=20 > KASSERT(cold || td->td_ucred !=3D NULL, > ("kernel trap doesn't have ucred")); > switch (type) { > . . . > #if defined(__powerpc64__) && defined(AIM) > case EXC_DSE: > if (td->td_pcb->pcb_cpu.aim.usr_vsid !=3D 0 && > (frame->dar & SEGMENT_MASK) =3D=3D = USER_ADDR) { > __asm __volatile ("slbmte %0, %1" :: > = "r"(td->td_pcb->pcb_cpu.aim.usr_vsid), > "r"(USER_SLB_SLBE)); > return; > } > break; > #endif >=20 > in trap(...). >=20 > If the kernel mode EXC_DSE code got a slb fault from > td->td_pcb-> would things still be okay? (Nested trap > handling.) >=20 > If not, does something need to be done to guarantee > that td->td_pcb-> will not have an slb fault in the > above code? I should have asked: Are all of addresses involved known to stick to to being DMAP addresses (that there-by avoid slb-miss issues)? Similar questions might apply to some or all of the below. Some are used in slbmte instructions and others are just closely associated in the code. src/sys/powerpc/aim/mmu_oea64.c has moea64_activate with: pmap_t pm; =20 pm =3D &td->td_proc->p_vmspace->vm_pmap; CPU_SET(PCPU_GET(cpuid), &pm->pm_active); =20 #ifdef __powerpc64__ PCPU_SET(aim.userslb, pm->pm_slb); __asm __volatile("slbmte %0, %1; isync" :: "r"(td->td_pcb->pcb_cpu.aim.usr_vsid), "r"(USER_SLB_SLBE)); #else So: td-> and: td->td_proc-> and: td->td_proc->p_vmspace-> and: td->td_pcb-> src/sys/powerpc/aim/mmu_oea64.c also has moea64_map_user_ptr with: curthread->td_pcb->pcb_cpu.aim.usr_segm =3D (uintptr_t)uaddr >> ADDR_SR_SHFT; curthread->td_pcb->pcb_cpu.aim.usr_vsid =3D slbv; #ifdef __powerpc64__ __asm __volatile ("slbie %0; slbmte %1, %2; isync" :: "r"(USER_ADDR), "r"(slbv), "r"(USER_SLB_SLBE)); #else So: curhtread-> and: curthread->td_pcb-> src/sys/powerpc/powerpc/trap.c has syscall with: td =3D curthread; td->td_frame =3D frame; =20 #if defined(__powerpc64__) && defined(AIM) /* * Speculatively restore last user SLB segment, which we know is * invalid already, since we are likely to do = copyin()/copyout(). */ if (td->td_pcb->pcb_cpu.aim.usr_vsid !=3D 0) // no slbie needed? __asm __volatile ("isync; slbmte %0, %1; isync" :: "r"(td->td_pcb->pcb_cpu.aim.usr_vsid), = "r"(USER_SLB_SLBE)); #endif So: curthread-> and: curthread->td_pcb-> =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)