Lines Matching defs:map

89 				       struct sock_mapping *map);
93 struct sock_mapping *map = (struct sock_mapping *)opaque;
98 struct pvcalls_data_intf *intf = map->ring;
99 struct pvcalls_data *data = &map->data;
103 array_size = XEN_FLEX_RING_SIZE(map->ring_order);
116 spin_lock_irqsave(&map->sock->sk->sk_receive_queue.lock, flags);
117 if (skb_queue_empty(&map->sock->sk->sk_receive_queue)) {
118 atomic_set(&map->read, 0);
119 spin_unlock_irqrestore(&map->sock->sk->sk_receive_queue.lock,
123 spin_unlock_irqrestore(&map->sock->sk->sk_receive_queue.lock, flags);
141 atomic_set(&map->read, 0);
142 ret = inet_recvmsg(map->sock, &msg, wanted, MSG_DONTWAIT);
148 spin_lock_irqsave(&map->sock->sk->sk_receive_queue.lock, flags);
149 if (ret > 0 && !skb_queue_empty(&map->sock->sk->sk_receive_queue))
150 atomic_inc(&map->read);
151 spin_unlock_irqrestore(&map->sock->sk->sk_receive_queue.lock, flags);
156 atomic_set(&map->read, 0);
162 notify_remote_via_irq(map->irq);
167 static bool pvcalls_conn_back_write(struct sock_mapping *map)
169 struct pvcalls_data_intf *intf = map->ring;
170 struct pvcalls_data *data = &map->data;
181 array_size = XEN_FLEX_RING_SIZE(map->ring_order);
200 atomic_set(&map->write, 0);
201 ret = inet_sendmsg(map->sock, &msg, size);
203 atomic_inc(&map->write);
204 atomic_inc(&map->io);
220 atomic_inc(&map->write);
221 atomic_inc(&map->io);
223 notify_remote_via_irq(map->irq);
232 struct sock_mapping *map = container_of(ioworker, struct sock_mapping,
236 while (atomic_read(&map->io) > 0) {
237 if (atomic_read(&map->release) > 0) {
238 atomic_set(&map->release, 0);
242 if (atomic_read(&map->read) > 0 &&
243 pvcalls_conn_back_read(map))
245 if (atomic_read(&map->write) > 0 &&
246 pvcalls_conn_back_write(map))
249 if (atomic_read(&map->eoi) > 0 && !atomic_read(&map->write)) {
250 atomic_set(&map->eoi, 0);
251 xen_irq_lateeoi(map->irq, eoi_flags);
255 atomic_dec(&map->io);
289 struct sock_mapping *map = sock->sk_user_data;
291 if (map == NULL)
294 atomic_inc(&map->read);
295 notify_remote_via_irq(map->irq);
300 struct sock_mapping *map = sock->sk_user_data;
303 if (map == NULL)
306 iow = &map->ioworker;
307 atomic_inc(&map->read);
308 atomic_inc(&map->io);
320 struct sock_mapping *map;
323 map = kzalloc(sizeof(*map), GFP_KERNEL);
324 if (map == NULL) {
329 map->fedata = fedata;
330 map->sock = sock;
331 map->id = id;
332 map->ref = ref;
337 map->ring = page;
338 map->ring_order = map->ring->ring_order;
339 /* first read the order, then map the data ring */
341 if (map->ring_order > MAX_RING_ORDER) {
343 __func__, map->ring_order, MAX_RING_ORDER);
346 ret = xenbus_map_ring_valloc(fedata->dev, map->ring->ref,
347 (1 << map->ring_order), &page);
350 map->bytes = page;
354 pvcalls_back_conn_event, 0, "pvcalls-backend", map);
357 map->irq = ret;
359 map->data.in = map->bytes;
360 map->data.out = map->bytes + XEN_FLEX_RING_SIZE(map->ring_order);
362 map->ioworker.wq = alloc_workqueue("pvcalls_io", WQ_UNBOUND, 1);
363 if (!map->ioworker.wq)
365 atomic_set(&map->io, 1);
366 INIT_WORK(&map->ioworker.register_work, pvcalls_back_ioworker);
369 list_add_tail(&map->list, &fedata->socket_mappings);
372 write_lock_bh(&map->sock->sk->sk_callback_lock);
373 map->saved_data_ready = map->sock->sk->sk_data_ready;
374 map->sock->sk->sk_user_data = map;
375 map->sock->sk->sk_data_ready = pvcalls_sk_data_ready;
376 map->sock->sk->sk_state_change = pvcalls_sk_state_change;
377 write_unlock_bh(&map->sock->sk->sk_callback_lock);
379 return map;
382 list_del(&map->list);
383 pvcalls_back_release_active(fedata->dev, fedata, map);
394 struct sock_mapping *map;
414 map = pvcalls_new_active_socket(fedata,
419 if (!map)
434 struct sock_mapping *map)
436 disable_irq(map->irq);
437 if (map->sock->sk != NULL) {
438 write_lock_bh(&map->sock->sk->sk_callback_lock);
439 map->sock->sk->sk_user_data = NULL;
440 map->sock->sk->sk_data_ready = map->saved_data_ready;
441 write_unlock_bh(&map->sock->sk->sk_callback_lock);
444 atomic_set(&map->release, 1);
445 flush_work(&map->ioworker.register_work);
447 xenbus_unmap_ring_vfree(dev, map->bytes);
448 xenbus_unmap_ring_vfree(dev, (void *)map->ring);
449 unbind_from_irqhandler(map->irq, map);
451 sock_release(map->sock);
452 kfree(map);
479 struct sock_mapping *map, *n;
487 list_for_each_entry_safe(map, n, &fedata->socket_mappings, list) {
488 if (map->id == req->u.release.id) {
489 list_del(&map->list);
491 ret = pvcalls_back_release_active(dev, fedata, map);
517 struct sock_mapping *map;
554 map = pvcalls_new_active_socket(fedata,
559 if (!map) {
564 map->sockpass = mappass;
565 iow = &map->ioworker;
566 atomic_inc(&map->read);
567 atomic_inc(&map->io);
621 struct sockpass_mapping *map;
626 map = kzalloc(sizeof(*map), GFP_KERNEL);
627 if (map == NULL) {
632 INIT_WORK(&map->register_work, __pvcalls_back_accept);
633 spin_lock_init(&map->copy_lock);
634 map->wq = alloc_workqueue("pvcalls_wq", WQ_UNBOUND, 1);
635 if (!map->wq) {
640 ret = sock_create(AF_INET, SOCK_STREAM, 0, &map->sock);
644 ret = inet_bind(map->sock, (struct sockaddr *)&req->u.bind.addr,
649 map->fedata = fedata;
650 map->id = req->u.bind.id;
653 ret = radix_tree_insert(&fedata->socketpass_mappings, map->id,
654 map);
659 write_lock_bh(&map->sock->sk->sk_callback_lock);
660 map->saved_data_ready = map->sock->sk->sk_data_ready;
661 map->sock->sk->sk_user_data = map;
662 map->sock->sk->sk_data_ready = pvcalls_pass_sk_data_ready;
663 write_unlock_bh(&map->sock->sk->sk_callback_lock);
667 if (map && map->sock)
668 sock_release(map->sock);
669 if (map && map->wq)
670 destroy_workqueue(map->wq);
671 kfree(map);
686 struct sockpass_mapping *map;
692 map = radix_tree_lookup(&fedata->socketpass_mappings, req->u.listen.id);
694 if (map == NULL)
697 ret = inet_listen(map->sock, req->u.listen.backlog);
902 struct sock_mapping *map = sock_map;
905 if (map == NULL || map->sock == NULL || map->sock->sk == NULL ||
906 map->sock->sk->sk_user_data != map) {
911 iow = &map->ioworker;
913 atomic_inc(&map->write);
914 atomic_inc(&map->eoi);
915 atomic_inc(&map->io);
991 struct sock_mapping *map, *n;
1000 list_for_each_entry_safe(map, n, &fedata->socket_mappings, list) {
1001 list_del(&map->list);
1002 pvcalls_back_release_active(dev, fedata, map);