129 events >>= offset;
130 percpu_counter_set(&pd->pg[index].events, events);
131
132
133
134
135 smp_wmb();
136 pd->index = index;
137 local_irq_restore(flags);
138
139 synchronize_rcu();
140
141out:
142 mutex_unlock(&pd->mutex);
143}
144
145
146
147
148
149static struct prop_global *prop_get_global(struct prop_descriptor *pd)
150{
151 int index;
152
153 rcu_read_lock();
154 index = pd->index;
155
156
157
158 smp_rmb();
159 return &pd->pg[index];
160}
161
162static void prop_put_global(struct prop_descriptor *pd, struct prop_global *pg)
163{
164 rcu_read_unlock();
165}
166
167static void
168prop_adjust_shift(int *pl_shift, unsigned long *pl_period, int new_shift)
169{