Logo Search packages:      
Sourcecode: linux version File versions  Download package

vgetcpu.c

/*
 * Copyright 2006 Andi Kleen, SUSE Labs.
 * Subject to the GNU Public License, v.2
 *
 * Fast user context implementation of getcpu()
 */

#include <linux/kernel.h>
#include <linux/getcpu.h>
#include <linux/jiffies.h>
#include <linux/time.h>
#include <asm/vsyscall.h>
#include <asm/vgtod.h>
#include "vextern.h"

long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
{
      unsigned int dummy, p;

      if (*vdso_vgetcpu_mode == VGETCPU_RDTSCP) {
            /* Load per CPU data from RDTSCP */
            rdtscp(dummy, dummy, p);
      } else {
            /* Load per CPU data from GDT */
            asm("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
      }
      if (cpu)
            *cpu = p & 0xfff;
      if (node)
            *node = p >> 12;
      return 0;
}

long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache)
      __attribute__((weak, alias("__vdso_getcpu")));

Generated by  Doxygen 1.6.0   Back to index