Lines Matching refs:lpriv

127 static bool __imsic_local_sync(struct imsic_local_priv *lpriv)
134 lockdep_assert_held(&lpriv->lock);
136 for_each_set_bit(i, lpriv->dirty_bitmap, imsic->global.nr_ids + 1) {
139 vec = &lpriv->vectors[i];
180 NULL : &lpriv->vectors[mvec->local_id];
204 bitmap_clear(lpriv->dirty_bitmap, i, 1);
211 static void __imsic_local_timer_start(struct imsic_local_priv *lpriv, unsigned int cpu)
213 lockdep_assert_held(&lpriv->lock);
215 if (!timer_pending(&lpriv->timer)) {
216 lpriv->timer.expires = jiffies + 1;
217 add_timer_on(&lpriv->timer, cpu);
221 static inline void __imsic_local_timer_start(struct imsic_local_priv *lpriv, unsigned int cpu)
228 struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
231 raw_spin_lock_irqsave(&lpriv->lock, flags);
234 bitmap_fill(lpriv->dirty_bitmap, imsic->global.nr_ids + 1);
235 if (!__imsic_local_sync(lpriv))
236 __imsic_local_timer_start(lpriv, smp_processor_id());
238 raw_spin_unlock_irqrestore(&lpriv->lock, flags);
259 static void __imsic_remote_sync(struct imsic_local_priv *lpriv, unsigned int cpu)
261 lockdep_assert_held(&lpriv->lock);
277 if (__imsic_local_sync(lpriv))
281 __imsic_local_timer_start(lpriv, cpu);
285 static void __imsic_remote_sync(struct imsic_local_priv *lpriv, unsigned int cpu)
287 lockdep_assert_held(&lpriv->lock);
288 __imsic_local_sync(lpriv);
294 struct imsic_local_priv *lpriv;
296 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
297 if (WARN_ON_ONCE(&lpriv->vectors[vec->local_id] != vec))
305 raw_spin_lock(&lpriv->lock);
308 bitmap_set(lpriv->dirty_bitmap, vec->local_id, 1);
309 __imsic_remote_sync(lpriv, vec->cpu);
311 raw_spin_unlock(&lpriv->lock);
316 struct imsic_local_priv *lpriv;
318 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
319 if (WARN_ON_ONCE(&lpriv->vectors[vec->local_id] != vec))
327 raw_spin_lock(&lpriv->lock);
330 bitmap_set(lpriv->dirty_bitmap, vec->local_id, 1);
331 __imsic_remote_sync(lpriv, vec->cpu);
333 raw_spin_unlock(&lpriv->lock);
338 struct imsic_local_priv *lpriv;
342 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
343 raw_spin_lock_irqsave(&lpriv->lock, flags);
350 raw_spin_unlock_irqrestore(&lpriv->lock, flags);
353 static bool imsic_vector_move_update(struct imsic_local_priv *lpriv,
360 raw_spin_lock_irqsave(&lpriv->lock, flags);
371 bitmap_set(lpriv->dirty_bitmap, vec->local_id, 1);
372 __imsic_remote_sync(lpriv, vec->cpu);
374 raw_spin_unlock_irqrestore(&lpriv->lock, flags);
387 old_lpriv = per_cpu_ptr(imsic->lpriv, old_vec->cpu);
391 new_lpriv = per_cpu_ptr(imsic->lpriv, new_vec->cpu);
408 struct imsic_local_priv *lpriv;
412 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
413 if (WARN_ON_ONCE(&lpriv->vectors[vec->local_id] != vec))
439 struct imsic_local_priv *lpriv = per_cpu_ptr(imsic->lpriv, cpu);
441 if (!lpriv || imsic->global.nr_ids < local_id)
444 return &lpriv->vectors[local_id];
450 struct imsic_local_priv *lpriv;
461 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
462 vec = &lpriv->vectors[local_id];
483 struct imsic_local_priv *lpriv;
487 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
489 bitmap_free(lpriv->dirty_bitmap);
490 kfree(lpriv->vectors);
493 free_percpu(imsic->lpriv);
499 struct imsic_local_priv *lpriv;
504 imsic->lpriv = alloc_percpu(typeof(*imsic->lpriv));
505 if (!imsic->lpriv)
510 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
512 raw_spin_lock_init(&lpriv->lock);
515 lpriv->dirty_bitmap = bitmap_zalloc(global->nr_ids + 1, GFP_KERNEL);
516 if (!lpriv->dirty_bitmap)
521 timer_setup(&lpriv->timer, imsic_local_timer_callback, TIMER_PINNED);
525 lpriv->vectors = kcalloc(global->nr_ids + 1, sizeof(*lpriv->vectors),
527 if (!lpriv->vectors)
532 vec = &lpriv->vectors[i];
564 struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
566 raw_spin_lock_irqsave(&lpriv->lock, flags);
567 WARN_ON_ONCE(timer_delete_sync_try(&lpriv->timer) < 0);
568 raw_spin_unlock_irqrestore(&lpriv->lock, flags);