hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/drivers/xen/pvcalls-back.c
....@@ -1,15 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * (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.
134 */
145
156 #include <linux/inet.h>
....@@ -33,7 +24,7 @@
3324 #define PVCALLS_VERSIONS "1"
3425 #define MAX_RING_ORDER XENBUS_MAX_RING_GRANT_ORDER
3526
36
-struct pvcalls_back_global {
27
+static struct pvcalls_back_global {
3728 struct list_head frontends;
3829 struct semaphore frontends_lock;
3930 } pvcalls_back_global;
....@@ -138,13 +129,13 @@
138129 if (masked_prod < masked_cons) {
139130 vec[0].iov_base = data->in + masked_prod;
140131 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);
142133 } else {
143134 vec[0].iov_base = data->in + masked_prod;
144135 vec[0].iov_len = array_size - masked_prod;
145136 vec[1].iov_base = data->in;
146137 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);
148139 }
149140
150141 atomic_set(&map->read, 0);
....@@ -197,13 +188,13 @@
197188 if (pvcalls_mask(prod, array_size) > pvcalls_mask(cons, array_size)) {
198189 vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
199190 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);
201192 } else {
202193 vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
203194 vec[0].iov_len = array_size - pvcalls_mask(cons, array_size);
204195 vec[1].iov_base = data->out;
205196 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);
207198 }
208199
209200 atomic_set(&map->write, 0);
....@@ -322,7 +313,7 @@
322313 struct pvcalls_fedata *fedata,
323314 uint64_t id,
324315 grant_ref_t ref,
325
- uint32_t evtchn,
316
+ evtchn_port_t evtchn,
326317 struct socket *sock)
327318 {
328319 int ret;
....@@ -330,8 +321,10 @@
330321 void *page;
331322
332323 map = kzalloc(sizeof(*map), GFP_KERNEL);
333
- if (map == NULL)
324
+ if (map == NULL) {
325
+ sock_release(sock);
334326 return NULL;
327
+ }
335328
336329 map->fedata = fedata;
337330 map->sock = sock;
....@@ -423,10 +416,8 @@
423416 req->u.connect.ref,
424417 req->u.connect.evtchn,
425418 sock);
426
- if (!map) {
419
+ if (!map)
427420 ret = -EFAULT;
428
- sock_release(sock);
429
- }
430421
431422 out:
432423 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++);
....@@ -567,7 +558,6 @@
567558 sock);
568559 if (!map) {
569560 ret = -EFAULT;
570
- sock_release(sock);
571561 goto out_error;
572562 }
573563
....@@ -930,7 +920,8 @@
930920
931921 static int backend_connect(struct xenbus_device *dev)
932922 {
933
- int err, evtchn;
923
+ int err;
924
+ evtchn_port_t evtchn;
934925 grant_ref_t ring_ref;
935926 struct pvcalls_fedata *fedata = NULL;
936927