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