mp-r0drv-linux.c revision 82cb01fb860b80d7748d8e97ee9d8a05e12dd4b8
/* $Id$ */
/** @file
* innotek Portable Runtime - Multiprocessor, Ring-0 Driver, Linux.
*/
/*
* Copyright (C) 2008 innotek GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*/
/*******************************************************************************
* Header Files *
*******************************************************************************/
#include "the-linux-kernel.h"
#include "r0drv/mp-r0drv.h"
{
return smp_processor_id();
}
{
}
{
}
{
}
{
#ifdef CONFIG_SMP
return false;
# ifdef cpu_online
return cpu_online(idCpu);
# else /* 2.4: */
# endif
#else
#endif
}
{
#ifdef CONFIG_SMP
return false;
# ifdef CONFIG_HOTPLUG_CPU /* introduced & uses cpu_present */
return cpu_present(idCpu);
# elif defined(cpu_possible)
return cpu_possible(idCpu);
# else /* 2.4: */
# endif
#else
#endif
}
{
idCpu = RTMpGetMaxCpuId();
do
{
if (RTMpDoesCpuExist(idCpu))
} while (idCpu-- > 0);
return pSet;
}
{
#ifdef CONFIG_SMP
# if defined(CONFIG_HOTPLUG_CPU) /* introduced & uses cpu_present */
return num_present_cpus();
# elif defined(num_possible_cpus)
return num_possible_cpus();
return smp_num_cpus;
# else
RTMpGetSet(&Set);
return RTCpuSetCount(&Set);
# endif
#else
return 1;
#endif
}
{
#ifdef CONFIG_SMP
idCpu = RTMpGetMaxCpuId();
do
{
if (RTMpIsCpuOnline(idCpu))
} while (idCpu-- > 0);
#else
#endif
return pSet;
}
{
#ifdef CONFIG_SMP
# if defined(num_online_cpus)
return num_online_cpus();
# else
return RTCpuSetCount(&Set);
# endif
#else
return 1;
#endif
}
/**
* Wrapper between the native linux per-cpu callbacks and PFNRTWORKER
*
* @param pvInfo Pointer to the RTMPARGS package.
*/
static void rtmpLinuxWrapper(void *pvInfo)
{
}
{
int rc;
#else /* older kernels */
# ifdef preempt_disable
# endif
# ifdef preempt_enable
# endif
#endif /* older kernels */
return VINF_SUCCESS;
}
{
int rc;
# ifdef preempt_disable
# endif
# ifdef preempt_enable
# endif
return VINF_SUCCESS;
}
{
int rc;
/** @todo validate idCpu . */
# ifdef preempt_disable
# endif
else
{
rc = 0;
}
# ifdef preempt_enable
# endif
return VINF_SUCCESS;
}