Lines Matching refs:pcc

74 puffs_cc_yield(struct puffs_cc *pcc)  in puffs_cc_yield()  argument
81 if ((~pcc->pcc_flags & (PCC_BORROWED|PCC_DONE)) == 0) { in puffs_cc_yield()
82 pcc->pcc_flags &= ~(PCC_BORROWED|PCC_DONE); in puffs_cc_yield()
86 puffs__cc_destroy(pcc, 1); in puffs_cc_yield()
87 setcontext(&pcc->pcc_uc_ret); in puffs_cc_yield()
89 pcc->pcc_flags &= ~PCC_BORROWED; in puffs_cc_yield()
93 if ((pcc->pcc_flags & PCC_MLCONT) == 0) { in puffs_cc_yield()
94 DPRINTF(("no mlcont, pcc %p\n", pcc)); in puffs_cc_yield()
95 swapcontext(&pcc->pcc_uc, &pcc->pcc_uc_ret); in puffs_cc_yield()
97 DPRINTF(("mlcont, pcc %p\n", pcc)); in puffs_cc_yield()
98 pcc->pcc_flags &= ~PCC_MLCONT; in puffs_cc_yield()
99 rv = puffs__cc_create(pcc->pcc_pu, puffs__theloop, &jumpcc); in puffs_cc_yield()
102 swapcontext(&pcc->pcc_uc, &jumpcc->pcc_uc); in puffs_cc_yield()
103 DPRINTF(("puffs_cc_yield: post swap pcc %p\n", pcc)); in puffs_cc_yield()
113 puffs__cc_cont(struct puffs_cc *pcc) in puffs__cc_cont() argument
117 mycc = puffs_cc_getcc(pcc->pcc_pu); in puffs__cc_cont()
118 DPRINTF(("puffs__cc_cont: pcc %p, mycc %p\n", pcc, mycc)); in puffs__cc_cont()
125 pcc->pcc_flags |= PCC_MLCONT; in puffs__cc_cont()
126 setcontext(&pcc->pcc_uc); in puffs__cc_cont()
130 puffs_cc_continue(struct puffs_cc *pcc) in puffs_cc_continue() argument
134 DPRINTF(("puffs_cc_continue: pcc %p\n", pcc)); in puffs_cc_continue()
136 pcc->pcc_func(pcc->pcc_farg); in puffs_cc_continue()
138 swapcontext(&pcc->pcc_uc_ret, &pcc->pcc_uc); in puffs_cc_continue()
159 puffs_cc_schedule(struct puffs_cc *pcc) in puffs_cc_schedule() argument
161 struct puffs_usermount *pu = pcc->pcc_pu; in puffs_cc_schedule()
164 TAILQ_INSERT_TAIL(&pu->pu_sched, pcc, pcc_schedent); in puffs_cc_schedule()
168 puffs_cc_getcaller(struct puffs_cc *pcc, pid_t *pid, lwpid_t *lid) in puffs_cc_getcaller() argument
171 if ((pcc->pcc_flags & PCC_HASCALLER) == 0) { in puffs_cc_getcaller()
177 *pid = pcc->pcc_pid; in puffs_cc_getcaller()
179 *lid = pcc->pcc_lid; in puffs_cc_getcaller()
188 struct puffs_cc *volatile pcc; in slowccalloc() local
201 pcc = sp; in slowccalloc()
202 memset(pcc, 0, sizeof(struct puffs_cc)); in slowccalloc()
211 if (getcontext(&pcc->pcc_uc) == -1) { in slowccalloc()
212 munmap(pcc, stacksize); in slowccalloc()
215 if (getcontext(&pcc->pcc_uc_ret) == -1) { in slowccalloc()
216 munmap(pcc, stacksize); in slowccalloc()
220 return pcc; in slowccalloc()
227 struct puffs_cc *pcc; in puffs__cc_create() local
233 pcc = slowccalloc(pu); in puffs__cc_create()
234 if (pcc == NULL) in puffs__cc_create()
236 pcc->pcc_pu = pu; in puffs__cc_create()
237 DPRINTF(("puffs__cc_create: allocated pcc %p\n", pcc)); in puffs__cc_create()
239 pcc = LIST_FIRST(&pu->pu_ccmagazin); in puffs__cc_create()
240 assert(pcc != NULL); in puffs__cc_create()
242 LIST_REMOVE(pcc, pcc_rope); in puffs__cc_create()
244 DPRINTF(("puffs__cc_create: magazin pcc %p\n", pcc)); in puffs__cc_create()
246 assert(pcc->pcc_pu == pu); in puffs__cc_create()
249 pcc->pcc_func = func; in puffs__cc_create()
250 pcc->pcc_farg = pcc; in puffs__cc_create()
255 pcc->pcc_uc.uc_link = &pcc->pcc_uc_ret; in puffs__cc_create()
262 st = &pcc->pcc_uc.uc_stack; in puffs__cc_create()
263 st->ss_sp = ((uint8_t *)(void *)pcc) + psize; in puffs__cc_create()
276 makecontext(&pcc->pcc_uc, (void *)func, 1, (uintptr_t)pcc); in puffs__cc_create()
279 *pccp = pcc; in puffs__cc_create()
284 puffs__cc_setcaller(struct puffs_cc *pcc, pid_t pid, lwpid_t lid) in puffs__cc_setcaller() argument
287 pcc->pcc_pid = pid; in puffs__cc_setcaller()
288 pcc->pcc_lid = lid; in puffs__cc_setcaller()
289 pcc->pcc_flags |= PCC_HASCALLER; in puffs__cc_setcaller()
293 cc_free(struct puffs_cc *pcc) in cc_free() argument
295 struct puffs_usermount *pu = pcc->pcc_pu; in cc_free()
298 DPRINTF(("invalidating pcc %p\n", pcc)); in cc_free()
300 munmap(pcc, stacksize); in cc_free()
304 puffs__cc_destroy(struct puffs_cc *pcc, int nonuke) in puffs__cc_destroy() argument
306 struct puffs_usermount *pu = pcc->pcc_pu; in puffs__cc_destroy()
308 pcc->pcc_flags &= ~PCC_HASCALLER; in puffs__cc_destroy()
309 assert(pcc->pcc_flags == 0); in puffs__cc_destroy()
314 pcc->pcc_pb = NULL; in puffs__cc_destroy()
315 DPRINTF(("puffs__cc_destroy: storing pcc %p\n", pcc)); in puffs__cc_destroy()
316 LIST_INSERT_HEAD(&pu->pu_ccmagazin, pcc, pcc_rope); in puffs__cc_destroy()
319 cc_free(pcc); in puffs__cc_destroy()
326 struct puffs_cc *pcc; in puffs__cc_exit() local
328 while ((pcc = LIST_FIRST(&pu->pu_ccmagazin)) != NULL) { in puffs__cc_exit()
329 LIST_REMOVE(pcc, pcc_rope); in puffs__cc_exit()
330 cc_free(pcc); in puffs__cc_exit()