I added a printk in virtio_ring.c near the BUG_ON check and the vring.num value is zero. I can't understand why.
-Earlence On Sun, Jun 9, 2013 at 5:16 PM, Earlence Fernandes <earlencefe...@gmail.com>wrote: > This is the code for my probe function: > > static int virtsyscalldev_probe(struct virtio_device *vdev) > { > struct virtio_syscalldev *vsdd; > struct virtqueue *vqs[1]; > struct scatterlist sg[1]; > int err, nvqs; > vq_callback_t *callbacks[] = { fromhost_dosyscall }; > const char *names[] = { "dosyscall_q" }; > vdev->priv = vsdd = kmalloc(sizeof(*vsdd), GFP_KERNEL); > if(!vsdd) > { > err = -ENOMEM; > goto out; > } > vsdd->vdev = vdev; //cache the virtio_device > err = vdev->config->find_vqs(vdev, nvqs, vqs, callbacks, names); > if(err) > goto out_free_vsdd; > vsdd->input_q = vqs[0]; > /* > prime the input_q with a buffer so the hypervisor (host) can signal > us by placing data into it and inducing an interrupt > */ > sg_init_one(sg, vsdd->inbuff, sizeof(vsdd->inbuff)); > printk(KERN_INFO "buffer ready to prime3\n"); > if(virtqueue_add_buf(vsdd->input_q, sg, 0, 1, vsdd) < 0) > { > printk(KERN_ERR "OOOOOOOOOOOOPS\n"); > BUG(); > } > //buffer has been loaded in the vq, so now kick it > //and hence notify the hypervisor (host) > virtqueue_kick(vsdd->input_q); > return 0; > out_free_vsdd: > kfree(vsdd); > out: > return err; > } > > The syscalldev struct has a char buffer. > In the launcher, I created a single virtqueue like so: > > add_virtqueue(dev, VIRTQUEUE_NUM, syscall_toguest); > > I still get the BUG message. Any idea why? > > -Earlence > > > On Sat, Jun 8, 2013 at 11:38 PM, Earlence Fernandes < > earlencefe...@gmail.com> wrote: > >> I am trying to achieve only host->guest communication and so I've created >> a virtio driver for the guest kernel which calls virtio_add_buf_gfp with >> one inbuf and 0 outbufs. >> >> Whenever I boot the system, lguest crashes complaining of a kernel BUG. >> At the line specified in virtio_ring.c, I see the following: >> >> BUG_ON(out + in > vq->vring.num); >> >> From this, it seems to me that I need more vrings than buffers. >> >> So, how do I have a channel from the host launcher to the guest kernel >> with only one queue which is used to send data exclusively into the guest? >> >> I've been following virtio_balloon as an example. >> >> -Earlence >> > >
_______________________________________________ Lguest mailing list Lguest@lists.ozlabs.org https://lists.ozlabs.org/listinfo/lguest