Lines Matching refs:p

25   struct pipe *p;  in pipealloc()  local
27 p = 0; in pipealloc()
31 if((p = (struct pipe*)kalloc()) == 0) in pipealloc()
33 p->readopen = 1; in pipealloc()
34 p->writeopen = 1; in pipealloc()
35 p->nwrite = 0; in pipealloc()
36 p->nread = 0; in pipealloc()
37 initlock(&p->lock, "pipe"); in pipealloc()
41 (*f0)->pipe = p; in pipealloc()
45 (*f1)->pipe = p; in pipealloc()
50 if(p) in pipealloc()
51 kfree((char*)p); in pipealloc()
60 pipeclose(struct pipe *p, int writable) in pipeclose() argument
62 acquire(&p->lock); in pipeclose()
64 p->writeopen = 0; in pipeclose()
65 wakeup(&p->nread); in pipeclose()
67 p->readopen = 0; in pipeclose()
68 wakeup(&p->nwrite); in pipeclose()
70 if(p->readopen == 0 && p->writeopen == 0){ in pipeclose()
71 release(&p->lock); in pipeclose()
72 kfree((char*)p); in pipeclose()
74 release(&p->lock); in pipeclose()
79 pipewrite(struct pipe *p, char *addr, int n) in pipewrite() argument
83 acquire(&p->lock); in pipewrite()
85 while(p->nwrite == p->nread + PIPESIZE){ //DOC: pipewrite-full in pipewrite()
86 if(p->readopen == 0 || myproc()->killed){ in pipewrite()
87 release(&p->lock); in pipewrite()
90 wakeup(&p->nread); in pipewrite()
91 sleep(&p->nwrite, &p->lock); //DOC: pipewrite-sleep in pipewrite()
93 p->data[p->nwrite++ % PIPESIZE] = addr[i]; in pipewrite()
95 wakeup(&p->nread); //DOC: pipewrite-wakeup1 in pipewrite()
96 release(&p->lock); in pipewrite()
101 piperead(struct pipe *p, char *addr, int n) in piperead() argument
105 acquire(&p->lock); in piperead()
106 while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty in piperead()
108 release(&p->lock); in piperead()
111 sleep(&p->nread, &p->lock); //DOC: piperead-sleep in piperead()
114 if(p->nread == p->nwrite) in piperead()
116 addr[i] = p->data[p->nread++ % PIPESIZE]; in piperead()
118 wakeup(&p->nwrite); //DOC: piperead-wakeup in piperead()
119 release(&p->lock); in piperead()