xref: /linux/drivers/xen/xenbus/xenbus_client.c (revision 0f912c8917e810a4aa81d122a8e7d0a918505ab9)
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 	bool vanished = false;
230 
231 	if (state == dev->state || dev->vanished)
232 		return 0;
233 
234 again:
235 	abort = 1;
236 
237 	err = xenbus_transaction_start(&xbt);
238 	if (err) {
239 		xenbus_switch_fatal(dev, depth, err, "starting transaction");
240 		return 0;
241 	}
242 
243 	err = xenbus_scanf(xbt, dev->nodename, "state", "%d", &current_state);
244 	if (err != 1)
245 		goto abort;
246 	if (current_state != dev->state && current_state == XenbusStateInitialising) {
247 		vanished = true;
248 		goto abort;
249 	}
250 
251 	err = xenbus_printf(xbt, dev->nodename, "state", "%d", state);
252 	if (err) {
253 		xenbus_switch_fatal(dev, depth, err, "writing new state");
254 		goto abort;
255 	}
256 
257 	abort = 0;
258 abort:
259 	err = xenbus_transaction_end(xbt, abort);
260 	if (err) {
261 		if (err == -EAGAIN && !abort)
262 			goto again;
263 		xenbus_switch_fatal(dev, depth, err, "ending transaction");
264 	} else if (!vanished)
265 		dev->state = state;
266 
267 	return 0;
268 }
269 
270 /**
271  * xenbus_switch_state - save the new state of a driver
272  * @dev: xenbus device
273  * @state: new state
274  *
275  * Advertise in the store a change of the given driver to the given new_state.
276  * On error, the device will switch to XenbusStateClosing, and the error
277  * will be saved in the store.
278  *
279  * Returns: %0 on success or -errno on error
280  */
xenbus_switch_state(struct xenbus_device * dev,enum xenbus_state state)281 int xenbus_switch_state(struct xenbus_device *dev, enum xenbus_state state)
282 {
283 	return __xenbus_switch_state(dev, state, 0);
284 }
285 
286 EXPORT_SYMBOL_GPL(xenbus_switch_state);
287 
xenbus_frontend_closed(struct xenbus_device * dev)288 int xenbus_frontend_closed(struct xenbus_device *dev)
289 {
290 	xenbus_switch_state(dev, XenbusStateClosed);
291 	complete(&dev->down);
292 	return 0;
293 }
294 EXPORT_SYMBOL_GPL(xenbus_frontend_closed);
295 
296 __printf(3, 0)
xenbus_va_dev_error(struct xenbus_device * dev,int err,const char * fmt,va_list ap)297 static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
298 				const char *fmt, va_list ap)
299 {
300 	unsigned int len;
301 	char *printf_buffer;
302 	char *path_buffer;
303 
304 #define PRINTF_BUFFER_SIZE 4096
305 
306 	printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL);
307 	if (!printf_buffer)
308 		return;
309 
310 	len = sprintf(printf_buffer, "%i ", -err);
311 	vsnprintf(printf_buffer + len, PRINTF_BUFFER_SIZE - len, fmt, ap);
312 
313 	dev_err(&dev->dev, "%s\n", printf_buffer);
314 
315 	path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename);
316 	if (path_buffer)
317 		xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer);
318 
319 	kfree(printf_buffer);
320 	kfree(path_buffer);
321 }
322 
323 /**
324  * xenbus_dev_error - place an error message into the store
325  * @dev: xenbus device
326  * @err: error to report
327  * @fmt: error message format
328  *
329  * Report the given negative errno into the store, along with the given
330  * formatted message.
331  */
xenbus_dev_error(struct xenbus_device * dev,int err,const char * fmt,...)332 void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
333 {
334 	va_list ap;
335 
336 	va_start(ap, fmt);
337 	xenbus_va_dev_error(dev, err, fmt, ap);
338 	va_end(ap);
339 }
340 EXPORT_SYMBOL_GPL(xenbus_dev_error);
341 
342 /**
343  * xenbus_dev_fatal - put an error messages into the store and then shutdown
344  * @dev: xenbus device
345  * @err: error to report
346  * @fmt: error message format
347  *
348  * Equivalent to xenbus_dev_error(dev, err, fmt, args), followed by
349  * xenbus_switch_state(dev, XenbusStateClosing) to schedule an orderly
350  * closedown of this driver and its peer.
351  */
352 
xenbus_dev_fatal(struct xenbus_device * dev,int err,const char * fmt,...)353 void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt, ...)
354 {
355 	va_list ap;
356 
357 	va_start(ap, fmt);
358 	xenbus_va_dev_error(dev, err, fmt, ap);
359 	va_end(ap);
360 
361 	xenbus_switch_state(dev, XenbusStateClosing);
362 }
363 EXPORT_SYMBOL_GPL(xenbus_dev_fatal);
364 
365 /*
366  * Equivalent to xenbus_dev_fatal(dev, err, fmt, args), but helps
367  * avoiding recursion within xenbus_switch_state.
368  */
xenbus_switch_fatal(struct xenbus_device * dev,int depth,int err,const char * fmt,...)369 static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
370 				const char *fmt, ...)
371 {
372 	va_list ap;
373 
374 	va_start(ap, fmt);
375 	xenbus_va_dev_error(dev, err, fmt, ap);
376 	va_end(ap);
377 
378 	if (!depth)
379 		__xenbus_switch_state(dev, XenbusStateClosing, 1);
380 }
381 
382 /*
383  * xenbus_setup_ring
384  * @dev: xenbus device
385  * @vaddr: pointer to starting virtual address of the ring
386  * @nr_pages: number of pages to be granted
387  * @grefs: grant reference array to be filled in
388  *
389  * Allocate physically contiguous pages for a shared ring buffer and grant it
390  * to the peer of the given device. The ring buffer is initially filled with
391  * zeroes. The virtual address of the ring is stored at @vaddr and the
392  * grant references are stored in the @grefs array. In case of error @vaddr
393  * will be set to NULL and @grefs will be filled with INVALID_GRANT_REF.
394  */
xenbus_setup_ring(struct xenbus_device * dev,gfp_t gfp,void ** vaddr,unsigned int nr_pages,grant_ref_t * grefs)395 int xenbus_setup_ring(struct xenbus_device *dev, gfp_t gfp, void **vaddr,
396 		      unsigned int nr_pages, grant_ref_t *grefs)
397 {
398 	unsigned long ring_size = nr_pages * XEN_PAGE_SIZE;
399 	grant_ref_t gref_head;
400 	unsigned int i;
401 	void *addr;
402 	int ret;
403 
404 	addr = *vaddr = alloc_pages_exact(ring_size, gfp | __GFP_ZERO);
405 	if (!*vaddr) {
406 		ret = -ENOMEM;
407 		goto err;
408 	}
409 
410 	ret = gnttab_alloc_grant_references(nr_pages, &gref_head);
411 	if (ret) {
412 		xenbus_dev_fatal(dev, ret, "granting access to %u ring pages",
413 				 nr_pages);
414 		goto err;
415 	}
416 
417 	for (i = 0; i < nr_pages; i++) {
418 		unsigned long gfn;
419 
420 		if (is_vmalloc_addr(*vaddr))
421 			gfn = pfn_to_gfn(vmalloc_to_pfn(addr));
422 		else
423 			gfn = virt_to_gfn(addr);
424 
425 		grefs[i] = gnttab_claim_grant_reference(&gref_head);
426 		gnttab_grant_foreign_access_ref(grefs[i], dev->otherend_id,
427 						gfn, 0);
428 
429 		addr += XEN_PAGE_SIZE;
430 	}
431 
432 	return 0;
433 
434  err:
435 	if (*vaddr)
436 		free_pages_exact(*vaddr, ring_size);
437 	for (i = 0; i < nr_pages; i++)
438 		grefs[i] = INVALID_GRANT_REF;
439 	*vaddr = NULL;
440 
441 	return ret;
442 }
443 EXPORT_SYMBOL_GPL(xenbus_setup_ring);
444 
445 /*
446  * xenbus_teardown_ring
447  * @vaddr: starting virtual address of the ring
448  * @nr_pages: number of pages
449  * @grefs: grant reference array
450  *
451  * Remove grants for the shared ring buffer and free the associated memory.
452  * On return the grant reference array is filled with INVALID_GRANT_REF.
453  */
xenbus_teardown_ring(void ** vaddr,unsigned int nr_pages,grant_ref_t * grefs)454 void xenbus_teardown_ring(void **vaddr, unsigned int nr_pages,
455 			  grant_ref_t *grefs)
456 {
457 	unsigned int i;
458 
459 	for (i = 0; i < nr_pages; i++) {
460 		if (grefs[i] != INVALID_GRANT_REF) {
461 			gnttab_end_foreign_access(grefs[i], NULL);
462 			grefs[i] = INVALID_GRANT_REF;
463 		}
464 	}
465 
466 	if (*vaddr)
467 		free_pages_exact(*vaddr, nr_pages * XEN_PAGE_SIZE);
468 	*vaddr = NULL;
469 }
470 EXPORT_SYMBOL_GPL(xenbus_teardown_ring);
471 
472 /*
473  * Allocate an event channel for the given xenbus_device, assigning the newly
474  * created local port to *port.  Return 0 on success, or -errno on error.  On
475  * error, the device will switch to XenbusStateClosing, and the error will be
476  * saved in the store.
477  */
xenbus_alloc_evtchn(struct xenbus_device * dev,evtchn_port_t * port)478 int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port)
479 {
480 	struct evtchn_alloc_unbound alloc_unbound;
481 	int err;
482 
483 	alloc_unbound.dom = DOMID_SELF;
484 	alloc_unbound.remote_dom = dev->otherend_id;
485 
486 	err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
487 					  &alloc_unbound);
488 	if (err)
489 		xenbus_dev_fatal(dev, err, "allocating event channel");
490 	else
491 		*port = alloc_unbound.port;
492 
493 	return err;
494 }
495 EXPORT_SYMBOL_GPL(xenbus_alloc_evtchn);
496 
497 
498 /*
499  * Free an existing event channel. Returns 0 on success or -errno on error.
500  */
xenbus_free_evtchn(struct xenbus_device * dev,evtchn_port_t port)501 int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port)
502 {
503 	struct evtchn_close close;
504 	int err;
505 
506 	close.port = port;
507 
508 	err = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
509 	if (err)
510 		xenbus_dev_error(dev, err, "freeing event channel %u", port);
511 
512 	return err;
513 }
514 EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
515 
516 
517 /**
518  * xenbus_map_ring_valloc - allocate & map pages of VA space
519  * @dev: xenbus device
520  * @gnt_refs: grant reference array
521  * @nr_grefs: number of grant references
522  * @vaddr: pointer to address to be filled out by mapping
523  *
524  * Map @nr_grefs pages of memory into this domain from another
525  * domain's grant table.  xenbus_map_ring_valloc allocates @nr_grefs
526  * pages of virtual address space, maps the pages to that address, and sets
527  * *vaddr to that address.  If an error is returned, device will switch to
528  * XenbusStateClosing and the error message will be saved in XenStore.
529  *
530  * Returns: %0 on success or -errno on error
531  */
xenbus_map_ring_valloc(struct xenbus_device * dev,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)532 int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
533 			   unsigned int nr_grefs, void **vaddr)
534 {
535 	int err;
536 	struct map_ring_valloc *info;
537 
538 	*vaddr = NULL;
539 
540 	if (nr_grefs > XENBUS_MAX_RING_GRANTS)
541 		return -EINVAL;
542 
543 	info = kzalloc_obj(*info);
544 	if (!info)
545 		return -ENOMEM;
546 
547 	info->node = kzalloc_obj(*info->node);
548 	if (!info->node)
549 		err = -ENOMEM;
550 	else
551 		err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr);
552 
553 	kfree(info->node);
554 	kfree(info);
555 	return err;
556 }
557 EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
558 
559 /* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
560  * long), e.g. 32-on-64.  Caller is responsible for preparing the
561  * 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)562 static int __xenbus_map_ring(struct xenbus_device *dev,
563 			     grant_ref_t *gnt_refs,
564 			     unsigned int nr_grefs,
565 			     grant_handle_t *handles,
566 			     struct map_ring_valloc *info,
567 			     unsigned int flags,
568 			     bool *leaked)
569 {
570 	int i, j;
571 
572 	if (nr_grefs > XENBUS_MAX_RING_GRANTS)
573 		return -EINVAL;
574 
575 	for (i = 0; i < nr_grefs; i++) {
576 		gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags,
577 				  gnt_refs[i], dev->otherend_id);
578 		handles[i] = INVALID_GRANT_HANDLE;
579 	}
580 
581 	gnttab_batch_map(info->map, i);
582 
583 	for (i = 0; i < nr_grefs; i++) {
584 		if (info->map[i].status != GNTST_okay) {
585 			xenbus_dev_fatal(dev, info->map[i].status,
586 					 "mapping in shared page %d from domain %d",
587 					 gnt_refs[i], dev->otherend_id);
588 			goto fail;
589 		} else
590 			handles[i] = info->map[i].handle;
591 	}
592 
593 	return 0;
594 
595  fail:
596 	for (i = j = 0; i < nr_grefs; i++) {
597 		if (handles[i] != INVALID_GRANT_HANDLE) {
598 			gnttab_set_unmap_op(&info->unmap[j],
599 					    info->phys_addrs[i],
600 					    GNTMAP_host_map, handles[i]);
601 			j++;
602 		}
603 	}
604 
605 	BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j));
606 
607 	*leaked = false;
608 	for (i = 0; i < j; i++) {
609 		if (info->unmap[i].status != GNTST_okay) {
610 			*leaked = true;
611 			break;
612 		}
613 	}
614 
615 	return -ENOENT;
616 }
617 
618 /**
619  * xenbus_unmap_ring - unmap memory from another domain
620  * @dev: xenbus device
621  * @handles: grant handle array
622  * @nr_handles: number of handles in the array
623  * @vaddrs: addresses to unmap
624  *
625  * Unmap memory in this domain that was imported from another domain.
626  *
627  * Returns: %0 on success or GNTST_* on error
628  * (see xen/include/interface/grant_table.h).
629  */
xenbus_unmap_ring(struct xenbus_device * dev,grant_handle_t * handles,unsigned int nr_handles,unsigned long * vaddrs)630 static int xenbus_unmap_ring(struct xenbus_device *dev, grant_handle_t *handles,
631 			     unsigned int nr_handles, unsigned long *vaddrs)
632 {
633 	struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
634 	int i;
635 	int err;
636 
637 	if (nr_handles > XENBUS_MAX_RING_GRANTS)
638 		return -EINVAL;
639 
640 	for (i = 0; i < nr_handles; i++)
641 		gnttab_set_unmap_op(&unmap[i], vaddrs[i],
642 				    GNTMAP_host_map, handles[i]);
643 
644 	BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i));
645 
646 	err = GNTST_okay;
647 	for (i = 0; i < nr_handles; i++) {
648 		if (unmap[i].status != GNTST_okay) {
649 			xenbus_dev_error(dev, unmap[i].status,
650 					 "unmapping page at handle %d error %d",
651 					 handles[i], unmap[i].status);
652 			err = unmap[i].status;
653 			break;
654 		}
655 	}
656 
657 	return err;
658 }
659 
xenbus_map_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)660 static void xenbus_map_ring_setup_grant_hvm(unsigned long gfn,
661 					    unsigned int goffset,
662 					    unsigned int len,
663 					    void *data)
664 {
665 	struct map_ring_valloc *info = data;
666 	unsigned long vaddr = (unsigned long)gfn_to_virt(gfn);
667 
668 	info->phys_addrs[info->idx] = vaddr;
669 	info->addrs[info->idx] = vaddr;
670 
671 	info->idx++;
672 }
673 
xenbus_map_ring_hvm(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_ref,unsigned int nr_grefs,void ** vaddr)674 static int xenbus_map_ring_hvm(struct xenbus_device *dev,
675 			       struct map_ring_valloc *info,
676 			       grant_ref_t *gnt_ref,
677 			       unsigned int nr_grefs,
678 			       void **vaddr)
679 {
680 	struct xenbus_map_node *node = info->node;
681 	int err;
682 	void *addr;
683 	bool leaked = false;
684 	unsigned int nr_pages = XENBUS_PAGES(nr_grefs);
685 
686 	err = xen_alloc_unpopulated_pages(nr_pages, node->hvm.pages);
687 	if (err)
688 		goto out_err;
689 
690 	gnttab_foreach_grant(node->hvm.pages, nr_grefs,
691 			     xenbus_map_ring_setup_grant_hvm,
692 			     info);
693 
694 	err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles,
695 				info, GNTMAP_host_map, &leaked);
696 	node->nr_handles = nr_grefs;
697 
698 	if (err)
699 		goto out_free_ballooned_pages;
700 
701 	addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP,
702 		    PAGE_KERNEL);
703 	if (!addr) {
704 		err = -ENOMEM;
705 		goto out_xenbus_unmap_ring;
706 	}
707 
708 	node->hvm.addr = addr;
709 
710 	spin_lock(&xenbus_valloc_lock);
711 	list_add(&node->next, &xenbus_valloc_pages);
712 	spin_unlock(&xenbus_valloc_lock);
713 
714 	*vaddr = addr;
715 	info->node = NULL;
716 
717 	return 0;
718 
719  out_xenbus_unmap_ring:
720 	if (!leaked)
721 		xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs);
722 	else
723 		pr_alert("leaking %p size %u page(s)",
724 			 addr, nr_pages);
725  out_free_ballooned_pages:
726 	if (!leaked)
727 		xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
728  out_err:
729 	return err;
730 }
731 
732 /**
733  * xenbus_unmap_ring_vfree - unmap a page of memory from another domain
734  * @dev: xenbus device
735  * @vaddr: addr to unmap
736  *
737  * Based on Rusty Russell's skeleton driver's unmap_page.
738  * Unmap a page of memory in this domain that was imported from another domain.
739  * Use xenbus_unmap_ring_vfree if you mapped in your memory with
740  * xenbus_map_ring_valloc (it will free the virtual address space).
741  *
742  * Returns: %0 on success or GNTST_* on error
743  * (see xen/include/interface/grant_table.h).
744  */
xenbus_unmap_ring_vfree(struct xenbus_device * dev,void * vaddr)745 int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
746 {
747 	return ring_ops->unmap(dev, vaddr);
748 }
749 EXPORT_SYMBOL_GPL(xenbus_unmap_ring_vfree);
750 
751 #ifdef CONFIG_XEN_PV
map_ring_apply(pte_t * pte,unsigned long addr,void * data)752 static int map_ring_apply(pte_t *pte, unsigned long addr, void *data)
753 {
754 	struct map_ring_valloc *info = data;
755 
756 	info->phys_addrs[info->idx++] = arbitrary_virt_to_machine(pte).maddr;
757 	return 0;
758 }
759 
xenbus_map_ring_pv(struct xenbus_device * dev,struct map_ring_valloc * info,grant_ref_t * gnt_refs,unsigned int nr_grefs,void ** vaddr)760 static int xenbus_map_ring_pv(struct xenbus_device *dev,
761 			      struct map_ring_valloc *info,
762 			      grant_ref_t *gnt_refs,
763 			      unsigned int nr_grefs,
764 			      void **vaddr)
765 {
766 	struct xenbus_map_node *node = info->node;
767 	struct vm_struct *area;
768 	bool leaked = false;
769 	int err = -ENOMEM;
770 
771 	area = get_vm_area(XEN_PAGE_SIZE * nr_grefs, VM_IOREMAP);
772 	if (!area)
773 		return -ENOMEM;
774 	if (apply_to_page_range(&init_mm, (unsigned long)area->addr,
775 				XEN_PAGE_SIZE * nr_grefs, map_ring_apply, info))
776 		goto failed;
777 	err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles,
778 				info, GNTMAP_host_map | GNTMAP_contains_pte,
779 				&leaked);
780 	if (err)
781 		goto failed;
782 
783 	node->nr_handles = nr_grefs;
784 	node->pv.area = area;
785 
786 	spin_lock(&xenbus_valloc_lock);
787 	list_add(&node->next, &xenbus_valloc_pages);
788 	spin_unlock(&xenbus_valloc_lock);
789 
790 	*vaddr = area->addr;
791 	info->node = NULL;
792 
793 	return 0;
794 
795 failed:
796 	if (!leaked)
797 		free_vm_area(area);
798 	else
799 		pr_alert("leaking VM area %p size %u page(s)", area, nr_grefs);
800 
801 	return err;
802 }
803 
xenbus_unmap_ring_pv(struct xenbus_device * dev,void * vaddr)804 static int xenbus_unmap_ring_pv(struct xenbus_device *dev, void *vaddr)
805 {
806 	struct xenbus_map_node *node;
807 	struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
808 	unsigned int level;
809 	int i;
810 	bool leaked = false;
811 	int err;
812 
813 	spin_lock(&xenbus_valloc_lock);
814 	list_for_each_entry(node, &xenbus_valloc_pages, next) {
815 		if (node->pv.area->addr == vaddr) {
816 			list_del(&node->next);
817 			goto found;
818 		}
819 	}
820 	node = NULL;
821  found:
822 	spin_unlock(&xenbus_valloc_lock);
823 
824 	if (!node) {
825 		xenbus_dev_error(dev, -ENOENT,
826 				 "can't find mapped virtual address %p", vaddr);
827 		return GNTST_bad_virt_addr;
828 	}
829 
830 	for (i = 0; i < node->nr_handles; i++) {
831 		unsigned long addr;
832 
833 		memset(&unmap[i], 0, sizeof(unmap[i]));
834 		addr = (unsigned long)vaddr + (XEN_PAGE_SIZE * i);
835 		unmap[i].host_addr = arbitrary_virt_to_machine(
836 			lookup_address(addr, &level)).maddr;
837 		unmap[i].dev_bus_addr = 0;
838 		unmap[i].handle = node->handles[i];
839 	}
840 
841 	BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i));
842 
843 	err = GNTST_okay;
844 	leaked = false;
845 	for (i = 0; i < node->nr_handles; i++) {
846 		if (unmap[i].status != GNTST_okay) {
847 			leaked = true;
848 			xenbus_dev_error(dev, unmap[i].status,
849 					 "unmapping page at handle %d error %d",
850 					 node->handles[i], unmap[i].status);
851 			err = unmap[i].status;
852 			break;
853 		}
854 	}
855 
856 	if (!leaked)
857 		free_vm_area(node->pv.area);
858 	else
859 		pr_alert("leaking VM area %p size %u page(s)",
860 			 node->pv.area, node->nr_handles);
861 
862 	kfree(node);
863 	return err;
864 }
865 
866 static const struct xenbus_ring_ops ring_ops_pv = {
867 	.map = xenbus_map_ring_pv,
868 	.unmap = xenbus_unmap_ring_pv,
869 };
870 #endif
871 
872 struct unmap_ring_hvm
873 {
874 	unsigned int idx;
875 	unsigned long addrs[XENBUS_MAX_RING_GRANTS];
876 };
877 
xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,unsigned int goffset,unsigned int len,void * data)878 static void xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,
879 					      unsigned int goffset,
880 					      unsigned int len,
881 					      void *data)
882 {
883 	struct unmap_ring_hvm *info = data;
884 
885 	info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn);
886 
887 	info->idx++;
888 }
889 
xenbus_unmap_ring_hvm(struct xenbus_device * dev,void * vaddr)890 static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)
891 {
892 	int rv;
893 	struct xenbus_map_node *node;
894 	void *addr;
895 	struct unmap_ring_hvm info = {
896 		.idx = 0,
897 	};
898 	unsigned int nr_pages;
899 
900 	spin_lock(&xenbus_valloc_lock);
901 	list_for_each_entry(node, &xenbus_valloc_pages, next) {
902 		addr = node->hvm.addr;
903 		if (addr == vaddr) {
904 			list_del(&node->next);
905 			goto found;
906 		}
907 	}
908 	node = addr = NULL;
909  found:
910 	spin_unlock(&xenbus_valloc_lock);
911 
912 	if (!node) {
913 		xenbus_dev_error(dev, -ENOENT,
914 				 "can't find mapped virtual address %p", vaddr);
915 		return GNTST_bad_virt_addr;
916 	}
917 
918 	nr_pages = XENBUS_PAGES(node->nr_handles);
919 
920 	gnttab_foreach_grant(node->hvm.pages, node->nr_handles,
921 			     xenbus_unmap_ring_setup_grant_hvm,
922 			     &info);
923 
924 	rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
925 			       info.addrs);
926 	if (!rv) {
927 		vunmap(vaddr);
928 		xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
929 	}
930 	else
931 		WARN(1, "Leaking %p, size %u page(s)\n", vaddr, nr_pages);
932 
933 	kfree(node);
934 	return rv;
935 }
936 
937 /**
938  * xenbus_read_driver_state - read state from a store path
939  * @dev: xenbus device pointer
940  * @path: path for driver
941  *
942  * Returns: the state of the driver rooted at the given store path, or
943  * XenbusStateUnknown if no state can be read.
944  */
xenbus_read_driver_state(const struct xenbus_device * dev,const char * path)945 enum xenbus_state xenbus_read_driver_state(const struct xenbus_device *dev,
946 					   const char *path)
947 {
948 	enum xenbus_state result;
949 
950 	if (dev && dev->vanished)
951 		return XenbusStateUnknown;
952 
953 	int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
954 	if (err)
955 		result = XenbusStateUnknown;
956 
957 	return result;
958 }
959 EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
960 
961 static const struct xenbus_ring_ops ring_ops_hvm = {
962 	.map = xenbus_map_ring_hvm,
963 	.unmap = xenbus_unmap_ring_hvm,
964 };
965 
xenbus_ring_ops_init(void)966 void __init xenbus_ring_ops_init(void)
967 {
968 #ifdef CONFIG_XEN_PV
969 	if (xen_pv_domain())
970 		ring_ops = &ring_ops_pv;
971 	else
972 #endif
973 		ring_ops = &ring_ops_hvm;
974 }
975