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  * @callback: callback to register
120  *
121  * Register a @watch on the given path, using the given xenbus_watch structure
122  * for storage, and the given @callback function as the callback.  Return 0 on
123  * success, or -errno on error.  On success, the given @path will be saved as
124  * @watch->node, and remains the caller's to free.  On error, @watch->node will
125  * be NULL, the device will switch to %XenbusStateClosing, and the error will
126  * be saved in the store.
127  */
xenbus_watch_path(struct xenbus_device * dev,const char * path,struct xenbus_watch * watch,void (* callback)(struct xenbus_watch *,const char *,const char *))128 int xenbus_watch_path(struct xenbus_device *dev, const char *path,
129 		      struct xenbus_watch *watch,
130 		      void (*callback)(struct xenbus_watch *,
131 				       const char *, const char *))
132 {
133 	int err;
134 
135 	watch->node = path;
136 	watch->callback = callback;
137 
138 	err = register_xenbus_watch(watch);
139 
140 	if (err) {
141 		watch->node = NULL;
142 		watch->callback = NULL;
143 		xenbus_dev_fatal(dev, err, "adding watch on %s", path);
144 	}
145 
146 	return err;
147 }
148 EXPORT_SYMBOL_GPL(xenbus_watch_path);
149 
150 
151 /**
152  * xenbus_watch_pathfmt - register a watch on a sprintf-formatted path
153  * @dev: xenbus device
154  * @watch: watch to register
155  * @callback: callback to register
156  * @pathfmt: format of path to watch
157  *
158  * Register a watch on the given @path, using the given xenbus_watch
159  * structure for storage, and the given @callback function as the callback.
160  * Return 0 on success, or -errno on error.  On success, the watched path
161  * (@path/@path2) will be saved as @watch->node, and becomes the caller's to
162  * kfree().  On error, watch->node will be NULL, so the caller has nothing to
163  * free, the device will switch to %XenbusStateClosing, and the error will be
164  * saved in the store.
165  */
xenbus_watch_pathfmt(struct xenbus_device * dev,struct xenbus_watch * watch,void (* callback)(struct xenbus_watch *,const char *,const char *),const char * pathfmt,...)166 int xenbus_watch_pathfmt(struct xenbus_device *dev,
167 			 struct xenbus_watch *watch,
168 			 void (*callback)(struct xenbus_watch *,
169 					  const char *, const char *),
170 			 const char *pathfmt, ...)
171 {
172 	int err;
173 	va_list ap;
174 	char *path;
175 
176 	va_start(ap, pathfmt);
177 	path = kvasprintf(GFP_NOIO | __GFP_HIGH, pathfmt, ap);
178 	va_end(ap);
179 
180 	if (!path) {
181 		xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch");
182 		return -ENOMEM;
183 	}
184 	err = xenbus_watch_path(dev, path, watch, callback);
185 
186 	if (err)
187 		kfree(path);
188 	return err;
189 }
190 EXPORT_SYMBOL_GPL(xenbus_watch_pathfmt);
191 
192 static void xenbus_switch_fatal(struct xenbus_device *, int, int,
193 				const char *, ...);
194 
195 static int
__xenbus_switch_state(struct xenbus_device * dev,enum xenbus_state state,int depth)196 __xenbus_switch_state(struct xenbus_device *dev,
197 		      enum xenbus_state state, int depth)
198 {
199 	/* We check whether the state is currently set to the given value, and
200 	   if not, then the state is set.  We don't want to unconditionally
201 	   write the given state, because we don't want to fire watches
202 	   unnecessarily.  Furthermore, if the node has gone, we don't write
203 	   to it, as the device will be tearing down, and we don't want to
204 	   resurrect that directory.
205 
206 	   Note that, because of this cached value of our state, this
207 	   function will not take a caller's Xenstore transaction
208 	   (something it was trying to in the past) because dev->state
209 	   would not get reset if the transaction was aborted.
210 	 */
211 
212 	struct xenbus_transaction xbt;
213 	int current_state;
214 	int err, abort;
215 
216 	if (state == dev->state)
217 		return 0;
218 
219 again:
220 	abort = 1;
221 
222 	err = xenbus_transaction_start(&xbt);
223 	if (err) {
224 		xenbus_switch_fatal(dev, depth, err, "starting transaction");
225 		return 0;
226 	}
227 
228 	err = xenbus_scanf(xbt, dev->nodename, "state", "%d", &current_state);
229 	if (err != 1)
230 		goto abort;
231 
232 	err = xenbus_printf(xbt, dev->nodename, "state", "%d", state);
233 	if (err) {
234 		xenbus_switch_fatal(dev, depth, err, "writing new state");
235 		goto abort;
236 	}
237 
238 	abort = 0;
239 abort:
240 	err = xenbus_transaction_end(xbt, abort);
241 	if (err) {
242 		if (err == -EAGAIN && !abort)
243 			goto again;
244 		xenbus_switch_fatal(dev, depth, err, "ending transaction");
245 	} else
246 		dev->state = state;
247 
248 	return 0;
249 }
250 
251 /**
252  * xenbus_switch_state
253  * @dev: xenbus device
254  * @state: new state
255  *
256  * Advertise in the store a change of the given driver to the given new_state.
257  * Return 0 on success, or -errno on error.  On error, the device will switch
258  * to XenbusStateClosing, and the error will be saved in the store.
259  */
xenbus_switch_state(struct xenbus_device * dev,enum xenbus_state state)260 int xenbus_switch_state(struct xenbus_device *dev, enum xenbus_state state)
261 {
262 	return __xenbus_switch_state(dev, state, 0);
263 }
264 
265 EXPORT_SYMBOL_GPL(xenbus_switch_state);
266 
xenbus_frontend_closed(struct xenbus_device * dev)267 int xenbus_frontend_closed(struct xenbus_device *dev)
268 {
269 	xenbus_switch_state(dev, XenbusStateClosed);
270 	complete(&dev->down);
271 	return 0;
272 }
273 EXPORT_SYMBOL_GPL(xenbus_frontend_closed);
274 
xenbus_va_dev_error(struct xenbus_device * dev,int err,const char * fmt,va_list ap)275 static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
276 				const char *fmt, va_list ap)
277 {
278 	unsigned int len;
279 	char *printf_buffer;
280 	char *path_buffer;
281 
282 #define PRINTF_BUFFER_SIZE 4096
283 
284 	printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL);
285 	if (!printf_buffer)
286 		return;
287 
288 	len = sprintf(printf_buffer, "%i ", -err);
289 	vsnprintf(printf_buffer + len, PRINTF_BUFFER_SIZE - len, fmt, ap);
290 
291 	dev_err(&dev->dev, "%s\n", printf_buffer);
292 
293 	path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename);
294 	if (path_buffer)
295 		xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer);
296 
297 	kfree(printf_buffer);
298 	kfree(path_buffer);
299 }
300 
301 /**
302  * xenbus_dev_error
303  * @dev: xenbus device
304  * @err: error to report
305  * @fmt: error message format
306  *
307  * Report the given negative errno into the store, along with the given
308  * formatted message.
309  */
xenbus_dev_error(struct xenbus_device * dev,int err,const char * fmt,...)310 void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
311 {
312 	va_list ap;
313 
314 	va_start(ap, fmt);
315 	xenbus_va_dev_error(dev, err, fmt, ap);
316 	va_end(ap);
317 }
318 EXPORT_SYMBOL_GPL(xenbus_dev_error);
319 
320 /**
321  * xenbus_dev_fatal
322  * @dev: xenbus device
323  * @err: error to report
324  * @fmt: error message format
325  *
326  * Equivalent to xenbus_dev_error(dev, err, fmt, args), followed by
327  * xenbus_switch_state(dev, XenbusStateClosing) to schedule an orderly
328  * closedown of this driver and its peer.
329  */
330 
xenbus_dev_fatal(struct xenbus_device * dev,int err,const char * fmt,...)331 void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt, ...)
332 {
333 	va_list ap;
334 
335 	va_start(ap, fmt);
336 	xenbus_va_dev_error(dev, err, fmt, ap);
337 	va_end(ap);
338 
339 	xenbus_switch_state(dev, XenbusStateClosing);
340 }
341 EXPORT_SYMBOL_GPL(xenbus_dev_fatal);
342 
343 /**
344  * Equivalent to xenbus_dev_fatal(dev, err, fmt, args), but helps
345  * avoiding recursion within xenbus_switch_state.
346  */
xenbus_switch_fatal(struct xenbus_device * dev,int depth,int err,const char * fmt,...)347 static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
348 				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 	if (!depth)
357 		__xenbus_switch_state(dev, XenbusStateClosing, 1);
358 }
359 
360 /**
361  * xenbus_grant_ring
362  * @dev: xenbus device
363  * @vaddr: starting virtual address of the ring
364  * @nr_pages: number of pages to be granted
365  * @grefs: grant reference array to be filled in
366  *
367  * Grant access to the given @vaddr to the peer of the given device.
368  * Then fill in @grefs with grant references.  Return 0 on success, or
369  * -errno on error.  On error, the device will switch to
370  * XenbusStateClosing, and the error will be saved in the store.
371  */
xenbus_grant_ring(struct xenbus_device * dev,void * vaddr,unsigned int nr_pages,grant_ref_t * grefs)372 int xenbus_grant_ring(struct xenbus_device *dev, void *vaddr,
373 		      unsigned int nr_pages, grant_ref_t *grefs)
374 {
375 	int err;
376 	int i, j;
377 
378 	for (i = 0; i < nr_pages; i++) {
379 		unsigned long gfn;
380 
381 		if (is_vmalloc_addr(vaddr))
382 			gfn = pfn_to_gfn(vmalloc_to_pfn(vaddr));
383 		else
384 			gfn = virt_to_gfn(vaddr);
385 
386 		err = gnttab_grant_foreign_access(dev->otherend_id, gfn, 0);
387 		if (err < 0) {
388 			xenbus_dev_fatal(dev, err,
389 					 "granting access to ring page");
390 			goto fail;
391 		}
392 		grefs[i] = err;
393 
394 		vaddr = vaddr + XEN_PAGE_SIZE;
395 	}
396 
397 	return 0;
398 
399 fail:
400 	for (j = 0; j < i; j++)
401 		gnttab_end_foreign_access_ref(grefs[j], 0);
402 	return err;
403 }
404 EXPORT_SYMBOL_GPL(xenbus_grant_ring);
405 
406 
407 /**
408  * Allocate an event channel for the given xenbus_device, assigning the newly
409  * created local port to *port.  Return 0 on success, or -errno on error.  On
410  * error, the device will switch to XenbusStateClosing, and the error will be
411  * saved in the store.
412  */
xenbus_alloc_evtchn(struct xenbus_device * dev,evtchn_port_t * port)413 int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port)
414 {
415 	struct evtchn_alloc_unbound alloc_unbound;
416 	int err;
417 
418 	alloc_unbound.dom = DOMID_SELF;
419 	alloc_unbound.remote_dom = dev->otherend_id;
420 
421 	err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
422 					  &alloc_unbound);
423 	if (err)
424 		xenbus_dev_fatal(dev, err, "allocating event channel");
425 	else
426 		*port = alloc_unbound.port;
427 
428 	return err;
429 }
430 EXPORT_SYMBOL_GPL(xenbus_alloc_evtchn);
431 
432 
433 /**
434  * Free an existing event channel. Returns 0 on success or -errno on error.
435  */
xenbus_free_evtchn(struct xenbus_device * dev,evtchn_port_t port)436 int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port)
437 {
438 	struct evtchn_close close;
439 	int err;
440 
441 	close.port = port;
442 
443 	err = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
444 	if (err)
445 		xenbus_dev_error(dev, err, "freeing event channel %u", port);
446 
447 	return err;
448 }
449 EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
450 
451 
452 /**
453  * xenbus_map_ring_valloc
454  * @dev: xenbus device
455  * @gnt_refs: grant reference array
456  * @nr_grefs: number of grant references
457  * @vaddr: pointer to address to be filled out by mapping
458  *
459  * Map @nr_grefs pages of memory into this domain from another
460  * domain's grant table.  xenbus_map_ring_valloc allocates @nr_grefs
461  * pages of virtual address space, maps the pages to that address, and
462  * sets *vaddr to that address.  Returns 0 on success, and -errno on
463  * error. If an error is returned, device will switch to
464  * XenbusStateClosing and the error message will be saved in XenStore.
465  */
xenbus_map_ring_valloc(struct xenbus_device * dev,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)466 int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
467 			   unsigned int nr_grefs, void **vaddr)
468 {
469 	int err;
470 	struct map_ring_valloc *info;
471 
472 	*vaddr = NULL;
473 
474 	if (nr_grefs > XENBUS_MAX_RING_GRANTS)
475 		return -EINVAL;
476 
477 	info = kzalloc(sizeof(*info), GFP_KERNEL);
478 	if (!info)
479 		return -ENOMEM;
480 
481 	info->node = kzalloc(sizeof(*info->node), GFP_KERNEL);
482 	if (!info->node)
483 		err = -ENOMEM;
484 	else
485 		err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr);
486 
487 	kfree(info->node);
488 	kfree(info);
489 	return err;
490 }
491 EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
492 
493 /* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
494  * long), e.g. 32-on-64.  Caller is responsible for preparing the
495  * 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)496 static int __xenbus_map_ring(struct xenbus_device *dev,
497 			     grant_ref_t *gnt_refs,
498 			     unsigned int nr_grefs,
499 			     grant_handle_t *handles,
500 			     struct map_ring_valloc *info,
501 			     unsigned int flags,
502 			     bool *leaked)
503 {
504 	int i, j;
505 
506 	if (nr_grefs > XENBUS_MAX_RING_GRANTS)
507 		return -EINVAL;
508 
509 	for (i = 0; i < nr_grefs; i++) {
510 		gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags,
511 				  gnt_refs[i], dev->otherend_id);
512 		handles[i] = INVALID_GRANT_HANDLE;
513 	}
514 
515 	gnttab_batch_map(info->map, i);
516 
517 	for (i = 0; i < nr_grefs; i++) {
518 		if (info->map[i].status != GNTST_okay) {
519 			xenbus_dev_fatal(dev, info->map[i].status,
520 					 "mapping in shared page %d from domain %d",
521 					 gnt_refs[i], dev->otherend_id);
522 			goto fail;
523 		} else
524 			handles[i] = info->map[i].handle;
525 	}
526 
527 	return 0;
528 
529  fail:
530 	for (i = j = 0; i < nr_grefs; i++) {
531 		if (handles[i] != INVALID_GRANT_HANDLE) {
532 			gnttab_set_unmap_op(&info->unmap[j],
533 					    info->phys_addrs[i],
534 					    GNTMAP_host_map, handles[i]);
535 			j++;
536 		}
537 	}
538 
539 	if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j))
540 		BUG();
541 
542 	*leaked = false;
543 	for (i = 0; i < j; i++) {
544 		if (info->unmap[i].status != GNTST_okay) {
545 			*leaked = true;
546 			break;
547 		}
548 	}
549 
550 	return -ENOENT;
551 }
552 
553 /**
554  * xenbus_unmap_ring
555  * @dev: xenbus device
556  * @handles: grant handle array
557  * @nr_handles: number of handles in the array
558  * @vaddrs: addresses to unmap
559  *
560  * Unmap memory in this domain that was imported from another domain.
561  * Returns 0 on success and returns GNTST_* on error
562  * (see xen/include/interface/grant_table.h).
563  */
xenbus_unmap_ring(struct xenbus_device * dev,grant_handle_t * handles,unsigned int nr_handles,unsigned long * vaddrs)564 static int xenbus_unmap_ring(struct xenbus_device *dev, grant_handle_t *handles,
565 			     unsigned int nr_handles, unsigned long *vaddrs)
566 {
567 	struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
568 	int i;
569 	int err;
570 
571 	if (nr_handles > XENBUS_MAX_RING_GRANTS)
572 		return -EINVAL;
573 
574 	for (i = 0; i < nr_handles; i++)
575 		gnttab_set_unmap_op(&unmap[i], vaddrs[i],
576 				    GNTMAP_host_map, handles[i]);
577 
578 	if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
579 		BUG();
580 
581 	err = GNTST_okay;
582 	for (i = 0; i < nr_handles; i++) {
583 		if (unmap[i].status != GNTST_okay) {
584 			xenbus_dev_error(dev, unmap[i].status,
585 					 "unmapping page at handle %d error %d",
586 					 handles[i], unmap[i].status);
587 			err = unmap[i].status;
588 			break;
589 		}
590 	}
591 
592 	return err;
593 }
594 
xenbus_map_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)595 static void xenbus_map_ring_setup_grant_hvm(unsigned long gfn,
596 					    unsigned int goffset,
597 					    unsigned int len,
598 					    void *data)
599 {
600 	struct map_ring_valloc *info = data;
601 	unsigned long vaddr = (unsigned long)gfn_to_virt(gfn);
602 
603 	info->phys_addrs[info->idx] = vaddr;
604 	info->addrs[info->idx] = vaddr;
605 
606 	info->idx++;
607 }
608 
xenbus_map_ring_hvm(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_ref,unsigned int nr_grefs,void ** vaddr)609 static int xenbus_map_ring_hvm(struct xenbus_device *dev,
610 			       struct map_ring_valloc *info,
611 			       grant_ref_t *gnt_ref,
612 			       unsigned int nr_grefs,
613 			       void **vaddr)
614 {
615 	struct xenbus_map_node *node = info->node;
616 	int err;
617 	void *addr;
618 	bool leaked = false;
619 	unsigned int nr_pages = XENBUS_PAGES(nr_grefs);
620 
621 	err = xen_alloc_unpopulated_pages(nr_pages, node->hvm.pages);
622 	if (err)
623 		goto out_err;
624 
625 	gnttab_foreach_grant(node->hvm.pages, nr_grefs,
626 			     xenbus_map_ring_setup_grant_hvm,
627 			     info);
628 
629 	err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles,
630 				info, GNTMAP_host_map, &leaked);
631 	node->nr_handles = nr_grefs;
632 
633 	if (err)
634 		goto out_free_ballooned_pages;
635 
636 	addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP,
637 		    PAGE_KERNEL);
638 	if (!addr) {
639 		err = -ENOMEM;
640 		goto out_xenbus_unmap_ring;
641 	}
642 
643 	node->hvm.addr = addr;
644 
645 	spin_lock(&xenbus_valloc_lock);
646 	list_add(&node->next, &xenbus_valloc_pages);
647 	spin_unlock(&xenbus_valloc_lock);
648 
649 	*vaddr = addr;
650 	info->node = NULL;
651 
652 	return 0;
653 
654  out_xenbus_unmap_ring:
655 	if (!leaked)
656 		xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs);
657 	else
658 		pr_alert("leaking %p size %u page(s)",
659 			 addr, nr_pages);
660  out_free_ballooned_pages:
661 	if (!leaked)
662 		xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
663  out_err:
664 	return err;
665 }
666 
667 /**
668  * xenbus_unmap_ring_vfree
669  * @dev: xenbus device
670  * @vaddr: addr to unmap
671  *
672  * Based on Rusty Russell's skeleton driver's unmap_page.
673  * Unmap a page of memory in this domain that was imported from another domain.
674  * Use xenbus_unmap_ring_vfree if you mapped in your memory with
675  * xenbus_map_ring_valloc (it will free the virtual address space).
676  * Returns 0 on success and returns GNTST_* on error
677  * (see xen/include/interface/grant_table.h).
678  */
xenbus_unmap_ring_vfree(struct xenbus_device * dev,void * vaddr)679 int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
680 {
681 	return ring_ops->unmap(dev, vaddr);
682 }
683 EXPORT_SYMBOL_GPL(xenbus_unmap_ring_vfree);
684 
685 #ifdef CONFIG_XEN_PV
map_ring_apply(pte_t * pte,unsigned long addr,void * data)686 static int map_ring_apply(pte_t *pte, unsigned long addr, void *data)
687 {
688 	struct map_ring_valloc *info = data;
689 
690 	info->phys_addrs[info->idx++] = arbitrary_virt_to_machine(pte).maddr;
691 	return 0;
692 }
693 
xenbus_map_ring_pv(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)694 static int xenbus_map_ring_pv(struct xenbus_device *dev,
695 			      struct map_ring_valloc *info,
696 			      grant_ref_t *gnt_refs,
697 			      unsigned int nr_grefs,
698 			      void **vaddr)
699 {
700 	struct xenbus_map_node *node = info->node;
701 	struct vm_struct *area;
702 	bool leaked = false;
703 	int err = -ENOMEM;
704 
705 	area = get_vm_area(XEN_PAGE_SIZE * nr_grefs, VM_IOREMAP);
706 	if (!area)
707 		return -ENOMEM;
708 	if (apply_to_page_range(&init_mm, (unsigned long)area->addr,
709 				XEN_PAGE_SIZE * nr_grefs, map_ring_apply, info))
710 		goto failed;
711 	err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles,
712 				info, GNTMAP_host_map | GNTMAP_contains_pte,
713 				&leaked);
714 	if (err)
715 		goto failed;
716 
717 	node->nr_handles = nr_grefs;
718 	node->pv.area = area;
719 
720 	spin_lock(&xenbus_valloc_lock);
721 	list_add(&node->next, &xenbus_valloc_pages);
722 	spin_unlock(&xenbus_valloc_lock);
723 
724 	*vaddr = area->addr;
725 	info->node = NULL;
726 
727 	return 0;
728 
729 failed:
730 	if (!leaked)
731 		free_vm_area(area);
732 	else
733 		pr_alert("leaking VM area %p size %u page(s)", area, nr_grefs);
734 
735 	return err;
736 }
737 
xenbus_unmap_ring_pv(struct xenbus_device * dev,void * vaddr)738 static int xenbus_unmap_ring_pv(struct xenbus_device *dev, void *vaddr)
739 {
740 	struct xenbus_map_node *node;
741 	struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
742 	unsigned int level;
743 	int i;
744 	bool leaked = false;
745 	int err;
746 
747 	spin_lock(&xenbus_valloc_lock);
748 	list_for_each_entry(node, &xenbus_valloc_pages, next) {
749 		if (node->pv.area->addr == vaddr) {
750 			list_del(&node->next);
751 			goto found;
752 		}
753 	}
754 	node = NULL;
755  found:
756 	spin_unlock(&xenbus_valloc_lock);
757 
758 	if (!node) {
759 		xenbus_dev_error(dev, -ENOENT,
760 				 "can't find mapped virtual address %p", vaddr);
761 		return GNTST_bad_virt_addr;
762 	}
763 
764 	for (i = 0; i < node->nr_handles; i++) {
765 		unsigned long addr;
766 
767 		memset(&unmap[i], 0, sizeof(unmap[i]));
768 		addr = (unsigned long)vaddr + (XEN_PAGE_SIZE * i);
769 		unmap[i].host_addr = arbitrary_virt_to_machine(
770 			lookup_address(addr, &level)).maddr;
771 		unmap[i].dev_bus_addr = 0;
772 		unmap[i].handle = node->handles[i];
773 	}
774 
775 	if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
776 		BUG();
777 
778 	err = GNTST_okay;
779 	leaked = false;
780 	for (i = 0; i < node->nr_handles; i++) {
781 		if (unmap[i].status != GNTST_okay) {
782 			leaked = true;
783 			xenbus_dev_error(dev, unmap[i].status,
784 					 "unmapping page at handle %d error %d",
785 					 node->handles[i], unmap[i].status);
786 			err = unmap[i].status;
787 			break;
788 		}
789 	}
790 
791 	if (!leaked)
792 		free_vm_area(node->pv.area);
793 	else
794 		pr_alert("leaking VM area %p size %u page(s)",
795 			 node->pv.area, node->nr_handles);
796 
797 	kfree(node);
798 	return err;
799 }
800 
801 static const struct xenbus_ring_ops ring_ops_pv = {
802 	.map = xenbus_map_ring_pv,
803 	.unmap = xenbus_unmap_ring_pv,
804 };
805 #endif
806 
807 struct unmap_ring_hvm
808 {
809 	unsigned int idx;
810 	unsigned long addrs[XENBUS_MAX_RING_GRANTS];
811 };
812 
xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)813 static void xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,
814 					      unsigned int goffset,
815 					      unsigned int len,
816 					      void *data)
817 {
818 	struct unmap_ring_hvm *info = data;
819 
820 	info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn);
821 
822 	info->idx++;
823 }
824 
xenbus_unmap_ring_hvm(struct xenbus_device * dev,void * vaddr)825 static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)
826 {
827 	int rv;
828 	struct xenbus_map_node *node;
829 	void *addr;
830 	struct unmap_ring_hvm info = {
831 		.idx = 0,
832 	};
833 	unsigned int nr_pages;
834 
835 	spin_lock(&xenbus_valloc_lock);
836 	list_for_each_entry(node, &xenbus_valloc_pages, next) {
837 		addr = node->hvm.addr;
838 		if (addr == vaddr) {
839 			list_del(&node->next);
840 			goto found;
841 		}
842 	}
843 	node = addr = NULL;
844  found:
845 	spin_unlock(&xenbus_valloc_lock);
846 
847 	if (!node) {
848 		xenbus_dev_error(dev, -ENOENT,
849 				 "can't find mapped virtual address %p", vaddr);
850 		return GNTST_bad_virt_addr;
851 	}
852 
853 	nr_pages = XENBUS_PAGES(node->nr_handles);
854 
855 	gnttab_foreach_grant(node->hvm.pages, node->nr_handles,
856 			     xenbus_unmap_ring_setup_grant_hvm,
857 			     &info);
858 
859 	rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
860 			       info.addrs);
861 	if (!rv) {
862 		vunmap(vaddr);
863 		xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
864 	}
865 	else
866 		WARN(1, "Leaking %p, size %u page(s)\n", vaddr, nr_pages);
867 
868 	kfree(node);
869 	return rv;
870 }
871 
872 /**
873  * xenbus_read_driver_state
874  * @path: path for driver
875  *
876  * Return the state of the driver rooted at the given store path, or
877  * XenbusStateUnknown if no state can be read.
878  */
xenbus_read_driver_state(const char * path)879 enum xenbus_state xenbus_read_driver_state(const char *path)
880 {
881 	enum xenbus_state result;
882 	int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
883 	if (err)
884 		result = XenbusStateUnknown;
885 
886 	return result;
887 }
888 EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
889 
890 static const struct xenbus_ring_ops ring_ops_hvm = {
891 	.map = xenbus_map_ring_hvm,
892 	.unmap = xenbus_unmap_ring_hvm,
893 };
894 
xenbus_ring_ops_init(void)895 void __init xenbus_ring_ops_init(void)
896 {
897 #ifdef CONFIG_XEN_PV
898 	if (!xen_feature(XENFEAT_auto_translated_physmap))
899 		ring_ops = &ring_ops_pv;
900 	else
901 #endif
902 		ring_ops = &ring_ops_hvm;
903 }
904