Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 97517
b: refs/heads/master
c: b769f57
h: refs/heads/master
i:
  97515: e8178de
v: v3
  • Loading branch information
Rusty Russell committed May 30, 2008
1 parent 198f654 commit 3602d5b
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5610bd1524332fe7d651eb56cc780e32763a2ac3
refs/heads/master: b769f579081943f14e0ff03b7b0bd3a11cf14625
23 changes: 9 additions & 14 deletions trunk/drivers/lguest/lguest_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
/* The pointer to our (page) of device descriptions. */
static void *lguest_devices;

/* Unique numbering for lguest devices. */
static unsigned int dev_index;

/* For Guests, device memory can be used as normal memory, so we cast away the
* __iomem to quieten sparse. */
static inline void *lguest_map(unsigned long phys_addr, unsigned long pages)
Expand Down Expand Up @@ -325,27 +322,25 @@ static struct device lguest_root = {
* As Andrew Tridgell says, "Untested code is buggy code".
*
* It's worth reading this carefully: we start with a pointer to the new device
* descriptor in the "lguest_devices" page. */
static void add_lguest_device(struct lguest_device_desc *d)
* descriptor in the "lguest_devices" page, and the offset into the device
* descriptor page so we can uniquely identify it if things go badly wrong. */
static void add_lguest_device(struct lguest_device_desc *d,
unsigned int offset)
{
struct lguest_device *ldev;

/* Start with zeroed memory; Linux's device layer seems to count on
* it. */
ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
if (!ldev) {
printk(KERN_EMERG "Cannot allocate lguest dev %u\n",
dev_index++);
printk(KERN_EMERG "Cannot allocate lguest dev %u type %u\n",
offset, d->type);
return;
}

/* This devices' parent is the lguest/ dir. */
ldev->vdev.dev.parent = &lguest_root;
/* We have a unique device index thanks to the dev_index counter. */
ldev->vdev.index = dev_index++;
/* The device type comes straight from the descriptor. There's also a
* device vendor field in the virtio_device struct, which we leave as
* 0. */
ldev->vdev.id.device = d->type;
/* We have a simple set of routines for querying the device's
* configuration information and setting its status. */
Expand All @@ -357,8 +352,8 @@ static void add_lguest_device(struct lguest_device_desc *d)
* virtio_device and calls device_register(). This makes the bus
* infrastructure look for a matching driver. */
if (register_virtio_device(&ldev->vdev) != 0) {
printk(KERN_ERR "Failed to register lguest device %u\n",
ldev->vdev.index);
printk(KERN_ERR "Failed to register lguest dev %u type %u\n",
offset, d->type);
kfree(ldev);
}
}
Expand All @@ -379,7 +374,7 @@ static void scan_devices(void)
break;

printk("Device at %i has size %u\n", i, desc_size(d));
add_lguest_device(d);
add_lguest_device(d, i);
}
}

Expand Down
18 changes: 6 additions & 12 deletions trunk/drivers/s390/kvm/kvm_virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@
*/
static void *kvm_devices;

/*
* Unique numbering for kvm devices.
*/
static unsigned int dev_index;

struct kvm_device {
struct virtio_device vdev;
struct kvm_device_desc *desc;
Expand Down Expand Up @@ -250,26 +245,25 @@ static struct device kvm_root = {
* adds a new device and register it with virtio
* appropriate drivers are loaded by the device model
*/
static void add_kvm_device(struct kvm_device_desc *d)
static void add_kvm_device(struct kvm_device_desc *d, unsigned int offset)
{
struct kvm_device *kdev;

kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
if (!kdev) {
printk(KERN_EMERG "Cannot allocate kvm dev %u\n",
dev_index++);
printk(KERN_EMERG "Cannot allocate kvm dev %u type %u\n",
offset, d->type);
return;
}

kdev->vdev.dev.parent = &kvm_root;
kdev->vdev.index = dev_index++;
kdev->vdev.id.device = d->type;
kdev->vdev.config = &kvm_vq_configspace_ops;
kdev->desc = d;

if (register_virtio_device(&kdev->vdev) != 0) {
printk(KERN_ERR "Failed to register kvm device %u\n",
kdev->vdev.index);
printk(KERN_ERR "Failed to register kvm device %u type %u\n",
offset, d->type);
kfree(kdev);
}
}
Expand All @@ -289,7 +283,7 @@ static void scan_devices(void)
if (d->type == 0)
break;

add_kvm_device(d);
add_kvm_device(d, i);
}
}

Expand Down
6 changes: 6 additions & 0 deletions trunk/drivers/virtio/virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
#include <linux/spinlock.h>
#include <linux/virtio_config.h>

/* Unique numbering for virtio devices. */
static unsigned int dev_index;

static ssize_t device_show(struct device *_d,
struct device_attribute *attr, char *buf)
{
Expand Down Expand Up @@ -166,6 +169,9 @@ int register_virtio_device(struct virtio_device *dev)
int err;

dev->dev.bus = &virtio_bus;

/* Assign a unique device index and hence name. */
dev->index = dev_index++;
sprintf(dev->dev.bus_id, "virtio%u", dev->index);

/* We always start by resetting the device, in case a previous
Expand Down
6 changes: 0 additions & 6 deletions trunk/drivers/virtio/virtio_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,6 @@ static struct device virtio_pci_root = {
.bus_id = "virtio-pci",
};

/* Unique numbering for devices under the kvm root */
static unsigned int dev_index;

/* Convert a generic virtio device to our structure */
static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev)
{
Expand Down Expand Up @@ -325,9 +322,6 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev,
if (vp_dev == NULL)
return -ENOMEM;

vp_dev->vdev.index = dev_index;
dev_index++;

vp_dev->vdev.dev.parent = &virtio_pci_root;
vp_dev->vdev.config = &virtio_pci_config_ops;
vp_dev->pci_dev = pci_dev;
Expand Down

0 comments on commit 3602d5b

Please sign in to comment.