Message ID | 20240108132921.255769-1-frankja@linux.ibm.com (mailing list archive) |
---|---|
Headers | show |
Series | s390x: Dirty cc before executing tested instructions | expand |
On Mon, 2024-01-08 at 13:29 +0000, Janosch Frank wrote: > A recent s390 KVM fixpatch [1] showed us that checking the cc is not > enough when emulation code forgets to set the cc. There might just be > the correct cc in the PSW which would make the cc check succeed. > > This series intentionally dirties the cc for sigp, uvc, some io > instructions and sclp to make cc setting errors more apparent. I had a > cursory look through the tested instructions and those are the most > prominent ones with defined cc values. > > Since the issue appeared in PQAP my AP test series is now dependent on > this series. > > [1] https://lore.kernel.org/kvm/20231201181657.1614645-1-farman@linux.ibm.com/ Using SET PROGRAM MASK the way you're doing in this series will also set the program mask to 0, right? In case you have some non zero register %[reg] and you want to set CC to 1 you could do: or %[reg],%[reg] /* set CC to 1 */ In general, if I understand TEST UNDER MASK right, you could do: tmll %[set_cc],3 to set the CC to the value in %[set_cc] (without any shifting).
On 1/16/24 14:02, Nina Schoetterl-Glausch wrote: > On Mon, 2024-01-08 at 13:29 +0000, Janosch Frank wrote: >> A recent s390 KVM fixpatch [1] showed us that checking the cc is not >> enough when emulation code forgets to set the cc. There might just be >> the correct cc in the PSW which would make the cc check succeed. >> >> This series intentionally dirties the cc for sigp, uvc, some io >> instructions and sclp to make cc setting errors more apparent. I had a >> cursory look through the tested instructions and those are the most >> prominent ones with defined cc values. >> >> Since the issue appeared in PQAP my AP test series is now dependent on >> this series. >> >> [1] https://lore.kernel.org/kvm/20231201181657.1614645-1-farman@linux.ibm.com/ > > Using SET PROGRAM MASK the way you're doing in this series will also set the > program mask to 0, right? > > In case you have some non zero register %[reg] and you want to set CC to 1 you > could do: > > or %[reg],%[reg] /* set CC to 1 */ > > In general, if I understand TEST UNDER MASK right, you could do: > > tmll %[set_cc],3 > > to set the CC to the value in %[set_cc] (without any shifting). That is a wonderful solution to this problem. I'll send out a new version in the next couple of days.