예제 #1
0
/* Must be called nklock locked, irq off. */
static void pse51_shm_destroy(pse51_shm_t * shm, int force)
{
	spl_t ignored;

	removeq(&pse51_shmq, &shm->link);
	xnlock_clear_irqon(&nklock);

	down(&shm->maplock);

	if (shm->addr) {
		xnheap_free(&shm->heapbase, shm->addr);

		xnheap_destroy_mapped(&shm->heapbase, NULL, NULL);

		shm->addr = NULL;
		shm->size = 0;
	}

	if (force) {
		xnholder_t *holder;

		while ((holder = getq(&shm->mappings))) {
			up(&shm->maplock);
			xnfree(link2map(holder));
			down(&shm->maplock);
		}
	}

	up(&shm->maplock);
	xnlock_get_irqsave(&nklock, ignored);
}
예제 #2
0
파일: sched.c 프로젝트: ChunHungLiu/xenomai
static inline void switch_context(struct xnsched *sched,
				  struct xnthread *prev, struct xnthread *next)
{
#ifdef CONFIG_XENO_ARCH_UNLOCKED_SWITCH
	sched->last = prev;
	sched->status |= XNINSW;
	xnlock_clear_irqon(&nklock);
#endif /* !CONFIG_XENO_ARCH_UNLOCKED_SWITCH */

	xnarch_switch_to(prev, next);
}