Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 95774
b: refs/heads/master
c: 0691663
h: refs/heads/master
v: v3
  • Loading branch information
Kay Sievers authored and Greg Kroah-Hartman committed May 2, 2008
1 parent 5eafeac commit d6dd17e
Show file tree
Hide file tree
Showing 33 changed files with 1,223 additions and 520 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: 3482a6f1d1447b618d37049529cf36a8dc3bd3e3
refs/heads/master: 06916639e2fed9ee475efef2747a1b7429f8fe76
62 changes: 21 additions & 41 deletions trunk/Documentation/lguest/lguest.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,6 @@ struct device
/* Any queues attached to this device */
struct virtqueue *vq;

/* Handle status being finalized (ie. feature bits stable). */
void (*ready)(struct device *me);

/* Device-specific data. */
void *priv;
};
Expand Down Expand Up @@ -928,40 +925,24 @@ static void enable_fd(int fd, struct virtqueue *vq)
write(waker_fd, &vq->dev->fd, sizeof(vq->dev->fd));
}

/* When the Guest tells us they updated the status field, we handle it. */
static void update_device_status(struct device *dev)
/* When the Guest asks us to reset a device, it's is fairly easy. */
static void reset_device(struct device *dev)
{
struct virtqueue *vq;

/* This is a reset. */
if (dev->desc->status == 0) {
verbose("Resetting device %s\n", dev->name);
verbose("Resetting device %s\n", dev->name);
/* Clear the status. */
dev->desc->status = 0;

/* Clear any features they've acked. */
memset(get_feature_bits(dev) + dev->desc->feature_len, 0,
dev->desc->feature_len);
/* Clear any features they've acked. */
memset(get_feature_bits(dev) + dev->desc->feature_len, 0,
dev->desc->feature_len);

/* Zero out the virtqueues. */
for (vq = dev->vq; vq; vq = vq->next) {
memset(vq->vring.desc, 0,
vring_size(vq->config.num, getpagesize()));
vq->last_avail_idx = 0;
}
} else if (dev->desc->status & VIRTIO_CONFIG_S_FAILED) {
warnx("Device %s configuration FAILED", dev->name);
} else if (dev->desc->status & VIRTIO_CONFIG_S_DRIVER_OK) {
unsigned int i;

verbose("Device %s OK: offered", dev->name);
for (i = 0; i < dev->desc->feature_len; i++)
verbose(" %08x", get_feature_bits(dev)[i]);
verbose(", accepted");
for (i = 0; i < dev->desc->feature_len; i++)
verbose(" %08x", get_feature_bits(dev)
[dev->desc->feature_len+i]);

if (dev->ready)
dev->ready(dev);
/* Zero out the virtqueues. */
for (vq = dev->vq; vq; vq = vq->next) {
memset(vq->vring.desc, 0,
vring_size(vq->config.num, getpagesize()));
vq->last_avail_idx = 0;
}
}

Expand All @@ -973,9 +954,9 @@ static void handle_output(int fd, unsigned long addr)

/* Check each device and virtqueue. */
for (i = devices.dev; i; i = i->next) {
/* Notifications to device descriptors update device status. */
/* Notifications to device descriptors reset the device. */
if (from_guest_phys(addr) == i->desc) {
update_device_status(i);
reset_device(i);
return;
}

Expand Down Expand Up @@ -1189,7 +1170,6 @@ static struct device *new_device(const char *name, u16 type, int fd,
dev->handle_input = handle_input;
dev->name = name;
dev->vq = NULL;
dev->ready = NULL;

/* Append to device list. Prepending to a single-linked list is
* easier, but the user expects the devices to be arranged on the bus
Expand Down Expand Up @@ -1418,7 +1398,7 @@ static bool service_io(struct device *dev)
struct vblk_info *vblk = dev->priv;
unsigned int head, out_num, in_num, wlen;
int ret;
u8 *in;
struct virtio_blk_inhdr *in;
struct virtio_blk_outhdr *out;
struct iovec iov[dev->vq->vring.num];
off64_t off;
Expand All @@ -1436,7 +1416,7 @@ static bool service_io(struct device *dev)
head, out_num, in_num);

out = convert(&iov[0], struct virtio_blk_outhdr);
in = convert(&iov[out_num+in_num-1], u8);
in = convert(&iov[out_num+in_num-1], struct virtio_blk_inhdr);
off = out->sector * 512;

/* The block device implements "barriers", where the Guest indicates
Expand All @@ -1450,7 +1430,7 @@ static bool service_io(struct device *dev)
* It'd be nice if we supported eject, for example, but we don't. */
if (out->type & VIRTIO_BLK_T_SCSI_CMD) {
fprintf(stderr, "Scsi commands unsupported\n");
*in = VIRTIO_BLK_S_UNSUPP;
in->status = VIRTIO_BLK_S_UNSUPP;
wlen = sizeof(*in);
} else if (out->type & VIRTIO_BLK_T_OUT) {
/* Write */
Expand All @@ -1473,7 +1453,7 @@ static bool service_io(struct device *dev)
errx(1, "Write past end %llu+%u", off, ret);
}
wlen = sizeof(*in);
*in = (ret >= 0 ? VIRTIO_BLK_S_OK : VIRTIO_BLK_S_IOERR);
in->status = (ret >= 0 ? VIRTIO_BLK_S_OK : VIRTIO_BLK_S_IOERR);
} else {
/* Read */

Expand All @@ -1486,10 +1466,10 @@ static bool service_io(struct device *dev)
verbose("READ from sector %llu: %i\n", out->sector, ret);
if (ret >= 0) {
wlen = sizeof(*in) + ret;
*in = VIRTIO_BLK_S_OK;
in->status = VIRTIO_BLK_S_OK;
} else {
wlen = sizeof(*in);
*in = VIRTIO_BLK_S_IOERR;
in->status = VIRTIO_BLK_S_IOERR;
}
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/ia64/ia32/ia32_signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ sys32_sigsuspend (int history0, int history1, old_sigset_t mask)

current->state = TASK_INTERRUPTIBLE;
schedule();
set_restore_sigmask();
set_thread_flag(TIF_RESTORE_SIGMASK);
return -ERESTARTNOHAND;
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/ia64/kernel/acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -966,7 +966,7 @@ acpi_map_iosapics (void)
fs_initcall(acpi_map_iosapics);
#endif /* CONFIG_ACPI_NUMA */

int __ref acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
{
int err;

Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/ia64/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,10 @@ void fixup_irqs(void)
{
unsigned int irq;
extern void ia64_process_pending_intr(void);
extern void ia64_disable_timer(void);
extern volatile int time_keeper_id;

/* Mask ITV to disable timer */
ia64_set_itv(1 << 16);
ia64_disable_timer();

/*
* Find a new timesync master
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/ia64/kernel/palinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,7 @@ static int __cpuinit palinfo_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}

static struct notifier_block __refdata palinfo_cpu_notifier =
static struct notifier_block palinfo_cpu_notifier __cpuinitdata =
{
.notifier_call = palinfo_cpu_callback,
.priority = 0,
Expand Down
Loading

0 comments on commit d6dd17e

Please sign in to comment.