require '_h2ph_pre.ph'; no warnings 'redefine'; unless(defined(&__LINUX_RCUPDATE_H)) { eval 'sub __LINUX_RCUPDATE_H () {1;}' unless defined(&__LINUX_RCUPDATE_H); if(defined(&__KERNEL__)) { require 'linux/cache.ph'; require 'linux/spinlock.ph'; require 'linux/threads.ph'; require 'linux/percpu.ph'; require 'linux/cpumask.ph'; require 'linux/seqlock.ph'; eval 'sub RCU_HEAD_INIT () {{ . &next = &NULL, . &func = &NULL };}' unless defined(&RCU_HEAD_INIT); eval 'sub RCU_HEAD { my($head) = @_; eval q(1; }' unless defined(&RCU_HEAD); eval 'sub INIT_RCU_HEAD { my($ptr) = @_; eval q( &do { ($ptr)-> &next = &NULL; ($ptr)-> &func = &NULL; } &while (0)); }' unless defined(&INIT_RCU_HEAD); if(defined(&CONFIG_SMP)) { } eval 'sub rcu_bh_qsctr_inc { my($cpu) = @_; eval q({ 1; ($rdp->{passed_quiesc}) = 1; }); }' unless defined(&rcu_bh_qsctr_inc); eval 'sub rcu_read_lock () { eval q( &do { &preempt_disable(); &__acquire( &RCU); } &while(0)); }' unless defined(&rcu_read_lock); eval 'sub rcu_read_unlock () { eval q( &do { &__release( &RCU); &preempt_enable(); } &while(0)); }' unless defined(&rcu_read_unlock); eval 'sub rcu_read_lock_bh () { eval q( &do { &local_bh_disable(); &__acquire( &RCU_BH); } &while(0)); }' unless defined(&rcu_read_lock_bh); eval 'sub rcu_read_unlock_bh () { eval q( &do { &__release( &RCU_BH); &local_bh_enable(); } &while(0)); }' unless defined(&rcu_read_unlock_bh); eval 'sub rcu_dereference { my($p) = @_; eval q(({ &typeof($p) &_________p1 = $p; &smp_read_barrier_depends(); ( &_________p1); })); }' unless defined(&rcu_dereference); eval 'sub rcu_assign_pointer { my($p, $v) = @_; eval q(({ &smp_wmb(); ($p) = ($v); })); }' unless defined(&rcu_assign_pointer); eval 'sub synchronize_sched () { eval q( &synchronize_rcu()); }' unless defined(&synchronize_sched); } } 1;