VirtualBox

Changeset 19389 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
May 5, 2009 5:12:48 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
46899
Message:

IPRT: Implemented RTMpPokeCpu where it made sense (untested).

Location:
trunk/src/VBox/Runtime
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/Makefile.kmk

    r19387 r19389  
    11091109        generic/mppresent-generic.cpp \
    11101110        nt/RTErrConvertFromNtStatus.cpp \
     1111        r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp \
    11111112        r0drv/memobj-r0drv.cpp \
    11121113        r0drv/mpnotification-r0drv.c \
     
    13151316ifdef VBOX_WITH_SOLARIS_VBI
    13161317 RuntimeR0Drv_SOURCES.solaris += \
     1318        r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp \
    13171319        r0drv/solaris/vbi/mpnotification-r0drv-solaris.c \
    13181320        r0drv/solaris/vbi/alloc-r0drv-solaris.c \
     
    13511353        generic/RTMpIsCpuOnline-generic.cpp \
    13521354        r0drv/generic/RTMpIsCpuWorkPending-r0drv-generic.cpp \
    1353         r0drv/generic/RTMpOn-r0drv-generic.cpp
     1355        r0drv/generic/RTMpOn-r0drv-generic.cpp \
     1356        r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp
    13541357 else
    13551358  # Use mp-r0drv-solaris.c.
    13561359  RuntimeR0Drv_SOURCES.solaris += \
    1357         r0drv/solaris/mp-r0drv-solaris.c
     1360        r0drv/solaris/mp-r0drv-solaris.c \
     1361        r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp
    13581362#       r0drv/solaris/mpnotification-r0drv-solaris.c
    13591363 endif
     
    13991403        r0drv/generic/RTMpIsCpuWorkPending-r0drv-generic.cpp \
    14001404        r0drv/generic/RTMpOn-r0drv-generic.cpp \
     1405        r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp \
    14011406        r0drv/generic/mpnotification-r0drv-generic.cpp \
    14021407        r0drv/solaris/alloc-r0drv-solaris.c \
  • trunk/src/VBox/Runtime/r0drv/darwin/mp-r0drv-darwin.cpp

    r19056 r19389  
    275275}
    276276
     277
     278RTDECL(int) RTMpPokeCpu(RTCPUID idCpu)
     279{
     280    /* no unicast IPI */
     281    return VERR_NOT_SUPPORTED;
     282}
     283
  • trunk/src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c

    r19264 r19389  
    233233}
    234234
     235
     236#if __FreeBSD_version >= 700000
     237/**
     238 * Dummy callback for RTMpPokeCpu.
     239 * @param   pvArg   Ignored
     240 */
     241static void rtmpFreeBSDPokeCallback(void *pvArg)
     242{
     243    NOREF(pvArg);
     244}
     245
     246
     247RTDECL(int) RTMpPokeCpu(RTCPUID idCpu)
     248{
     249    cpumask_t   Mask;
     250
     251    /* Will panic if no rendezvouing cpus, so make sure the cpu is online. */
     252    if (!RTMpIsCpuOnline(idCpu))
     253        return VERR_CPU_NOT_FOUND;
     254
     255    Mask = (cpumask_t)1 << idCpu;
     256    smp_rendezvous_cpus(Mask, NULL, rtmpFreeBSDPokeCallback, NULL, NULL);
     257
     258    return VINF_SUCCESS;
     259}
     260
     261#else  /* < 7.0 */
     262RTDECL(int) RTMpPokeCpu(RTCPUID idCpu)
     263{
     264    return VERR_NOT_SUPPORTED;
     265}
     266#endif /* < 7.0 */
     267
  • trunk/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c

    r15843 r19389  
    320320}
    321321
     322
     323#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
     324/**
     325 * Dummy callback used by RTMpPokeCpu.
     326 *
     327 * @param   pvInfo      Ignored.
     328 */
     329static void rtmpLinuxPokeCpuCallback(void *pvInfo)
     330{
     331    NOREF(pvInfo);
     332}
     333#endif
     334
     335
     336RTDECL(int) RTMpPokeCpu(RTCPUID idCpu)
     337{
     338#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
     339    int rc;
     340
     341    if (!RTMpIsCpuPossible(idCpu))
     342        return VERR_CPU_NOT_FOUND;
     343    if (!RTMpIsCpuOnline(idCpu))
     344        return VERR_CPU_OFFLINE;
     345
     346# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
     347    rc = smp_call_function_single(idCpu, rtmpLinuxPokeCpuCallback, NULL, 0 /* wait */);
     348# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
     349    rc = smp_call_function_single(idCpu, rtmpLinuxPokeCpuCallback, NULL, 0 /* retry */, 0 /* wait */);
     350# else  /* older kernels */
     351#  error oops
     352# endif /* older kernels */
     353    Assert(rc == 0);
     354    return VINF_SUCCESS;
     355
     356#else  /* older kernels */
     357    /* no unicast here? */
     358    return VERR_NOT_SUPPORTED;
     359#endif /* older kernels */
     360}
     361
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette