.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * (c) 2017 Stefano Stabellini <stefano@aporeto.com> |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License as published by |
---|
6 | | - * the Free Software Foundation; either version 2 of the License, or |
---|
7 | | - * (at your option) any later version. |
---|
8 | | - * |
---|
9 | | - * This program is distributed in the hope that it will be useful, |
---|
10 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
11 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
12 | | - * GNU General Public License for more details. |
---|
13 | 4 | */ |
---|
14 | 5 | |
---|
15 | 6 | #include <linux/inet.h> |
---|
.. | .. |
---|
33 | 24 | #define PVCALLS_VERSIONS "1" |
---|
34 | 25 | #define MAX_RING_ORDER XENBUS_MAX_RING_GRANT_ORDER |
---|
35 | 26 | |
---|
36 | | -struct pvcalls_back_global { |
---|
| 27 | +static struct pvcalls_back_global { |
---|
37 | 28 | struct list_head frontends; |
---|
38 | 29 | struct semaphore frontends_lock; |
---|
39 | 30 | } pvcalls_back_global; |
---|
.. | .. |
---|
138 | 129 | if (masked_prod < masked_cons) { |
---|
139 | 130 | vec[0].iov_base = data->in + masked_prod; |
---|
140 | 131 | vec[0].iov_len = wanted; |
---|
141 | | - iov_iter_kvec(&msg.msg_iter, ITER_KVEC|WRITE, vec, 1, wanted); |
---|
| 132 | + iov_iter_kvec(&msg.msg_iter, READ, vec, 1, wanted); |
---|
142 | 133 | } else { |
---|
143 | 134 | vec[0].iov_base = data->in + masked_prod; |
---|
144 | 135 | vec[0].iov_len = array_size - masked_prod; |
---|
145 | 136 | vec[1].iov_base = data->in; |
---|
146 | 137 | vec[1].iov_len = wanted - vec[0].iov_len; |
---|
147 | | - iov_iter_kvec(&msg.msg_iter, ITER_KVEC|WRITE, vec, 2, wanted); |
---|
| 138 | + iov_iter_kvec(&msg.msg_iter, READ, vec, 2, wanted); |
---|
148 | 139 | } |
---|
149 | 140 | |
---|
150 | 141 | atomic_set(&map->read, 0); |
---|
.. | .. |
---|
197 | 188 | if (pvcalls_mask(prod, array_size) > pvcalls_mask(cons, array_size)) { |
---|
198 | 189 | vec[0].iov_base = data->out + pvcalls_mask(cons, array_size); |
---|
199 | 190 | vec[0].iov_len = size; |
---|
200 | | - iov_iter_kvec(&msg.msg_iter, ITER_KVEC|READ, vec, 1, size); |
---|
| 191 | + iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, size); |
---|
201 | 192 | } else { |
---|
202 | 193 | vec[0].iov_base = data->out + pvcalls_mask(cons, array_size); |
---|
203 | 194 | vec[0].iov_len = array_size - pvcalls_mask(cons, array_size); |
---|
204 | 195 | vec[1].iov_base = data->out; |
---|
205 | 196 | vec[1].iov_len = size - vec[0].iov_len; |
---|
206 | | - iov_iter_kvec(&msg.msg_iter, ITER_KVEC|READ, vec, 2, size); |
---|
| 197 | + iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, size); |
---|
207 | 198 | } |
---|
208 | 199 | |
---|
209 | 200 | atomic_set(&map->write, 0); |
---|
.. | .. |
---|
322 | 313 | struct pvcalls_fedata *fedata, |
---|
323 | 314 | uint64_t id, |
---|
324 | 315 | grant_ref_t ref, |
---|
325 | | - uint32_t evtchn, |
---|
| 316 | + evtchn_port_t evtchn, |
---|
326 | 317 | struct socket *sock) |
---|
327 | 318 | { |
---|
328 | 319 | int ret; |
---|
.. | .. |
---|
330 | 321 | void *page; |
---|
331 | 322 | |
---|
332 | 323 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
---|
333 | | - if (map == NULL) |
---|
| 324 | + if (map == NULL) { |
---|
| 325 | + sock_release(sock); |
---|
334 | 326 | return NULL; |
---|
| 327 | + } |
---|
335 | 328 | |
---|
336 | 329 | map->fedata = fedata; |
---|
337 | 330 | map->sock = sock; |
---|
.. | .. |
---|
423 | 416 | req->u.connect.ref, |
---|
424 | 417 | req->u.connect.evtchn, |
---|
425 | 418 | sock); |
---|
426 | | - if (!map) { |
---|
| 419 | + if (!map) |
---|
427 | 420 | ret = -EFAULT; |
---|
428 | | - sock_release(sock); |
---|
429 | | - } |
---|
430 | 421 | |
---|
431 | 422 | out: |
---|
432 | 423 | rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); |
---|
.. | .. |
---|
567 | 558 | sock); |
---|
568 | 559 | if (!map) { |
---|
569 | 560 | ret = -EFAULT; |
---|
570 | | - sock_release(sock); |
---|
571 | 561 | goto out_error; |
---|
572 | 562 | } |
---|
573 | 563 | |
---|
.. | .. |
---|
930 | 920 | |
---|
931 | 921 | static int backend_connect(struct xenbus_device *dev) |
---|
932 | 922 | { |
---|
933 | | - int err, evtchn; |
---|
| 923 | + int err; |
---|
| 924 | + evtchn_port_t evtchn; |
---|
934 | 925 | grant_ref_t ring_ref; |
---|
935 | 926 | struct pvcalls_fedata *fedata = NULL; |
---|
936 | 927 | |
---|