lkml.org 
[lkml]   [2000]   [Oct]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Calling current() from interrupt context
    XXXXXXXX

    "Jeff V. Merkey" wrote:
    >
    > "Jeff V. Merkey" wrote:
    > >
    > > "David S. Miller" wrote:
    > > >
    > > > Date: Tue, 10 Oct 2000 00:44:58 +0200
    > > > From: "Andi Kleen" <ak@suse.de>
    > > >
    > > > On Mon, Oct 09, 2000 at 11:41:13PM +0100, Alan Cox wrote:
    > > > > I dont actually know a CPU that doesnt have one in SMP mode. Its just often
    > > > > behind an I/O interface that is slower than ideal
    > > >
    > > > Where would you put it for IA32 ? I don't know any free MSR that could
    > > > be abused for that, and acessing MSRs is insanely slow anyways. Any
    > > > other ideas ?
    > > >
    > > > The local APIC holds the hardware cpu number (which happens to equal
    > > > the logical cpu number in the current x86 code). And I believe the
    > > > local APIC has a 32-bit scratch register or 2 as well... but don't
    > > > quote me on that one.
    > >
    > > Accessing the CPUID from the local APIC is slower than mollasses. The
    > > reason for this is due to the fact that the APIC address ranges are
    > > treated as non-cacheable memory, and will always generate a
    > > non-cacheable memory reference when you read from the APIC_ID register
    > > and shift the ID.
    >
    > You can verify this with a logic analyzer and watch the system suck wind
    > and get really slow, I/O performance go to shit after you read the
    > memory mapped APIC registers from a context
    > switch loop, i.e.
    >
    > while (1)
    > {
    > read_local_apic(); // OINK OINK OINK -- bus utilitization will go
    > through the roof.
    > schedule()
    > }
    >
    > and watch it oink...
    >
    > >
    > > A simpler solution is to use the CR2 register to store the CPU number,
    > > and always reload the register after a page fault (since CR2 will hold a
    > > faulting address). THis is even better than Linus' stack based method
    > > for storing the number since you just are reading a register, which is
    > > fast as hell. The other methods are slower.
    > >
    > > hHis is how it's done in NetWare and MANOS. It works....
    > >
    > > :-)
    > >
    > > Jeff
    > >
    > > >
    > > > Later,
    > > > David S. Miller
    > > > davem@redhat.com
    > > > -
    > > > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    > > > the body of a message to majordomo@vger.kernel.org
    > > > Please read the FAQ at http://www.tux.org/lkml/
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 12:41    [W:0.025 / U:209.832 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site