1 /******************************************************************************
2 * Client-facing interface for the Xenbus driver. In other words, the
3 * interface between the Xenbus and the device-specific code, be it the
4 * frontend or the backend of that driver.
5 *
6 * Copyright (C) 2005 XenSource Ltd
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation; or, when distributed
11 * separately from the Linux kernel or incorporated into other
12 * software packages, subject to the following license:
13 *
14 * Permission is hereby granted, free of charge, to any person obtaining a copy
15 * of this source file (the "Software"), to deal in the Software without
16 * restriction, including without limitation the rights to use, copy, modify,
17 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
18 * and to permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be included in
22 * all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30 * IN THE SOFTWARE.
31 */
32
33 #include <linux/mm.h>
34 #include <linux/slab.h>
35 #include <linux/types.h>
36 #include <linux/spinlock.h>
37 #include <linux/vmalloc.h>
38 #include <linux/export.h>
39 #include <asm/xen/hypervisor.h>
40 #include <xen/page.h>
41 #include <xen/interface/xen.h>
42 #include <xen/interface/event_channel.h>
43 #include <xen/balloon.h>
44 #include <xen/events.h>
45 #include <xen/grant_table.h>
46 #include <xen/xenbus.h>
47 #include <xen/xen.h>
48 #include <xen/features.h>
49
50 #include "xenbus.h"
51
52 #define XENBUS_PAGES(_grants) (DIV_ROUND_UP(_grants, XEN_PFN_PER_PAGE))
53
54 #define XENBUS_MAX_RING_PAGES (XENBUS_PAGES(XENBUS_MAX_RING_GRANTS))
55
56 struct xenbus_map_node {
57 struct list_head next;
58 union {
59 struct {
60 struct vm_struct *area;
61 } pv;
62 struct {
63 struct page *pages[XENBUS_MAX_RING_PAGES];
64 unsigned long addrs[XENBUS_MAX_RING_GRANTS];
65 void *addr;
66 } hvm;
67 };
68 grant_handle_t handles[XENBUS_MAX_RING_GRANTS];
69 unsigned int nr_handles;
70 };
71
72 struct map_ring_valloc {
73 struct xenbus_map_node *node;
74
75 /* Why do we need two arrays? See comment of __xenbus_map_ring */
76 unsigned long addrs[XENBUS_MAX_RING_GRANTS];
77 phys_addr_t phys_addrs[XENBUS_MAX_RING_GRANTS];
78
79 struct gnttab_map_grant_ref map[XENBUS_MAX_RING_GRANTS];
80 struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
81
82 unsigned int idx;
83 };
84
85 static DEFINE_SPINLOCK(xenbus_valloc_lock);
86 static LIST_HEAD(xenbus_valloc_pages);
87
88 struct xenbus_ring_ops {
89 int (*map)(struct xenbus_device *dev, struct map_ring_valloc *info,
90 grant_ref_t *gnt_refs, unsigned int nr_grefs,
91 void **vaddr);
92 int (*unmap)(struct xenbus_device *dev, void *vaddr);
93 };
94
95 static const struct xenbus_ring_ops *ring_ops __read_mostly;
96
xenbus_strstate(enum xenbus_state state)97 const char *xenbus_strstate(enum xenbus_state state)
98 {
99 static const char *const name[] = {
100 [ XenbusStateUnknown ] = "Unknown",
101 [ XenbusStateInitialising ] = "Initialising",
102 [ XenbusStateInitWait ] = "InitWait",
103 [ XenbusStateInitialised ] = "Initialised",
104 [ XenbusStateConnected ] = "Connected",
105 [ XenbusStateClosing ] = "Closing",
106 [ XenbusStateClosed ] = "Closed",
107 [XenbusStateReconfiguring] = "Reconfiguring",
108 [XenbusStateReconfigured] = "Reconfigured",
109 };
110 return (state < ARRAY_SIZE(name)) ? name[state] : "INVALID";
111 }
112 EXPORT_SYMBOL_GPL(xenbus_strstate);
113
114 /**
115 * xenbus_watch_path - register a watch
116 * @dev: xenbus device
117 * @path: path to watch
118 * @watch: watch to register
119 * @will_handle: events queuing determine callback
120 * @callback: callback to register
121 *
122 * Register a @watch on the given path, using the given xenbus_watch structure
123 * for storage, @will_handle function as the callback to determine if each
124 * event need to be queued, and the given @callback function as the callback.
125 * On success, the given @path will be saved as @watch->node, and remains the
126 * caller's to free. On error, @watch->node will be NULL, the device will
127 * switch to %XenbusStateClosing, and the error will be saved in the store.
128 *
129 * Returns: %0 on success or -errno on error
130 */
xenbus_watch_path(struct xenbus_device * dev,const char * path,struct xenbus_watch * watch,bool (* will_handle)(struct xenbus_watch *,const char *,const char *),void (* callback)(struct xenbus_watch *,const char *,const char *))131 int xenbus_watch_path(struct xenbus_device *dev, const char *path,
132 struct xenbus_watch *watch,
133 bool (*will_handle)(struct xenbus_watch *,
134 const char *, const char *),
135 void (*callback)(struct xenbus_watch *,
136 const char *, const char *))
137 {
138 int err;
139
140 watch->node = path;
141 watch->will_handle = will_handle;
142 watch->callback = callback;
143
144 err = register_xenbus_watch(watch);
145
146 if (err) {
147 watch->node = NULL;
148 watch->will_handle = NULL;
149 watch->callback = NULL;
150 xenbus_dev_fatal(dev, err, "adding watch on %s", path);
151 }
152
153 return err;
154 }
155 EXPORT_SYMBOL_GPL(xenbus_watch_path);
156
157
158 /**
159 * xenbus_watch_pathfmt - register a watch on a sprintf-formatted path
160 * @dev: xenbus device
161 * @watch: watch to register
162 * @will_handle: events queuing determine callback
163 * @callback: callback to register
164 * @pathfmt: format of path to watch
165 *
166 * Register a watch on the given @path, using the given xenbus_watch
167 * structure for storage, @will_handle function as the callback to determine if
168 * each event need to be queued, and the given @callback function as the
169 * callback. On success, the watched path (@path/@path2) will be saved
170 * as @watch->node, and becomes the caller's to kfree().
171 * On error, watch->node will be NULL, so the caller has nothing to
172 * free, the device will switch to %XenbusStateClosing, and the error will be
173 * saved in the store.
174 *
175 * Returns: %0 on success or -errno on error
176 */
xenbus_watch_pathfmt(struct xenbus_device * dev,struct xenbus_watch * watch,bool (* will_handle)(struct xenbus_watch *,const char *,const char *),void (* callback)(struct xenbus_watch *,const char *,const char *),const char * pathfmt,...)177 int xenbus_watch_pathfmt(struct xenbus_device *dev,
178 struct xenbus_watch *watch,
179 bool (*will_handle)(struct xenbus_watch *,
180 const char *, const char *),
181 void (*callback)(struct xenbus_watch *,
182 const char *, const char *),
183 const char *pathfmt, ...)
184 {
185 int err;
186 va_list ap;
187 char *path;
188
189 va_start(ap, pathfmt);
190 path = kvasprintf(GFP_NOIO | __GFP_HIGH, pathfmt, ap);
191 va_end(ap);
192
193 if (!path) {
194 xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch");
195 return -ENOMEM;
196 }
197 err = xenbus_watch_path(dev, path, watch, will_handle, callback);
198
199 if (err)
200 kfree(path);
201 return err;
202 }
203 EXPORT_SYMBOL_GPL(xenbus_watch_pathfmt);
204
205 __printf(4, 5)
206 static void xenbus_switch_fatal(struct xenbus_device *, int, int,
207 const char *, ...);
208
209 static int
__xenbus_switch_state(struct xenbus_device * dev,enum xenbus_state state,int depth)210 __xenbus_switch_state(struct xenbus_device *dev,
211 enum xenbus_state state, int depth)
212 {
213 /* We check whether the state is currently set to the given value, and
214 if not, then the state is set. We don't want to unconditionally
215 write the given state, because we don't want to fire watches
216 unnecessarily. Furthermore, if the node has gone, we don't write
217 to it, as the device will be tearing down, and we don't want to
218 resurrect that directory.
219
220 Note that, because of this cached value of our state, this
221 function will not take a caller's Xenstore transaction
222 (something it was trying to in the past) because dev->state
223 would not get reset if the transaction was aborted.
224 */
225
226 struct xenbus_transaction xbt;
227 int current_state;
228 int err, abort;
229
230 if (state == dev->state)
231 return 0;
232
233 again:
234 abort = 1;
235
236 err = xenbus_transaction_start(&xbt);
237 if (err) {
238 xenbus_switch_fatal(dev, depth, err, "starting transaction");
239 return 0;
240 }
241
242 err = xenbus_scanf(xbt, dev->nodename, "state", "%d", ¤t_state);
243 if (err != 1)
244 goto abort;
245
246 err = xenbus_printf(xbt, dev->nodename, "state", "%d", state);
247 if (err) {
248 xenbus_switch_fatal(dev, depth, err, "writing new state");
249 goto abort;
250 }
251
252 abort = 0;
253 abort:
254 err = xenbus_transaction_end(xbt, abort);
255 if (err) {
256 if (err == -EAGAIN && !abort)
257 goto again;
258 xenbus_switch_fatal(dev, depth, err, "ending transaction");
259 } else
260 dev->state = state;
261
262 return 0;
263 }
264
265 /**
266 * xenbus_switch_state - save the new state of a driver
267 * @dev: xenbus device
268 * @state: new state
269 *
270 * Advertise in the store a change of the given driver to the given new_state.
271 * On error, the device will switch to XenbusStateClosing, and the error
272 * will be saved in the store.
273 *
274 * Returns: %0 on success or -errno on error
275 */
xenbus_switch_state(struct xenbus_device * dev,enum xenbus_state state)276 int xenbus_switch_state(struct xenbus_device *dev, enum xenbus_state state)
277 {
278 return __xenbus_switch_state(dev, state, 0);
279 }
280
281 EXPORT_SYMBOL_GPL(xenbus_switch_state);
282
xenbus_frontend_closed(struct xenbus_device * dev)283 int xenbus_frontend_closed(struct xenbus_device *dev)
284 {
285 xenbus_switch_state(dev, XenbusStateClosed);
286 complete(&dev->down);
287 return 0;
288 }
289 EXPORT_SYMBOL_GPL(xenbus_frontend_closed);
290
291 __printf(3, 0)
xenbus_va_dev_error(struct xenbus_device * dev,int err,const char * fmt,va_list ap)292 static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
293 const char *fmt, va_list ap)
294 {
295 unsigned int len;
296 char *printf_buffer;
297 char *path_buffer;
298
299 #define PRINTF_BUFFER_SIZE 4096
300
301 printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL);
302 if (!printf_buffer)
303 return;
304
305 len = sprintf(printf_buffer, "%i ", -err);
306 vsnprintf(printf_buffer + len, PRINTF_BUFFER_SIZE - len, fmt, ap);
307
308 dev_err(&dev->dev, "%s\n", printf_buffer);
309
310 path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename);
311 if (path_buffer)
312 xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer);
313
314 kfree(printf_buffer);
315 kfree(path_buffer);
316 }
317
318 /**
319 * xenbus_dev_error - place an error message into the store
320 * @dev: xenbus device
321 * @err: error to report
322 * @fmt: error message format
323 *
324 * Report the given negative errno into the store, along with the given
325 * formatted message.
326 */
xenbus_dev_error(struct xenbus_device * dev,int err,const char * fmt,...)327 void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
328 {
329 va_list ap;
330
331 va_start(ap, fmt);
332 xenbus_va_dev_error(dev, err, fmt, ap);
333 va_end(ap);
334 }
335 EXPORT_SYMBOL_GPL(xenbus_dev_error);
336
337 /**
338 * xenbus_dev_fatal - put an error messages into the store and then shutdown
339 * @dev: xenbus device
340 * @err: error to report
341 * @fmt: error message format
342 *
343 * Equivalent to xenbus_dev_error(dev, err, fmt, args), followed by
344 * xenbus_switch_state(dev, XenbusStateClosing) to schedule an orderly
345 * closedown of this driver and its peer.
346 */
347
xenbus_dev_fatal(struct xenbus_device * dev,int err,const char * fmt,...)348 void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt, ...)
349 {
350 va_list ap;
351
352 va_start(ap, fmt);
353 xenbus_va_dev_error(dev, err, fmt, ap);
354 va_end(ap);
355
356 xenbus_switch_state(dev, XenbusStateClosing);
357 }
358 EXPORT_SYMBOL_GPL(xenbus_dev_fatal);
359
360 /*
361 * Equivalent to xenbus_dev_fatal(dev, err, fmt, args), but helps
362 * avoiding recursion within xenbus_switch_state.
363 */
xenbus_switch_fatal(struct xenbus_device * dev,int depth,int err,const char * fmt,...)364 static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
365 const char *fmt, ...)
366 {
367 va_list ap;
368
369 va_start(ap, fmt);
370 xenbus_va_dev_error(dev, err, fmt, ap);
371 va_end(ap);
372
373 if (!depth)
374 __xenbus_switch_state(dev, XenbusStateClosing, 1);
375 }
376
377 /*
378 * xenbus_setup_ring
379 * @dev: xenbus device
380 * @vaddr: pointer to starting virtual address of the ring
381 * @nr_pages: number of pages to be granted
382 * @grefs: grant reference array to be filled in
383 *
384 * Allocate physically contiguous pages for a shared ring buffer and grant it
385 * to the peer of the given device. The ring buffer is initially filled with
386 * zeroes. The virtual address of the ring is stored at @vaddr and the
387 * grant references are stored in the @grefs array. In case of error @vaddr
388 * will be set to NULL and @grefs will be filled with INVALID_GRANT_REF.
389 */
xenbus_setup_ring(struct xenbus_device * dev,gfp_t gfp,void ** vaddr,unsigned int nr_pages,grant_ref_t * grefs)390 int xenbus_setup_ring(struct xenbus_device *dev, gfp_t gfp, void **vaddr,
391 unsigned int nr_pages, grant_ref_t *grefs)
392 {
393 unsigned long ring_size = nr_pages * XEN_PAGE_SIZE;
394 grant_ref_t gref_head;
395 unsigned int i;
396 void *addr;
397 int ret;
398
399 addr = *vaddr = alloc_pages_exact(ring_size, gfp | __GFP_ZERO);
400 if (!*vaddr) {
401 ret = -ENOMEM;
402 goto err;
403 }
404
405 ret = gnttab_alloc_grant_references(nr_pages, &gref_head);
406 if (ret) {
407 xenbus_dev_fatal(dev, ret, "granting access to %u ring pages",
408 nr_pages);
409 goto err;
410 }
411
412 for (i = 0; i < nr_pages; i++) {
413 unsigned long gfn;
414
415 if (is_vmalloc_addr(*vaddr))
416 gfn = pfn_to_gfn(vmalloc_to_pfn(addr));
417 else
418 gfn = virt_to_gfn(addr);
419
420 grefs[i] = gnttab_claim_grant_reference(&gref_head);
421 gnttab_grant_foreign_access_ref(grefs[i], dev->otherend_id,
422 gfn, 0);
423
424 addr += XEN_PAGE_SIZE;
425 }
426
427 return 0;
428
429 err:
430 if (*vaddr)
431 free_pages_exact(*vaddr, ring_size);
432 for (i = 0; i < nr_pages; i++)
433 grefs[i] = INVALID_GRANT_REF;
434 *vaddr = NULL;
435
436 return ret;
437 }
438 EXPORT_SYMBOL_GPL(xenbus_setup_ring);
439
440 /*
441 * xenbus_teardown_ring
442 * @vaddr: starting virtual address of the ring
443 * @nr_pages: number of pages
444 * @grefs: grant reference array
445 *
446 * Remove grants for the shared ring buffer and free the associated memory.
447 * On return the grant reference array is filled with INVALID_GRANT_REF.
448 */
xenbus_teardown_ring(void ** vaddr,unsigned int nr_pages,grant_ref_t * grefs)449 void xenbus_teardown_ring(void **vaddr, unsigned int nr_pages,
450 grant_ref_t *grefs)
451 {
452 unsigned int i;
453
454 for (i = 0; i < nr_pages; i++) {
455 if (grefs[i] != INVALID_GRANT_REF) {
456 gnttab_end_foreign_access(grefs[i], NULL);
457 grefs[i] = INVALID_GRANT_REF;
458 }
459 }
460
461 if (*vaddr)
462 free_pages_exact(*vaddr, nr_pages * XEN_PAGE_SIZE);
463 *vaddr = NULL;
464 }
465 EXPORT_SYMBOL_GPL(xenbus_teardown_ring);
466
467 /*
468 * Allocate an event channel for the given xenbus_device, assigning the newly
469 * created local port to *port. Return 0 on success, or -errno on error. On
470 * error, the device will switch to XenbusStateClosing, and the error will be
471 * saved in the store.
472 */
xenbus_alloc_evtchn(struct xenbus_device * dev,evtchn_port_t * port)473 int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port)
474 {
475 struct evtchn_alloc_unbound alloc_unbound;
476 int err;
477
478 alloc_unbound.dom = DOMID_SELF;
479 alloc_unbound.remote_dom = dev->otherend_id;
480
481 err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
482 &alloc_unbound);
483 if (err)
484 xenbus_dev_fatal(dev, err, "allocating event channel");
485 else
486 *port = alloc_unbound.port;
487
488 return err;
489 }
490 EXPORT_SYMBOL_GPL(xenbus_alloc_evtchn);
491
492
493 /*
494 * Free an existing event channel. Returns 0 on success or -errno on error.
495 */
xenbus_free_evtchn(struct xenbus_device * dev,evtchn_port_t port)496 int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port)
497 {
498 struct evtchn_close close;
499 int err;
500
501 close.port = port;
502
503 err = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
504 if (err)
505 xenbus_dev_error(dev, err, "freeing event channel %u", port);
506
507 return err;
508 }
509 EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
510
511
512 /**
513 * xenbus_map_ring_valloc - allocate & map pages of VA space
514 * @dev: xenbus device
515 * @gnt_refs: grant reference array
516 * @nr_grefs: number of grant references
517 * @vaddr: pointer to address to be filled out by mapping
518 *
519 * Map @nr_grefs pages of memory into this domain from another
520 * domain's grant table. xenbus_map_ring_valloc allocates @nr_grefs
521 * pages of virtual address space, maps the pages to that address, and sets
522 * *vaddr to that address. If an error is returned, device will switch to
523 * XenbusStateClosing and the error message will be saved in XenStore.
524 *
525 * Returns: %0 on success or -errno on error
526 */
xenbus_map_ring_valloc(struct xenbus_device * dev,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)527 int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
528 unsigned int nr_grefs, void **vaddr)
529 {
530 int err;
531 struct map_ring_valloc *info;
532
533 *vaddr = NULL;
534
535 if (nr_grefs > XENBUS_MAX_RING_GRANTS)
536 return -EINVAL;
537
538 info = kzalloc(sizeof(*info), GFP_KERNEL);
539 if (!info)
540 return -ENOMEM;
541
542 info->node = kzalloc(sizeof(*info->node), GFP_KERNEL);
543 if (!info->node)
544 err = -ENOMEM;
545 else
546 err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr);
547
548 kfree(info->node);
549 kfree(info);
550 return err;
551 }
552 EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
553
554 /* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
555 * long), e.g. 32-on-64. Caller is responsible for preparing the
556 * right array to feed into this function */
__xenbus_map_ring(struct xenbus_device * dev,grant_ref_t * gnt_refs,unsigned int nr_grefs,grant_handle_t * handles,struct map_ring_valloc * info,unsigned int flags,bool * leaked)557 static int __xenbus_map_ring(struct xenbus_device *dev,
558 grant_ref_t *gnt_refs,
559 unsigned int nr_grefs,
560 grant_handle_t *handles,
561 struct map_ring_valloc *info,
562 unsigned int flags,
563 bool *leaked)
564 {
565 int i, j;
566
567 if (nr_grefs > XENBUS_MAX_RING_GRANTS)
568 return -EINVAL;
569
570 for (i = 0; i < nr_grefs; i++) {
571 gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags,
572 gnt_refs[i], dev->otherend_id);
573 handles[i] = INVALID_GRANT_HANDLE;
574 }
575
576 gnttab_batch_map(info->map, i);
577
578 for (i = 0; i < nr_grefs; i++) {
579 if (info->map[i].status != GNTST_okay) {
580 xenbus_dev_fatal(dev, info->map[i].status,
581 "mapping in shared page %d from domain %d",
582 gnt_refs[i], dev->otherend_id);
583 goto fail;
584 } else
585 handles[i] = info->map[i].handle;
586 }
587
588 return 0;
589
590 fail:
591 for (i = j = 0; i < nr_grefs; i++) {
592 if (handles[i] != INVALID_GRANT_HANDLE) {
593 gnttab_set_unmap_op(&info->unmap[j],
594 info->phys_addrs[i],
595 GNTMAP_host_map, handles[i]);
596 j++;
597 }
598 }
599
600 BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j));
601
602 *leaked = false;
603 for (i = 0; i < j; i++) {
604 if (info->unmap[i].status != GNTST_okay) {
605 *leaked = true;
606 break;
607 }
608 }
609
610 return -ENOENT;
611 }
612
613 /**
614 * xenbus_unmap_ring - unmap memory from another domain
615 * @dev: xenbus device
616 * @handles: grant handle array
617 * @nr_handles: number of handles in the array
618 * @vaddrs: addresses to unmap
619 *
620 * Unmap memory in this domain that was imported from another domain.
621 *
622 * Returns: %0 on success or GNTST_* on error
623 * (see xen/include/interface/grant_table.h).
624 */
xenbus_unmap_ring(struct xenbus_device * dev,grant_handle_t * handles,unsigned int nr_handles,unsigned long * vaddrs)625 static int xenbus_unmap_ring(struct xenbus_device *dev, grant_handle_t *handles,
626 unsigned int nr_handles, unsigned long *vaddrs)
627 {
628 struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
629 int i;
630 int err;
631
632 if (nr_handles > XENBUS_MAX_RING_GRANTS)
633 return -EINVAL;
634
635 for (i = 0; i < nr_handles; i++)
636 gnttab_set_unmap_op(&unmap[i], vaddrs[i],
637 GNTMAP_host_map, handles[i]);
638
639 BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i));
640
641 err = GNTST_okay;
642 for (i = 0; i < nr_handles; i++) {
643 if (unmap[i].status != GNTST_okay) {
644 xenbus_dev_error(dev, unmap[i].status,
645 "unmapping page at handle %d error %d",
646 handles[i], unmap[i].status);
647 err = unmap[i].status;
648 break;
649 }
650 }
651
652 return err;
653 }
654
xenbus_map_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)655 static void xenbus_map_ring_setup_grant_hvm(unsigned long gfn,
656 unsigned int goffset,
657 unsigned int len,
658 void *data)
659 {
660 struct map_ring_valloc *info = data;
661 unsigned long vaddr = (unsigned long)gfn_to_virt(gfn);
662
663 info->phys_addrs[info->idx] = vaddr;
664 info->addrs[info->idx] = vaddr;
665
666 info->idx++;
667 }
668
xenbus_map_ring_hvm(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_ref,unsigned int nr_grefs,void ** vaddr)669 static int xenbus_map_ring_hvm(struct xenbus_device *dev,
670 struct map_ring_valloc *info,
671 grant_ref_t *gnt_ref,
672 unsigned int nr_grefs,
673 void **vaddr)
674 {
675 struct xenbus_map_node *node = info->node;
676 int err;
677 void *addr;
678 bool leaked = false;
679 unsigned int nr_pages = XENBUS_PAGES(nr_grefs);
680
681 err = xen_alloc_unpopulated_pages(nr_pages, node->hvm.pages);
682 if (err)
683 goto out_err;
684
685 gnttab_foreach_grant(node->hvm.pages, nr_grefs,
686 xenbus_map_ring_setup_grant_hvm,
687 info);
688
689 err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles,
690 info, GNTMAP_host_map, &leaked);
691 node->nr_handles = nr_grefs;
692
693 if (err)
694 goto out_free_ballooned_pages;
695
696 addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP,
697 PAGE_KERNEL);
698 if (!addr) {
699 err = -ENOMEM;
700 goto out_xenbus_unmap_ring;
701 }
702
703 node->hvm.addr = addr;
704
705 spin_lock(&xenbus_valloc_lock);
706 list_add(&node->next, &xenbus_valloc_pages);
707 spin_unlock(&xenbus_valloc_lock);
708
709 *vaddr = addr;
710 info->node = NULL;
711
712 return 0;
713
714 out_xenbus_unmap_ring:
715 if (!leaked)
716 xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs);
717 else
718 pr_alert("leaking %p size %u page(s)",
719 addr, nr_pages);
720 out_free_ballooned_pages:
721 if (!leaked)
722 xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
723 out_err:
724 return err;
725 }
726
727 /**
728 * xenbus_unmap_ring_vfree - unmap a page of memory from another domain
729 * @dev: xenbus device
730 * @vaddr: addr to unmap
731 *
732 * Based on Rusty Russell's skeleton driver's unmap_page.
733 * Unmap a page of memory in this domain that was imported from another domain.
734 * Use xenbus_unmap_ring_vfree if you mapped in your memory with
735 * xenbus_map_ring_valloc (it will free the virtual address space).
736 *
737 * Returns: %0 on success or GNTST_* on error
738 * (see xen/include/interface/grant_table.h).
739 */
xenbus_unmap_ring_vfree(struct xenbus_device * dev,void * vaddr)740 int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
741 {
742 return ring_ops->unmap(dev, vaddr);
743 }
744 EXPORT_SYMBOL_GPL(xenbus_unmap_ring_vfree);
745
746 #ifdef CONFIG_XEN_PV
map_ring_apply(pte_t * pte,unsigned long addr,void * data)747 static int map_ring_apply(pte_t *pte, unsigned long addr, void *data)
748 {
749 struct map_ring_valloc *info = data;
750
751 info->phys_addrs[info->idx++] = arbitrary_virt_to_machine(pte).maddr;
752 return 0;
753 }
754
xenbus_map_ring_pv(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)755 static int xenbus_map_ring_pv(struct xenbus_device *dev,
756 struct map_ring_valloc *info,
757 grant_ref_t *gnt_refs,
758 unsigned int nr_grefs,
759 void **vaddr)
760 {
761 struct xenbus_map_node *node = info->node;
762 struct vm_struct *area;
763 bool leaked = false;
764 int err = -ENOMEM;
765
766 area = get_vm_area(XEN_PAGE_SIZE * nr_grefs, VM_IOREMAP);
767 if (!area)
768 return -ENOMEM;
769 if (apply_to_page_range(&init_mm, (unsigned long)area->addr,
770 XEN_PAGE_SIZE * nr_grefs, map_ring_apply, info))
771 goto failed;
772 err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles,
773 info, GNTMAP_host_map | GNTMAP_contains_pte,
774 &leaked);
775 if (err)
776 goto failed;
777
778 node->nr_handles = nr_grefs;
779 node->pv.area = area;
780
781 spin_lock(&xenbus_valloc_lock);
782 list_add(&node->next, &xenbus_valloc_pages);
783 spin_unlock(&xenbus_valloc_lock);
784
785 *vaddr = area->addr;
786 info->node = NULL;
787
788 return 0;
789
790 failed:
791 if (!leaked)
792 free_vm_area(area);
793 else
794 pr_alert("leaking VM area %p size %u page(s)", area, nr_grefs);
795
796 return err;
797 }
798
xenbus_unmap_ring_pv(struct xenbus_device * dev,void * vaddr)799 static int xenbus_unmap_ring_pv(struct xenbus_device *dev, void *vaddr)
800 {
801 struct xenbus_map_node *node;
802 struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
803 unsigned int level;
804 int i;
805 bool leaked = false;
806 int err;
807
808 spin_lock(&xenbus_valloc_lock);
809 list_for_each_entry(node, &xenbus_valloc_pages, next) {
810 if (node->pv.area->addr == vaddr) {
811 list_del(&node->next);
812 goto found;
813 }
814 }
815 node = NULL;
816 found:
817 spin_unlock(&xenbus_valloc_lock);
818
819 if (!node) {
820 xenbus_dev_error(dev, -ENOENT,
821 "can't find mapped virtual address %p", vaddr);
822 return GNTST_bad_virt_addr;
823 }
824
825 for (i = 0; i < node->nr_handles; i++) {
826 unsigned long addr;
827
828 memset(&unmap[i], 0, sizeof(unmap[i]));
829 addr = (unsigned long)vaddr + (XEN_PAGE_SIZE * i);
830 unmap[i].host_addr = arbitrary_virt_to_machine(
831 lookup_address(addr, &level)).maddr;
832 unmap[i].dev_bus_addr = 0;
833 unmap[i].handle = node->handles[i];
834 }
835
836 BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i));
837
838 err = GNTST_okay;
839 leaked = false;
840 for (i = 0; i < node->nr_handles; i++) {
841 if (unmap[i].status != GNTST_okay) {
842 leaked = true;
843 xenbus_dev_error(dev, unmap[i].status,
844 "unmapping page at handle %d error %d",
845 node->handles[i], unmap[i].status);
846 err = unmap[i].status;
847 break;
848 }
849 }
850
851 if (!leaked)
852 free_vm_area(node->pv.area);
853 else
854 pr_alert("leaking VM area %p size %u page(s)",
855 node->pv.area, node->nr_handles);
856
857 kfree(node);
858 return err;
859 }
860
861 static const struct xenbus_ring_ops ring_ops_pv = {
862 .map = xenbus_map_ring_pv,
863 .unmap = xenbus_unmap_ring_pv,
864 };
865 #endif
866
867 struct unmap_ring_hvm
868 {
869 unsigned int idx;
870 unsigned long addrs[XENBUS_MAX_RING_GRANTS];
871 };
872
xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)873 static void xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,
874 unsigned int goffset,
875 unsigned int len,
876 void *data)
877 {
878 struct unmap_ring_hvm *info = data;
879
880 info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn);
881
882 info->idx++;
883 }
884
xenbus_unmap_ring_hvm(struct xenbus_device * dev,void * vaddr)885 static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)
886 {
887 int rv;
888 struct xenbus_map_node *node;
889 void *addr;
890 struct unmap_ring_hvm info = {
891 .idx = 0,
892 };
893 unsigned int nr_pages;
894
895 spin_lock(&xenbus_valloc_lock);
896 list_for_each_entry(node, &xenbus_valloc_pages, next) {
897 addr = node->hvm.addr;
898 if (addr == vaddr) {
899 list_del(&node->next);
900 goto found;
901 }
902 }
903 node = addr = NULL;
904 found:
905 spin_unlock(&xenbus_valloc_lock);
906
907 if (!node) {
908 xenbus_dev_error(dev, -ENOENT,
909 "can't find mapped virtual address %p", vaddr);
910 return GNTST_bad_virt_addr;
911 }
912
913 nr_pages = XENBUS_PAGES(node->nr_handles);
914
915 gnttab_foreach_grant(node->hvm.pages, node->nr_handles,
916 xenbus_unmap_ring_setup_grant_hvm,
917 &info);
918
919 rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
920 info.addrs);
921 if (!rv) {
922 vunmap(vaddr);
923 xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
924 }
925 else
926 WARN(1, "Leaking %p, size %u page(s)\n", vaddr, nr_pages);
927
928 kfree(node);
929 return rv;
930 }
931
932 /**
933 * xenbus_read_driver_state - read state from a store path
934 * @path: path for driver
935 *
936 * Returns: the state of the driver rooted at the given store path, or
937 * XenbusStateUnknown if no state can be read.
938 */
xenbus_read_driver_state(const char * path)939 enum xenbus_state xenbus_read_driver_state(const char *path)
940 {
941 enum xenbus_state result;
942 int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
943 if (err)
944 result = XenbusStateUnknown;
945
946 return result;
947 }
948 EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
949
950 static const struct xenbus_ring_ops ring_ops_hvm = {
951 .map = xenbus_map_ring_hvm,
952 .unmap = xenbus_unmap_ring_hvm,
953 };
954
xenbus_ring_ops_init(void)955 void __init xenbus_ring_ops_init(void)
956 {
957 #ifdef CONFIG_XEN_PV
958 if (!xen_feature(XENFEAT_auto_translated_physmap))
959 ring_ops = &ring_ops_pv;
960 else
961 #endif
962 ring_ops = &ring_ops_hvm;
963 }
964