Re: [PATCH v2] LoongArch: Clean useless vcsr in loongarch_fpu.

From: Qi Hu
Date: Thu Jul 07 2022 - 02:09:58 EST



On 2022/7/7 12:22, WANG Xuerui wrote:
On 2022/7/7 12:04, Xi Ruoyao wrote:
On Thu, 2022-07-07 at 11:05 +0800, WANG Xuerui wrote:

To be frank, at this point I think you're trying to hide something.
(This is not your fault, blame someone else of course because they told
you the fact.) In the old-world kernel the VCSR a.k.a. FCSR16 is
certainly being saved/restored, and there's apparently no harm in doing
so. And if the contents are indeed "undefined", why are the code there
in the first place? Certainly the bits *are* meaningful, only that for
some reason you aren't revealing the semantics and pretending that they
are "undefined" and probably "do nothing externally observable" if
accessed in the first place.
On a 3A5000LL, I did an experiment via a kernel module, which enables
LSX/LASX and tries to write and read fcsr16.  I tried each bit (1, 2, 4,
8, ..., 1 << 31) one by one.  The result: no matter which bit I wrote
into fcsr16, I always read out 0.

And I've objdump'ed a kernel shipped in an early Loongnix release.  It
seems the only reference to fcsr16 is a "movgr2fcsr $r16, $r0"
instruction.

Hmm this is weird. I can't understand why the vcsr code was there in the first place then... I'd like to check a few Loongnix/Kylin/UOS kernels but currently I don't have the time.

If this is the case, indeed all vcsr-related code should be removed. Although I'm still not sure how to best word the commit message.

Thanks for the Ruoyao's experiment.

Removing the vcsr is the first step to trying to support LBT and LSX/LASX in Kernel. In my opinion, the vcsr relevant code may be used for debugging and forgot to remove.