VirtualBox

Changeset 37041 in vbox


Ignore:
Timestamp:
May 11, 2011 4:54:32 PM (14 years ago)
Author:
vboxsync
Message:

IPRT: Refined the RTThreadPreemptIsPending fix.

Location:
trunk/src/VBox/Runtime/r0drv/darwin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h

    r28800 r37041  
    111111extern void mp_rendezvous_no_intrs(void (*)(void *), void *);
    112112
     113/* osfmk/i386/cpu_data.h */
     114struct my_cpu_data_x86
     115{
     116    struct my_cpu_data_x86 *cpu_this;
     117    thread_t                cpu_active_thread;
     118    void                   *cpu_int_state;
     119    vm_offset_t             cpu_active_stack;
     120    vm_offset_t             cpu_kernel_stack;
     121    vm_offset_t             cpu_int_stack_top;
     122    int                     cpu_preemption_level;
     123    int                     cpu_simple_lock_count;
     124    int                     cpu_interrupt_level;
     125    int                     cpu_number;
     126    int                     cpu_phys_number;
     127    cpu_id_t                cpu_id;
     128    int                     cpu_signals;
     129    int                     cpu_mcount_off;
     130    /*ast_t*/uint32_t       cpu_pending_ast;
     131    int                     cpu_type;
     132    int                     cpu_subtype;
     133    int                     cpu_threadtype;
     134    int                     cpu_running;
     135};
     136
    113137/* osfmk/i386/cpu_number.h */
    114138extern int cpu_number(void);
  • trunk/src/VBox/Runtime/r0drv/darwin/threadpreempt-r0drv-darwin.cpp

    r37040 r37041  
    111111    __asm__ volatile("movl %%gs:%P1,%0\n\t"
    112112                     : "=r" (ast_pending)
    113                      : "i"  (7*sizeof(void*) + (7 + (ARCH_BITS == 64)) *sizeof(int)) );
     113                     : "i"  (__builtin_offsetof(struct my_cpu_data_x86, cpu_pending_ast)) );
    114114#else
    115 # error fixme.
    116     cpu_data_t *pCpu = current_cpu_datap(void);
    117     AssertCompileMemberOffset(cpu_data_t, cpu_pending_ast, 7*sizeof(void*) + 7*sizeof(int));
    118     cpu_pending_ast = pCpu->cpu_pending_ast;
     115# error "Port me"
    119116#endif
    120117    AssertMsg(!(ast_pending & UINT32_C(0xfffff000)),("%#x\n", ast_pending));
Note: See TracChangeset for help on using the changeset viewer.

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