[Top] [All Lists]

Re: [GIT PULL] x86/mm changes for v3.9-rc1

To: "H. Peter Anvin" <>
Subject: Re: [GIT PULL] x86/mm changes for v3.9-rc1
From: Linus Torvalds <>
Date: Fri, 22 Feb 2013 08:22:30 -0800
Cc: "David S. Miller" <>, "H. Peter Anvin" <>, "Rafael J. Wysocki" <>, stable <>, Alexander Duyck <>, Andrea Arcangeli <>, Andrew Morton <>, Andrzej Pietrasiewicz <>, Arnd Bergmann <>, Borislav Petkov <>, Borislav Petkov <>, Christoph Lameter <>, Daniel J Blueman <>, Dave Hansen <>, "Eric W. Biederman" <>, Fenghua Yu <>, Frederic Weisbecker <>, Gleb Natapov <>, Gokul Caushik <>, "H. J. Lu" <>, Hugh Dickins <>, Ingo Molnar <>, Ingo Molnar <>, Jacob Shin <>, Jamie Lokier <>, Jarkko Sakkinen <>, Jeremy Fitzhardinge <>, Joe Millenbach <>, Joerg Roedel <>, Johannes Weiner <>, Josh Triplett <>, Konrad Rzeszutek Wilk <>, Kyungmin Park <>, Lee Schermerhorn <>, Len Brown <>, Linux Kernel Mailing List <>, Marcelo Tosatti <>, Marek Szyprowski <>, Matt Fleming <>, Mel Gorman <>, Paul Turner <>, Pavel Machek <>, Pekka Enberg <>, Peter Zijlstra <>, Ralf Baechle <>, Rik van Riel <>, Rob Landley <>, Russell King <>, Rusty Russell <>, Shuah Khan <>, Shuah Khan <>, Stefano Stabellini <>, Steven Rostedt <>, Thomas Gleixner <>, Ville Syrjälä <>, Yasuaki Ishimatsu <>, Yinghai Lu <>, Zachary Amsden <>, Avi Kivity <>, linux-mips <>, "" <>, "Michael S. Tsirkin" <>,, virtualization <>, "" <>
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=mime-version:x-received:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=1/z2HptjR302a24hbbwFqasOppfSVXf9++eQRkTCQfg=; b=VbcTdscRO9XJN17mD+K8OqTtO2yVQqfFd5nOrFjVjk3nInRZmQyqmTCbIIXCN4Is0E IDz4nCF4IzcYIErIlNgIRLaqg0js/lw9L1ATQZm8g+jeLE5GH2x9QHrgxFTLWV8Qev6V Tx3vxudvwdz/ggsrqkGLvrknejVhIIR5RyhRWMdAAAiImEBspdDqko3EYLP/4SdmRBAr 9ipR5Z03g62NMAubLBz0sQGfQlonZt6O6JOYYXRoqF4U8dBYHu7nVyrszNsv8WfzRD1+ hesGos+W54+1//rJd2uS//6yNyndHplo/c3qNiDku8mDskOU43/nz1prNSEn/GVVgBRy 3w1Q==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=google; h=mime-version:x-received:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=1/z2HptjR302a24hbbwFqasOppfSVXf9++eQRkTCQfg=; b=ZHHGAMIgdbc7cqAoTBRpCP0MBYTYP4K+2SiGCeMGuyz0aco812PBFwC71UMfU8V038 u7m4sC9TR0D9ciBvfNnaaSn+XxVDQHF8HHCIvZlLIo0zry+YVEAQ6Q0n7aFGyTffYjSJ YsT9Z5IIaPSnTGKJDZTgDB0qacX/fqfieVP3g=
In-reply-to: <>
List-archive: <>
List-help: <>
List-id: linux-mips <>
List-owner: <>
List-post: <>
List-software: Ecartis version 1.0.0
List-subscribe: <>
List-unsubscribe: <>
References: <>
On Thu, Feb 21, 2013 at 4:34 PM, H. Peter Anvin <> wrote:
> This is a huge set of several partly interrelated (and concurrently
> developed) changes, which is why the branch history is messier than
> one would like.
> The *really* big items are two humonguous patchsets mostly developed
> by Yinghai Lu at my request, which completely revamps the way we
> create initial page tables.

Ugh. So I've tried to walk through this, and it's painful. If this
results in problems, we're going to be *so* screwed. Is it bisectable?

I also don't understand how "early_idt_handler" could *possibly* work.
In particular, it seems to rely on the trap number being set up in the
stack frame:

        cmpl $14,72(%rsp)       # Page fault?

but that's not even *true*. Why? Because we export both the
early_idt_handlers[] array (that sets up the trap number and makes the
stack frame be reliable) and the single early_idt_handler function
(that relies on the trap number and the reliable stack frame), AND

See x86_64_start_kernel():

        for (i = 0; i < NUM_EXCEPTION_VECTORS; i++) {
                set_intr_gate(i, &early_idt_handlers[i]);
                set_intr_gate(i, early_idt_handler);

so unless you have CONFIG_EARLY_PRINTK, the interrupt gate will point
to that raw early_idt_handler function that doesn't *work* on its own,

Btw, it's not just the page fault index testing that is wrong. The whole

        cmpl $__KERNEL_CS,96(%rsp)
        jne 11f

also relies on the stack frame being set up the same way for all
exceptions - which again is only true if we ran through the
early_idt_handlers[] prologue that added the extra stack entry.

How does this even work for me? I don't have EARLY_PRINTK enabled.

What am I missing?


<Prev in Thread] Current Thread [Next in Thread>