Lines Matching defs:xlwp
157 struct xenbus_dev_lwp *xlwp;
169 SLIST_FOREACH(xlwp, &u->lwps, lwp_next) {
170 if (xlwp->lwp == curlwp) {
174 if (xlwp == NULL) {
178 mutex_enter(&xlwp->mtx);
181 if (xlwp->read_prod == xlwp->read_cons) {
187 if (xlwp->read_cons > xlwp->read_prod) {
189 &xlwp->read_buffer[MASK_READ_IDX(xlwp->read_cons)],
190 0U - xlwp->read_cons, uio);
193 xlwp->read_cons += (uio->uio_offset - offset);
196 err = uiomove(&xlwp->read_buffer[MASK_READ_IDX(xlwp->read_cons)],
197 xlwp->read_prod - xlwp->read_cons, uio);
199 xlwp->read_cons += (uio->uio_offset - offset);
202 mutex_exit(&xlwp->mtx);
207 queue_reply(struct xenbus_dev_lwp *xlwp,
211 KASSERT(mutex_owned(&xlwp->mtx));
212 for (i = 0; i < len; i++, xlwp->read_prod++)
213 xlwp->read_buffer[MASK_READ_IDX(xlwp->read_prod)] = data[i];
215 KASSERT((xlwp->read_prod - xlwp->read_cons) <= sizeof(xlwp->read_buffer));
231 struct xenbus_dev_lwp *xlwp;
245 SLIST_FOREACH(xlwp, &u->lwps, lwp_next) {
246 if (xlwp->lwp == curlwp) {
250 if (xlwp == NULL) {
254 mutex_enter(&xlwp->mtx);
263 if ((size + xlwp->len) > sizeof(xlwp->u.buffer)) {
268 err = uiomove(xlwp->u.buffer + xlwp->len,
269 sizeof(xlwp->u.buffer) - xlwp->len, uio);
273 xlwp->len += size;
274 if (xlwp->len < (sizeof(xlwp->u.msg) + xlwp->u.msg.len))
277 switch (xlwp->u.msg.type) {
289 err = xenbus_dev_request_and_reply(&xlwp->u.msg, &reply);
291 if (xlwp->u.msg.type == XS_TRANSACTION_START) {
295 SLIST_INSERT_HEAD(&xlwp->transactions,
297 } else if (xlwp->u.msg.type == XS_TRANSACTION_END) {
298 SLIST_FOREACH(trans, &xlwp->transactions,
301 (unsigned long)xlwp->u.msg.tx_id)
308 SLIST_REMOVE(&xlwp->transactions, trans,
312 queue_reply(xlwp, (char *)&xlwp->u.msg,
313 sizeof(xlwp->u.msg));
314 queue_reply(xlwp, (char *)reply, xlwp->u.msg.len);
316 xenbus_dev_reply_free(&xlwp->u.msg, reply);
326 xlwp->len = 0;
329 mutex_exit(&xlwp->mtx);
343 struct xenbus_dev_lwp *xlwp;
372 SLIST_FOREACH(xlwp, &u->lwps, lwp_next) {
373 if (xlwp->lwp == curlwp) {
377 if (xlwp == NULL) {
380 xlwp = kmem_zalloc(sizeof(*xlwp), KM_SLEEP);
381 xlwp->lwp = curlwp;
382 SLIST_INIT(&xlwp->transactions);
383 mutex_init(&xlwp->mtx, MUTEX_DEFAULT, IPL_NONE);
391 SLIST_INSERT_HEAD(&u->lwps, xlwp, lwp_next);
409 struct xenbus_dev_lwp *xlwp;
416 SLIST_FOREACH(xlwp, &u->lwps, lwp_next) {
417 if (xlwp->lwp == curlwp) {
421 if (xlwp == NULL) {
426 mutex_enter(&xlwp->mtx);
427 while (!SLIST_EMPTY(&xlwp->transactions)) {
428 trans = SLIST_FIRST(&xlwp->transactions);
430 SLIST_REMOVE_HEAD(&xlwp->transactions, trans_next);
433 mutex_exit(&xlwp->mtx);
434 SLIST_REMOVE(&u->lwps, xlwp, xenbus_dev_lwp, lwp_next);
435 mutex_destroy(&xlwp->mtx);
446 kmem_free(xlwp, sizeof(*xlwp));