Re: [RFC PATCH v2 4/4] arm64: Export id_aar64fpr0 via sysfs

Qais Yousef
2020-10-21T19:59:29Z

On 10/21/20 18:23, Will Deacon wrote:
> On Wed, Oct 21, 2020 at 05:07:30PM +0100, Qais Yousef wrote:
> > On 10/21/20 16:23, Will Deacon wrote:
> > > > > If a cpumask is easier to implement and easier to use, then I think that's
> > > > > what we should do. It's also then dead easy to disable if necessary by
> > > > > just returning 0. The only alternative I would prefer is not having to
> > > > > expose this information altogether, but I'm not sure that figuring this
> > > > > out from MIDR/REVIDR alone is reliable.
> > > >
> > > > I did suggest this before, but I'll try gain. If we want to assume a custom
> > > > bootloader and custom user space, we can make them provide the mask.
> > >
> > > Who mentioned a custom bootloader? In the context of Android, we're
> >
> > Custom bootloader as in a bootloader that needs to opt-in to enable the
> > feature (pass the right cmdline param). Catalin suggested to make this a sysctl
> > to allow also for runtime toggling. But the initial intention was to have this
> > to enable it at cmdline.
>
> Hmm, ok, I don't think allowing the cmdline to be specified means its a
> custom bootloader.

True it could be just added to chosen property in the DT file without any
bootloader changes.

Bad usage of English probably. I just meant the bootloader might need to be
made aware of the opt-in process too. So it can potentially co-operate more.

> > > talking about a user-space that already manages scheduling affinity.
> > >
> > > > For example, the new sysctl_enable_asym_32bit could be a cpumask instead of
> > > > a bool as it currently is. Or we can make it a cmdline parameter too.
> > > > In both cases some admin (bootloader or init process) has to ensure to fill it
> > > > correctly for the target platform. The bootloader should be able to read the
> > > > registers to figure out the mask. So more weight to make it a cmdline param.
> > >
> > > I think this is adding complexity for the sake of it. I'm much more in
> >
> > I actually think it reduces complexity. No special ABI to generate the mask
> > from the kernel. The same opt-in flag is the cpumask too.
>
> Maybe I'm misunderstanding your proposal but having a cpumask instead of

What I meant is that if we change the requirement to opt-in from a boolean
switch

sysctl.enable_32bit_asym=1

to require the bootloader/init scripts provide the mask of aarch32 capable cpus

sysctl.asym_32bit_cpus=0xf0

This will achieve multiple things at the same time:

* Defer cpus specification to platform designers who want to
enable this feature on their platform.

* We don't need a separate API to export which cpus are 32bit capable.
They can read it directly from /proc/sys/kernel/asym_32bit_cpus.
When it's 0 it means the system is not asymmetric.

* If/when we want to disable this support in the future. The sysctl
handler will just have to return 0 all the time and ignore all
writes.

So it's changing the way user space opts-in. The kernel will still treat it as
a boolean, and probably sanity check the cpus to make sure they match what it
sees.

> a bool means you now have to consider policy on a per-cpu basis, which
> adds an extra dimension to this. For example, do you allow that mask to
> be changed at runtime so that differents sets of CPUs now support 32-bit?
> Do you preserve it across hotplug?

I can see how cpumask word was confusing. I hope the above is clearer.
We don't change how the kernel works, but rather what the user space have to do
to opt-in. Hopefully hitting 2 birds with one stone :-)

Thanks!

--
Qais Yousef