ARM: s3c64xx: bring back notes from removed debug-macro.S
[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                 err = gnttab_grant_foreign_access(dev->otherend_id,
383                                                   virt_to_gfn(vaddr), 0);
384                 if (err < 0) {
385                         xenbus_dev_fatal(dev, err,
386                                          "granting access to ring page");
387                         goto fail;
388                 }
389                 grefs[i] = err;
390
391                 vaddr = vaddr + XEN_PAGE_SIZE;
392         }
393
394         return 0;
395
396 fail:
397         for (j = 0; j < i; j++)
398                 gnttab_end_foreign_access_ref(grefs[j], 0);
399         return err;
400 }
401 EXPORT_SYMBOL_GPL(xenbus_grant_ring);
402
403
404 /**
405  * Allocate an event channel for the given xenbus_device, assigning the newly
406  * created local port to *port.  Return 0 on success, or -errno on error.  On
407  * error, the device will switch to XenbusStateClosing, and the error will be
408  * saved in the store.
409  */
410 int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port)
411 {
412         struct evtchn_alloc_unbound alloc_unbound;
413         int err;
414
415         alloc_unbound.dom = DOMID_SELF;
416         alloc_unbound.remote_dom = dev->otherend_id;
417
418         err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
419                                           &alloc_unbound);
420         if (err)
421                 xenbus_dev_fatal(dev, err, "allocating event channel");
422         else
423                 *port = alloc_unbound.port;
424
425         return err;
426 }
427 EXPORT_SYMBOL_GPL(xenbus_alloc_evtchn);
428
429
430 /**
431  * Free an existing event channel. Returns 0 on success or -errno on error.
432  */
433 int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port)
434 {
435         struct evtchn_close close;
436         int err;
437
438         close.port = port;
439
440         err = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
441         if (err)
442                 xenbus_dev_error(dev, err, "freeing event channel %u", port);
443
444         return err;
445 }
446 EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
447
448
449 /**
450  * xenbus_map_ring_valloc
451  * @dev: xenbus device
452  * @gnt_refs: grant reference array
453  * @nr_grefs: number of grant references
454  * @vaddr: pointer to address to be filled out by mapping
455  *
456  * Map @nr_grefs pages of memory into this domain from another
457  * domain's grant table.  xenbus_map_ring_valloc allocates @nr_grefs
458  * pages of virtual address space, maps the pages to that address, and
459  * sets *vaddr to that address.  Returns 0 on success, and -errno on
460  * error. If an error is returned, device will switch to
461  * XenbusStateClosing and the error message will be saved in XenStore.
462  */
463 int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
464                            unsigned int nr_grefs, void **vaddr)
465 {
466         int err;
467         struct map_ring_valloc *info;
468
469         *vaddr = NULL;
470
471         if (nr_grefs > XENBUS_MAX_RING_GRANTS)
472                 return -EINVAL;
473
474         info = kzalloc(sizeof(*info), GFP_KERNEL);
475         if (!info)
476                 return -ENOMEM;
477
478         info->node = kzalloc(sizeof(*info->node), GFP_KERNEL);
479         if (!info->node)
480                 err = -ENOMEM;
481         else
482                 err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr);
483
484         kfree(info->node);
485         kfree(info);
486         return err;
487 }
488 EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
489
490 /* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
491  * long), e.g. 32-on-64.  Caller is responsible for preparing the
492  * right array to feed into this function */
493 static int __xenbus_map_ring(struct xenbus_device *dev,
494                              grant_ref_t *gnt_refs,
495                              unsigned int nr_grefs,
496                              grant_handle_t *handles,
497                              struct map_ring_valloc *info,
498                              unsigned int flags,
499                              bool *leaked)
500 {
501         int i, j;
502
503         if (nr_grefs > XENBUS_MAX_RING_GRANTS)
504                 return -EINVAL;
505
506         for (i = 0; i < nr_grefs; i++) {
507                 gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags,
508                                   gnt_refs[i], dev->otherend_id);
509                 handles[i] = INVALID_GRANT_HANDLE;
510         }
511
512         gnttab_batch_map(info->map, i);
513
514         for (i = 0; i < nr_grefs; i++) {
515                 if (info->map[i].status != GNTST_okay) {
516                         xenbus_dev_fatal(dev, info->map[i].status,
517                                          "mapping in shared page %d from domain %d",
518                                          gnt_refs[i], dev->otherend_id);
519                         goto fail;
520                 } else
521                         handles[i] = info->map[i].handle;
522         }
523
524         return 0;
525
526  fail:
527         for (i = j = 0; i < nr_grefs; i++) {
528                 if (handles[i] != INVALID_GRANT_HANDLE) {
529                         gnttab_set_unmap_op(&info->unmap[j],
530                                             info->phys_addrs[i],
531                                             GNTMAP_host_map, handles[i]);
532                         j++;
533                 }
534         }
535
536         if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j))
537                 BUG();
538
539         *leaked = false;
540         for (i = 0; i < j; i++) {
541                 if (info->unmap[i].status != GNTST_okay) {
542                         *leaked = true;
543                         break;
544                 }
545         }
546
547         return -ENOENT;
548 }
549
550 /**
551  * xenbus_unmap_ring
552  * @dev: xenbus device
553  * @handles: grant handle array
554  * @nr_handles: number of handles in the array
555  * @vaddrs: addresses to unmap
556  *
557  * Unmap memory in this domain that was imported from another domain.
558  * Returns 0 on success and returns GNTST_* on error
559  * (see xen/include/interface/grant_table.h).
560  */
561 static int xenbus_unmap_ring(struct xenbus_device *dev, grant_handle_t *handles,
562                              unsigned int nr_handles, unsigned long *vaddrs)
563 {
564         struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
565         int i;
566         int err;
567
568         if (nr_handles > XENBUS_MAX_RING_GRANTS)
569                 return -EINVAL;
570
571         for (i = 0; i < nr_handles; i++)
572                 gnttab_set_unmap_op(&unmap[i], vaddrs[i],
573                                     GNTMAP_host_map, handles[i]);
574
575         if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
576                 BUG();
577
578         err = GNTST_okay;
579         for (i = 0; i < nr_handles; i++) {
580                 if (unmap[i].status != GNTST_okay) {
581                         xenbus_dev_error(dev, unmap[i].status,
582                                          "unmapping page at handle %d error %d",
583                                          handles[i], unmap[i].status);
584                         err = unmap[i].status;
585                         break;
586                 }
587         }
588
589         return err;
590 }
591
592 static void xenbus_map_ring_setup_grant_hvm(unsigned long gfn,
593                                             unsigned int goffset,
594                                             unsigned int len,
595                                             void *data)
596 {
597         struct map_ring_valloc *info = data;
598         unsigned long vaddr = (unsigned long)gfn_to_virt(gfn);
599
600         info->phys_addrs[info->idx] = vaddr;
601         info->addrs[info->idx] = vaddr;
602
603         info->idx++;
604 }
605
606 static int xenbus_map_ring_hvm(struct xenbus_device *dev,
607                                struct map_ring_valloc *info,
608                                grant_ref_t *gnt_ref,
609                                unsigned int nr_grefs,
610                                void **vaddr)
611 {
612         struct xenbus_map_node *node = info->node;
613         int err;
614         void *addr;
615         bool leaked = false;
616         unsigned int nr_pages = XENBUS_PAGES(nr_grefs);
617
618         err = alloc_xenballooned_pages(nr_pages, node->hvm.pages);
619         if (err)
620                 goto out_err;
621
622         gnttab_foreach_grant(node->hvm.pages, nr_grefs,
623                              xenbus_map_ring_setup_grant_hvm,
624                              info);
625
626         err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles,
627                                 info, GNTMAP_host_map, &leaked);
628         node->nr_handles = nr_grefs;
629
630         if (err)
631                 goto out_free_ballooned_pages;
632
633         addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP,
634                     PAGE_KERNEL);
635         if (!addr) {
636                 err = -ENOMEM;
637                 goto out_xenbus_unmap_ring;
638         }
639
640         node->hvm.addr = addr;
641
642         spin_lock(&xenbus_valloc_lock);
643         list_add(&node->next, &xenbus_valloc_pages);
644         spin_unlock(&xenbus_valloc_lock);
645
646         *vaddr = addr;
647         info->node = NULL;
648
649         return 0;
650
651  out_xenbus_unmap_ring:
652         if (!leaked)
653                 xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs);
654         else
655                 pr_alert("leaking %p size %u page(s)",
656                          addr, nr_pages);
657  out_free_ballooned_pages:
658         if (!leaked)
659                 free_xenballooned_pages(nr_pages, node->hvm.pages);
660  out_err:
661         return err;
662 }
663
664 /**
665  * xenbus_unmap_ring_vfree
666  * @dev: xenbus device
667  * @vaddr: addr to unmap
668  *
669  * Based on Rusty Russell's skeleton driver's unmap_page.
670  * Unmap a page of memory in this domain that was imported from another domain.
671  * Use xenbus_unmap_ring_vfree if you mapped in your memory with
672  * xenbus_map_ring_valloc (it will free the virtual address space).
673  * Returns 0 on success and returns GNTST_* on error
674  * (see xen/include/interface/grant_table.h).
675  */
676 int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
677 {
678         return ring_ops->unmap(dev, vaddr);
679 }
680 EXPORT_SYMBOL_GPL(xenbus_unmap_ring_vfree);
681
682 #ifdef CONFIG_XEN_PV
683 static int xenbus_map_ring_pv(struct xenbus_device *dev,
684                               struct map_ring_valloc *info,
685                               grant_ref_t *gnt_refs,
686                               unsigned int nr_grefs,
687                               void **vaddr)
688 {
689         struct xenbus_map_node *node = info->node;
690         struct vm_struct *area;
691         int err = GNTST_okay;
692         int i;
693         bool leaked;
694
695         area = alloc_vm_area(XEN_PAGE_SIZE * nr_grefs, info->ptes);
696         if (!area)
697                 return -ENOMEM;
698
699         for (i = 0; i < nr_grefs; i++)
700                 info->phys_addrs[i] =
701                         arbitrary_virt_to_machine(info->ptes[i]).maddr;
702
703         err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles,
704                                 info, GNTMAP_host_map | GNTMAP_contains_pte,
705                                 &leaked);
706         if (err)
707                 goto failed;
708
709         node->nr_handles = nr_grefs;
710         node->pv.area = area;
711
712         spin_lock(&xenbus_valloc_lock);
713         list_add(&node->next, &xenbus_valloc_pages);
714         spin_unlock(&xenbus_valloc_lock);
715
716         *vaddr = area->addr;
717         info->node = NULL;
718
719         return 0;
720
721 failed:
722         if (!leaked)
723                 free_vm_area(area);
724         else
725                 pr_alert("leaking VM area %p size %u page(s)", area, nr_grefs);
726
727         return err;
728 }
729
730 static int xenbus_unmap_ring_pv(struct xenbus_device *dev, void *vaddr)
731 {
732         struct xenbus_map_node *node;
733         struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
734         unsigned int level;
735         int i;
736         bool leaked = false;
737         int err;
738
739         spin_lock(&xenbus_valloc_lock);
740         list_for_each_entry(node, &xenbus_valloc_pages, next) {
741                 if (node->pv.area->addr == vaddr) {
742                         list_del(&node->next);
743                         goto found;
744                 }
745         }
746         node = NULL;
747  found:
748         spin_unlock(&xenbus_valloc_lock);
749
750         if (!node) {
751                 xenbus_dev_error(dev, -ENOENT,
752                                  "can't find mapped virtual address %p", vaddr);
753                 return GNTST_bad_virt_addr;
754         }
755
756         for (i = 0; i < node->nr_handles; i++) {
757                 unsigned long addr;
758
759                 memset(&unmap[i], 0, sizeof(unmap[i]));
760                 addr = (unsigned long)vaddr + (XEN_PAGE_SIZE * i);
761                 unmap[i].host_addr = arbitrary_virt_to_machine(
762                         lookup_address(addr, &level)).maddr;
763                 unmap[i].dev_bus_addr = 0;
764                 unmap[i].handle = node->handles[i];
765         }
766
767         if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
768                 BUG();
769
770         err = GNTST_okay;
771         leaked = false;
772         for (i = 0; i < node->nr_handles; i++) {
773                 if (unmap[i].status != GNTST_okay) {
774                         leaked = true;
775                         xenbus_dev_error(dev, unmap[i].status,
776                                          "unmapping page at handle %d error %d",
777                                          node->handles[i], unmap[i].status);
778                         err = unmap[i].status;
779                         break;
780                 }
781         }
782
783         if (!leaked)
784                 free_vm_area(node->pv.area);
785         else
786                 pr_alert("leaking VM area %p size %u page(s)",
787                          node->pv.area, node->nr_handles);
788
789         kfree(node);
790         return err;
791 }
792
793 static const struct xenbus_ring_ops ring_ops_pv = {
794         .map = xenbus_map_ring_pv,
795         .unmap = xenbus_unmap_ring_pv,
796 };
797 #endif
798
799 struct unmap_ring_hvm
800 {
801         unsigned int idx;
802         unsigned long addrs[XENBUS_MAX_RING_GRANTS];
803 };
804
805 static void xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,
806                                               unsigned int goffset,
807                                               unsigned int len,
808                                               void *data)
809 {
810         struct unmap_ring_hvm *info = data;
811
812         info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn);
813
814         info->idx++;
815 }
816
817 static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)
818 {
819         int rv;
820         struct xenbus_map_node *node;
821         void *addr;
822         struct unmap_ring_hvm info = {
823                 .idx = 0,
824         };
825         unsigned int nr_pages;
826
827         spin_lock(&xenbus_valloc_lock);
828         list_for_each_entry(node, &xenbus_valloc_pages, next) {
829                 addr = node->hvm.addr;
830                 if (addr == vaddr) {
831                         list_del(&node->next);
832                         goto found;
833                 }
834         }
835         node = addr = NULL;
836  found:
837         spin_unlock(&xenbus_valloc_lock);
838
839         if (!node) {
840                 xenbus_dev_error(dev, -ENOENT,
841                                  "can't find mapped virtual address %p", vaddr);
842                 return GNTST_bad_virt_addr;
843         }
844
845         nr_pages = XENBUS_PAGES(node->nr_handles);
846
847         gnttab_foreach_grant(node->hvm.pages, node->nr_handles,
848                              xenbus_unmap_ring_setup_grant_hvm,
849                              &info);
850
851         rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
852                                info.addrs);
853         if (!rv) {
854                 vunmap(vaddr);
855                 free_xenballooned_pages(nr_pages, node->hvm.pages);
856         }
857         else
858                 WARN(1, "Leaking %p, size %u page(s)\n", vaddr, nr_pages);
859
860         kfree(node);
861         return rv;
862 }
863
864 /**
865  * xenbus_read_driver_state
866  * @path: path for driver
867  *
868  * Return the state of the driver rooted at the given store path, or
869  * XenbusStateUnknown if no state can be read.
870  */
871 enum xenbus_state xenbus_read_driver_state(const char *path)
872 {
873         enum xenbus_state result;
874         int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
875         if (err)
876                 result = XenbusStateUnknown;
877
878         return result;
879 }
880 EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
881
882 static const struct xenbus_ring_ops ring_ops_hvm = {
883         .map = xenbus_map_ring_hvm,
884         .unmap = xenbus_unmap_ring_hvm,
885 };
886
887 void __init xenbus_ring_ops_init(void)
888 {
889 #ifdef CONFIG_XEN_PV
890         if (!xen_feature(XENFEAT_auto_translated_physmap))
891                 ring_ops = &ring_ops_pv;
892         else
893 #endif
894                 ring_ops = &ring_ops_hvm;
895 }