From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.skyhub.de (mail.skyhub.de [5.9.137.197]) by sourceware.org (Postfix) with ESMTPS id CD430385BF99 for ; Mon, 12 Apr 2021 15:08:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org CD430385BF99 Received: from zn.tnic (p200300ec2f052100b992cfc3eab27929.dip0.t-ipconnect.de [IPv6:2003:ec:2f05:2100:b992:cfc3:eab2:7929]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.skyhub.de (SuperMail on ZX Spectrum 128k) with ESMTPSA id 8F7B51EC0249; Mon, 12 Apr 2021 17:08:25 +0200 (CEST) Date: Mon, 12 Apr 2021 17:08:24 +0200 From: Borislav Petkov To: Florian Weimer Cc: Andy Lutomirski , "Bae, Chang Seok" , Dave Hansen , X86 ML , LKML , linux-abi@vger.kernel.org, "libc-alpha@sourceware.org" , Rich Felker , Kyle Huey , Keno Fischer Subject: Re: Candidate Linux ABI for Intel AMX and hypothetical new related features Message-ID: <20210412150824.GF24283@zn.tnic> References: <87lf9nk2ku.fsf@oldenburg.str.redhat.com> <20210412143139.GE24283@zn.tnic> <878s5nk1pk.fsf@oldenburg.str.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <878s5nk1pk.fsf@oldenburg.str.redhat.com> X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Apr 2021 15:08:28 -0000 On Mon, Apr 12, 2021 at 04:38:15PM +0200, Florian Weimer wrote: > Yes, that's why we have the XGETBV handshake. I was imprecise. It's > CPUID + XGETBV of course. Or even AT_HWCAP2 (for FSGSBASE). Ok, that sounds better. So looking at glibc sources, I see something like this: init_cpu_features |-> update_usable |-> CPU_FEATURE_SET_USABLE (cpu_features, XGETBV_ECX_1); so I'm guessing this happens when the library gets loaded per process, right? Which means, once the detection has taken place and the library has gotten XCR0, it is going to use it and won't re-ask the kernel or so? I.e., I'm trying to imagine how a per-process thing would work at all. If at all. And this sounds especially "fun": > Code that installs a signal handler often does not have control on > which thread an asynchronous signal is delivered, or which code it > interrupts. In my simplistic approach I'm thinking about something along the lines of: Library: hey kernel, can you handle AVX512? Kernel: yes Library: ok, I will use that in the signal handler And since kernel has said yes, kernel is going to take care of handling AVX512 state and library can assume that. All those old processes which cannot be recompiled, for them I guess the kernel should have to say no. Dunno how much sense that makes... > > And the CPUID-faulting thing would solve stuff like that because then > > the kernel can *actually* get involved into answering something where it > > has a say in, too. > > But why wouldn't we use a syscall or an entry in the auxiliary vector > for that? Why fault a potentially performance-critical instruction? Oh sure, CPUID faulting was just an example. I think the intent is to have this important aspect of userspace asking the kernel first what kind of features it can handle and then do accordingly. IOW, legacy stuff can work unchanged and new libraries and kernels can support fancier features and bigger buffers. Methinks. Thx. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette