From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932708AbdLRNTW (ORCPT ); Mon, 18 Dec 2017 08:19:22 -0500 Received: from merlin.infradead.org ([205.233.59.134]:39494 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752867AbdLRNTV (ORCPT ); Mon, 18 Dec 2017 08:19:21 -0500 Date: Mon, 18 Dec 2017 14:18:42 +0100 From: Peter Zijlstra To: Thomas Gleixner Cc: LKML , x86@kernel.org, Linus Torvalds , Andy Lutomirsky , Dave Hansen , Borislav Petkov , Greg KH , keescook@google.com, hughd@google.com, Brian Gerst , Josh Poimboeuf , Denys Vlasenko , Rik van Riel , Boris Ostrovsky , Juergen Gross , David Laight , Eduardo Valentin , aliguori@amazon.com, Will Deacon , daniel.gruss@iaik.tugraz.at, Dave Hansen , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" Subject: Re: [patch V163 37/51] x86/events/intel/ds: Map debug buffers in fixmap Message-ID: <20171218131842.h72dvlc42dgv4fdu@hirez.programming.kicks-ass.net> References: <20171218114215.239543034@linutronix.de> <20171218115256.645349337@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171218115256.645349337@linutronix.de> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Dec 18, 2017 at 12:42:52PM +0100, Thomas Gleixner wrote: > +static u64 ds_update_fixmap(int idx, void *addr, size_t size, pgprot_t prot) > { > + phys_addr_t pa, va; > + size_t msz = 0; > + > + va = __fix_to_virt(idx); > + pa = virt_to_phys(addr); > + for (; msz < size; idx--, msz += PAGE_SIZE, pa += PAGE_SIZE) > + __set_fixmap(idx, pa, prot); > + return va; > +} > + > +static void *dsalloc_pages(size_t size, gfp_t flags, int cpu) > +{ > + unsigned int order = get_order(size); > int node = cpu_to_node(cpu); > + struct page *page; > + > + page = __alloc_pages_node(node, flags | __GFP_ZERO, order); > + return page ? page_address(page) : NULL; > +} > + > +static void dsfree_pages(const void *buffer, size_t size) > +{ > + if (buffer) > + free_pages((unsigned long)buffer, get_order(size)); > +} Note to self: since we're now using a virtual mapping for this stuff, we can avoid the high order page allocs.