tunnels: fix netns vs proto registration ordering
[safe/jmp/linux-2.6] / drivers / lguest / lguest_device.c
1 /*P:050
2  * Lguest guests use a very simple method to describe devices.  It's a
3  * series of device descriptors contained just above the top of normal Guest
4  * memory.
5  *
6  * We use the standard "virtio" device infrastructure, which provides us with a
7  * console, a network and a block driver.  Each one expects some configuration
8  * information and a "virtqueue" or two to send and receive data.
9 :*/
10 #include <linux/init.h>
11 #include <linux/bootmem.h>
12 #include <linux/lguest_launcher.h>
13 #include <linux/virtio.h>
14 #include <linux/virtio_config.h>
15 #include <linux/interrupt.h>
16 #include <linux/virtio_ring.h>
17 #include <linux/err.h>
18 #include <asm/io.h>
19 #include <asm/paravirt.h>
20 #include <asm/lguest_hcall.h>
21
22 /* The pointer to our (page) of device descriptions. */
23 static void *lguest_devices;
24
25 /*
26  * For Guests, device memory can be used as normal memory, so we cast away the
27  * __iomem to quieten sparse.
28  */
29 static inline void *lguest_map(unsigned long phys_addr, unsigned long pages)
30 {
31         return (__force void *)ioremap_cache(phys_addr, PAGE_SIZE*pages);
32 }
33
34 static inline void lguest_unmap(void *addr)
35 {
36         iounmap((__force void __iomem *)addr);
37 }
38
39 /*D:100
40  * Each lguest device is just a virtio device plus a pointer to its entry
41  * in the lguest_devices page.
42  */
43 struct lguest_device {
44         struct virtio_device vdev;
45
46         /* The entry in the lguest_devices page for this device. */
47         struct lguest_device_desc *desc;
48 };
49
50 /*
51  * Since the virtio infrastructure hands us a pointer to the virtio_device all
52  * the time, it helps to have a curt macro to get a pointer to the struct
53  * lguest_device it's enclosed in.
54  */
55 #define to_lgdev(vd) container_of(vd, struct lguest_device, vdev)
56
57 /*D:130
58  * Device configurations
59  *
60  * The configuration information for a device consists of one or more
61  * virtqueues, a feature bitmap, and some configuration bytes.  The
62  * configuration bytes don't really matter to us: the Launcher sets them up, and
63  * the driver will look at them during setup.
64  *
65  * A convenient routine to return the device's virtqueue config array:
66  * immediately after the descriptor.
67  */
68 static struct lguest_vqconfig *lg_vq(const struct lguest_device_desc *desc)
69 {
70         return (void *)(desc + 1);
71 }
72
73 /* The features come immediately after the virtqueues. */
74 static u8 *lg_features(const struct lguest_device_desc *desc)
75 {
76         return (void *)(lg_vq(desc) + desc->num_vq);
77 }
78
79 /* The config space comes after the two feature bitmasks. */
80 static u8 *lg_config(const struct lguest_device_desc *desc)
81 {
82         return lg_features(desc) + desc->feature_len * 2;
83 }
84
85 /* The total size of the config page used by this device (incl. desc) */
86 static unsigned desc_size(const struct lguest_device_desc *desc)
87 {
88         return sizeof(*desc)
89                 + desc->num_vq * sizeof(struct lguest_vqconfig)
90                 + desc->feature_len * 2
91                 + desc->config_len;
92 }
93
94 /* This gets the device's feature bits. */
95 static u32 lg_get_features(struct virtio_device *vdev)
96 {
97         unsigned int i;
98         u32 features = 0;
99         struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
100         u8 *in_features = lg_features(desc);
101
102         /* We do this the slow but generic way. */
103         for (i = 0; i < min(desc->feature_len * 8, 32); i++)
104                 if (in_features[i / 8] & (1 << (i % 8)))
105                         features |= (1 << i);
106
107         return features;
108 }
109
110 /*
111  * The virtio core takes the features the Host offers, and copies the ones
112  * supported by the driver into the vdev->features array.  Once that's all
113  * sorted out, this routine is called so we can tell the Host which features we
114  * understand and accept.
115  */
116 static void lg_finalize_features(struct virtio_device *vdev)
117 {
118         unsigned int i, bits;
119         struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
120         /* Second half of bitmap is features we accept. */
121         u8 *out_features = lg_features(desc) + desc->feature_len;
122
123         /* Give virtio_ring a chance to accept features. */
124         vring_transport_features(vdev);
125
126         /*
127          * The vdev->feature array is a Linux bitmask: this isn't the same as a
128          * the simple array of bits used by lguest devices for features.  So we
129          * do this slow, manual conversion which is completely general.
130          */
131         memset(out_features, 0, desc->feature_len);
132         bits = min_t(unsigned, desc->feature_len, sizeof(vdev->features)) * 8;
133         for (i = 0; i < bits; i++) {
134                 if (test_bit(i, vdev->features))
135                         out_features[i / 8] |= (1 << (i % 8));
136         }
137 }
138
139 /* Once they've found a field, getting a copy of it is easy. */
140 static void lg_get(struct virtio_device *vdev, unsigned int offset,
141                    void *buf, unsigned len)
142 {
143         struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
144
145         /* Check they didn't ask for more than the length of the config! */
146         BUG_ON(offset + len > desc->config_len);
147         memcpy(buf, lg_config(desc) + offset, len);
148 }
149
150 /* Setting the contents is also trivial. */
151 static void lg_set(struct virtio_device *vdev, unsigned int offset,
152                    const void *buf, unsigned len)
153 {
154         struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
155
156         /* Check they didn't ask for more than the length of the config! */
157         BUG_ON(offset + len > desc->config_len);
158         memcpy(lg_config(desc) + offset, buf, len);
159 }
160
161 /*
162  * The operations to get and set the status word just access the status field
163  * of the device descriptor.
164  */
165 static u8 lg_get_status(struct virtio_device *vdev)
166 {
167         return to_lgdev(vdev)->desc->status;
168 }
169
170 /*
171  * To notify on status updates, we (ab)use the NOTIFY hypercall, with the
172  * descriptor address of the device.  A zero status means "reset".
173  */
174 static void set_status(struct virtio_device *vdev, u8 status)
175 {
176         unsigned long offset = (void *)to_lgdev(vdev)->desc - lguest_devices;
177
178         /* We set the status. */
179         to_lgdev(vdev)->desc->status = status;
180         kvm_hypercall1(LHCALL_NOTIFY, (max_pfn << PAGE_SHIFT) + offset);
181 }
182
183 static void lg_set_status(struct virtio_device *vdev, u8 status)
184 {
185         BUG_ON(!status);
186         set_status(vdev, status);
187 }
188
189 static void lg_reset(struct virtio_device *vdev)
190 {
191         set_status(vdev, 0);
192 }
193
194 /*
195  * Virtqueues
196  *
197  * The other piece of infrastructure virtio needs is a "virtqueue": a way of
198  * the Guest device registering buffers for the other side to read from or
199  * write into (ie. send and receive buffers).  Each device can have multiple
200  * virtqueues: for example the console driver uses one queue for sending and
201  * another for receiving.
202  *
203  * Fortunately for us, a very fast shared-memory-plus-descriptors virtqueue
204  * already exists in virtio_ring.c.  We just need to connect it up.
205  *
206  * We start with the information we need to keep about each virtqueue.
207  */
208
209 /*D:140 This is the information we remember about each virtqueue. */
210 struct lguest_vq_info {
211         /* A copy of the information contained in the device config. */
212         struct lguest_vqconfig config;
213
214         /* The address where we mapped the virtio ring, so we can unmap it. */
215         void *pages;
216 };
217
218 /*
219  * When the virtio_ring code wants to prod the Host, it calls us here and we
220  * make a hypercall.  We hand the physical address of the virtqueue so the Host
221  * knows which virtqueue we're talking about.
222  */
223 static void lg_notify(struct virtqueue *vq)
224 {
225         /*
226          * We store our virtqueue information in the "priv" pointer of the
227          * virtqueue structure.
228          */
229         struct lguest_vq_info *lvq = vq->priv;
230
231         kvm_hypercall1(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT);
232 }
233
234 /* An extern declaration inside a C file is bad form.  Don't do it. */
235 extern void lguest_setup_irq(unsigned int irq);
236
237 /*
238  * This routine finds the Nth virtqueue described in the configuration of
239  * this device and sets it up.
240  *
241  * This is kind of an ugly duckling.  It'd be nicer to have a standard
242  * representation of a virtqueue in the configuration space, but it seems that
243  * everyone wants to do it differently.  The KVM coders want the Guest to
244  * allocate its own pages and tell the Host where they are, but for lguest it's
245  * simpler for the Host to simply tell us where the pages are.
246  */
247 static struct virtqueue *lg_find_vq(struct virtio_device *vdev,
248                                     unsigned index,
249                                     void (*callback)(struct virtqueue *vq),
250                                     const char *name)
251 {
252         struct lguest_device *ldev = to_lgdev(vdev);
253         struct lguest_vq_info *lvq;
254         struct virtqueue *vq;
255         int err;
256
257         /* We must have this many virtqueues. */
258         if (index >= ldev->desc->num_vq)
259                 return ERR_PTR(-ENOENT);
260
261         lvq = kmalloc(sizeof(*lvq), GFP_KERNEL);
262         if (!lvq)
263                 return ERR_PTR(-ENOMEM);
264
265         /*
266          * Make a copy of the "struct lguest_vqconfig" entry, which sits after
267          * the descriptor.  We need a copy because the config space might not
268          * be aligned correctly.
269          */
270         memcpy(&lvq->config, lg_vq(ldev->desc)+index, sizeof(lvq->config));
271
272         printk("Mapping virtqueue %i addr %lx\n", index,
273                (unsigned long)lvq->config.pfn << PAGE_SHIFT);
274         /* Figure out how many pages the ring will take, and map that memory */
275         lvq->pages = lguest_map((unsigned long)lvq->config.pfn << PAGE_SHIFT,
276                                 DIV_ROUND_UP(vring_size(lvq->config.num,
277                                                         LGUEST_VRING_ALIGN),
278                                              PAGE_SIZE));
279         if (!lvq->pages) {
280                 err = -ENOMEM;
281                 goto free_lvq;
282         }
283
284         /*
285          * OK, tell virtio_ring.c to set up a virtqueue now we know its size
286          * and we've got a pointer to its pages.
287          */
288         vq = vring_new_virtqueue(lvq->config.num, LGUEST_VRING_ALIGN,
289                                  vdev, lvq->pages, lg_notify, callback, name);
290         if (!vq) {
291                 err = -ENOMEM;
292                 goto unmap;
293         }
294
295         /* Make sure the interrupt is allocated. */
296         lguest_setup_irq(lvq->config.irq);
297
298         /*
299          * Tell the interrupt for this virtqueue to go to the virtio_ring
300          * interrupt handler.
301          *
302          * FIXME: We used to have a flag for the Host to tell us we could use
303          * the interrupt as a source of randomness: it'd be nice to have that
304          * back.
305          */
306         err = request_irq(lvq->config.irq, vring_interrupt, IRQF_SHARED,
307                           dev_name(&vdev->dev), vq);
308         if (err)
309                 goto destroy_vring;
310
311         /*
312          * Last of all we hook up our 'struct lguest_vq_info" to the
313          * virtqueue's priv pointer.
314          */
315         vq->priv = lvq;
316         return vq;
317
318 destroy_vring:
319         vring_del_virtqueue(vq);
320 unmap:
321         lguest_unmap(lvq->pages);
322 free_lvq:
323         kfree(lvq);
324         return ERR_PTR(err);
325 }
326 /*:*/
327
328 /* Cleaning up a virtqueue is easy */
329 static void lg_del_vq(struct virtqueue *vq)
330 {
331         struct lguest_vq_info *lvq = vq->priv;
332
333         /* Release the interrupt */
334         free_irq(lvq->config.irq, vq);
335         /* Tell virtio_ring.c to free the virtqueue. */
336         vring_del_virtqueue(vq);
337         /* Unmap the pages containing the ring. */
338         lguest_unmap(lvq->pages);
339         /* Free our own queue information. */
340         kfree(lvq);
341 }
342
343 static void lg_del_vqs(struct virtio_device *vdev)
344 {
345         struct virtqueue *vq, *n;
346
347         list_for_each_entry_safe(vq, n, &vdev->vqs, list)
348                 lg_del_vq(vq);
349 }
350
351 static int lg_find_vqs(struct virtio_device *vdev, unsigned nvqs,
352                        struct virtqueue *vqs[],
353                        vq_callback_t *callbacks[],
354                        const char *names[])
355 {
356         struct lguest_device *ldev = to_lgdev(vdev);
357         int i;
358
359         /* We must have this many virtqueues. */
360         if (nvqs > ldev->desc->num_vq)
361                 return -ENOENT;
362
363         for (i = 0; i < nvqs; ++i) {
364                 vqs[i] = lg_find_vq(vdev, i, callbacks[i], names[i]);
365                 if (IS_ERR(vqs[i]))
366                         goto error;
367         }
368         return 0;
369
370 error:
371         lg_del_vqs(vdev);
372         return PTR_ERR(vqs[i]);
373 }
374
375 /* The ops structure which hooks everything together. */
376 static struct virtio_config_ops lguest_config_ops = {
377         .get_features = lg_get_features,
378         .finalize_features = lg_finalize_features,
379         .get = lg_get,
380         .set = lg_set,
381         .get_status = lg_get_status,
382         .set_status = lg_set_status,
383         .reset = lg_reset,
384         .find_vqs = lg_find_vqs,
385         .del_vqs = lg_del_vqs,
386 };
387
388 /*
389  * The root device for the lguest virtio devices.  This makes them appear as
390  * /sys/devices/lguest/0,1,2 not /sys/devices/0,1,2.
391  */
392 static struct device *lguest_root;
393
394 /*D:120
395  * This is the core of the lguest bus: actually adding a new device.
396  * It's a separate function because it's neater that way, and because an
397  * earlier version of the code supported hotplug and unplug.  They were removed
398  * early on because they were never used.
399  *
400  * As Andrew Tridgell says, "Untested code is buggy code".
401  *
402  * It's worth reading this carefully: we start with a pointer to the new device
403  * descriptor in the "lguest_devices" page, and the offset into the device
404  * descriptor page so we can uniquely identify it if things go badly wrong.
405  */
406 static void add_lguest_device(struct lguest_device_desc *d,
407                               unsigned int offset)
408 {
409         struct lguest_device *ldev;
410
411         /* Start with zeroed memory; Linux's device layer counts on it. */
412         ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
413         if (!ldev) {
414                 printk(KERN_EMERG "Cannot allocate lguest dev %u type %u\n",
415                        offset, d->type);
416                 return;
417         }
418
419         /* This devices' parent is the lguest/ dir. */
420         ldev->vdev.dev.parent = lguest_root;
421         /*
422          * The device type comes straight from the descriptor.  There's also a
423          * device vendor field in the virtio_device struct, which we leave as
424          * 0.
425          */
426         ldev->vdev.id.device = d->type;
427         /*
428          * We have a simple set of routines for querying the device's
429          * configuration information and setting its status.
430          */
431         ldev->vdev.config = &lguest_config_ops;
432         /* And we remember the device's descriptor for lguest_config_ops. */
433         ldev->desc = d;
434
435         /*
436          * register_virtio_device() sets up the generic fields for the struct
437          * virtio_device and calls device_register().  This makes the bus
438          * infrastructure look for a matching driver.
439          */
440         if (register_virtio_device(&ldev->vdev) != 0) {
441                 printk(KERN_ERR "Failed to register lguest dev %u type %u\n",
442                        offset, d->type);
443                 kfree(ldev);
444         }
445 }
446
447 /*D:110
448  * scan_devices() simply iterates through the device page.  The type 0 is
449  * reserved to mean "end of devices".
450  */
451 static void scan_devices(void)
452 {
453         unsigned int i;
454         struct lguest_device_desc *d;
455
456         /* We start at the page beginning, and skip over each entry. */
457         for (i = 0; i < PAGE_SIZE; i += desc_size(d)) {
458                 d = lguest_devices + i;
459
460                 /* Once we hit a zero, stop. */
461                 if (d->type == 0)
462                         break;
463
464                 printk("Device at %i has size %u\n", i, desc_size(d));
465                 add_lguest_device(d, i);
466         }
467 }
468
469 /*D:105
470  * Fairly early in boot, lguest_devices_init() is called to set up the
471  * lguest device infrastructure.  We check that we are a Guest by checking
472  * pv_info.name: there are other ways of checking, but this seems most
473  * obvious to me.
474  *
475  * So we can access the "struct lguest_device_desc"s easily, we map that memory
476  * and store the pointer in the global "lguest_devices".  Then we register a
477  * root device from which all our devices will hang (this seems to be the
478  * correct sysfs incantation).
479  *
480  * Finally we call scan_devices() which adds all the devices found in the
481  * lguest_devices page.
482  */
483 static int __init lguest_devices_init(void)
484 {
485         if (strcmp(pv_info.name, "lguest") != 0)
486                 return 0;
487
488         lguest_root = root_device_register("lguest");
489         if (IS_ERR(lguest_root))
490                 panic("Could not register lguest root");
491
492         /* Devices are in a single page above top of "normal" mem */
493         lguest_devices = lguest_map(max_pfn<<PAGE_SHIFT, 1);
494
495         scan_devices();
496         return 0;
497 }
498 /* We do this after core stuff, but before the drivers. */
499 postcore_initcall(lguest_devices_init);
500
501 /*D:150
502  * At this point in the journey we used to now wade through the lguest
503  * devices themselves: net, block and console.  Since they're all now virtio
504  * devices rather than lguest-specific, I've decided to ignore them.  Mostly,
505  * they're kind of boring.  But this does mean you'll never experience the
506  * thrill of reading the forbidden love scene buried deep in the block driver.
507  *
508  * "make Launcher" beckons, where we answer questions like "Where do Guests
509  * come from?", and "What do you do when someone asks for optimization?".
510  */