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