Merge 3.13-rc4 into char-misc-next
We want these fixes in here.
This commit is contained in:
@@ -154,14 +154,14 @@ static void mic_reset_inform_host(struct virtio_device *vdev)
|
||||
{
|
||||
struct mic_vdev *mvdev = to_micvdev(vdev);
|
||||
struct mic_device_ctrl __iomem *dc = mvdev->dc;
|
||||
int retry = 100, i;
|
||||
int retry;
|
||||
|
||||
iowrite8(0, &dc->host_ack);
|
||||
iowrite8(1, &dc->vdev_reset);
|
||||
mic_send_intr(mvdev->mdev, mvdev->c2h_vdev_db);
|
||||
|
||||
/* Wait till host completes all card accesses and acks the reset */
|
||||
for (i = retry; i--;) {
|
||||
for (retry = 100; retry--;) {
|
||||
if (ioread8(&dc->host_ack))
|
||||
break;
|
||||
msleep(100);
|
||||
@@ -187,11 +187,12 @@ static void mic_reset(struct virtio_device *vdev)
|
||||
/*
|
||||
* The virtio_ring code calls this API when it wants to notify the Host.
|
||||
*/
|
||||
static void mic_notify(struct virtqueue *vq)
|
||||
static bool mic_notify(struct virtqueue *vq)
|
||||
{
|
||||
struct mic_vdev *mvdev = vq->priv;
|
||||
|
||||
mic_send_intr(mvdev->mdev, mvdev->c2h_vdev_db);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void mic_del_vq(struct virtqueue *vq, int n)
|
||||
@@ -247,17 +248,17 @@ static struct virtqueue *mic_find_vq(struct virtio_device *vdev,
|
||||
/* First assign the vring's allocated in host memory */
|
||||
vqconfig = mic_vq_config(mvdev->desc) + index;
|
||||
memcpy_fromio(&config, vqconfig, sizeof(config));
|
||||
_vr_size = vring_size(config.num, MIC_VIRTIO_RING_ALIGN);
|
||||
_vr_size = vring_size(le16_to_cpu(config.num), MIC_VIRTIO_RING_ALIGN);
|
||||
vr_size = PAGE_ALIGN(_vr_size + sizeof(struct _mic_vring_info));
|
||||
va = mic_card_map(mvdev->mdev, config.address, vr_size);
|
||||
va = mic_card_map(mvdev->mdev, le64_to_cpu(config.address), vr_size);
|
||||
if (!va)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
mvdev->vr[index] = va;
|
||||
memset_io(va, 0x0, _vr_size);
|
||||
vq = vring_new_virtqueue(index,
|
||||
config.num, MIC_VIRTIO_RING_ALIGN, vdev,
|
||||
false,
|
||||
va, mic_notify, callback, name);
|
||||
vq = vring_new_virtqueue(index, le16_to_cpu(config.num),
|
||||
MIC_VIRTIO_RING_ALIGN, vdev, false,
|
||||
(void __force *)va, mic_notify, callback,
|
||||
name);
|
||||
if (!vq) {
|
||||
err = -ENOMEM;
|
||||
goto unmap;
|
||||
@@ -272,7 +273,8 @@ static struct virtqueue *mic_find_vq(struct virtio_device *vdev,
|
||||
|
||||
/* Allocate and reassign used ring now */
|
||||
mvdev->used_size[index] = PAGE_ALIGN(sizeof(__u16) * 3 +
|
||||
sizeof(struct vring_used_elem) * config.num);
|
||||
sizeof(struct vring_used_elem) *
|
||||
le16_to_cpu(config.num));
|
||||
used = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
|
||||
get_order(mvdev->used_size[index]));
|
||||
if (!used) {
|
||||
@@ -309,7 +311,7 @@ static int mic_find_vqs(struct virtio_device *vdev, unsigned nvqs,
|
||||
{
|
||||
struct mic_vdev *mvdev = to_micvdev(vdev);
|
||||
struct mic_device_ctrl __iomem *dc = mvdev->dc;
|
||||
int i, err, retry = 100;
|
||||
int i, err, retry;
|
||||
|
||||
/* We must have this many virtqueues. */
|
||||
if (nvqs > ioread8(&mvdev->desc->num_vq))
|
||||
@@ -331,7 +333,7 @@ static int mic_find_vqs(struct virtio_device *vdev, unsigned nvqs,
|
||||
* rings have been re-assigned.
|
||||
*/
|
||||
mic_send_intr(mvdev->mdev, mvdev->c2h_vdev_db);
|
||||
for (i = retry; i--;) {
|
||||
for (retry = 100; retry--;) {
|
||||
if (!ioread8(&dc->used_address_updated))
|
||||
break;
|
||||
msleep(100);
|
||||
@@ -519,8 +521,8 @@ static void mic_scan_devices(struct mic_driver *mdrv, bool remove)
|
||||
struct device *dev;
|
||||
int ret;
|
||||
|
||||
for (i = mic_aligned_size(struct mic_bootparam);
|
||||
i < MIC_DP_SIZE; i += mic_total_desc_size(d)) {
|
||||
for (i = sizeof(struct mic_bootparam); i < MIC_DP_SIZE;
|
||||
i += mic_total_desc_size(d)) {
|
||||
d = mdrv->dp + i;
|
||||
dc = (void __iomem *)d + mic_aligned_desc_size(d);
|
||||
/*
|
||||
@@ -539,7 +541,8 @@ static void mic_scan_devices(struct mic_driver *mdrv, bool remove)
|
||||
continue;
|
||||
|
||||
/* device already exists */
|
||||
dev = device_find_child(mdrv->dev, d, mic_match_desc);
|
||||
dev = device_find_child(mdrv->dev, (void __force *)d,
|
||||
mic_match_desc);
|
||||
if (dev) {
|
||||
if (remove)
|
||||
iowrite8(MIC_VIRTIO_PARAM_DEV_REMOVE,
|
||||
|
@@ -42,8 +42,8 @@
|
||||
|
||||
static inline unsigned mic_desc_size(struct mic_device_desc __iomem *desc)
|
||||
{
|
||||
return mic_aligned_size(*desc)
|
||||
+ ioread8(&desc->num_vq) * mic_aligned_size(struct mic_vqconfig)
|
||||
return sizeof(*desc)
|
||||
+ ioread8(&desc->num_vq) * sizeof(struct mic_vqconfig)
|
||||
+ ioread8(&desc->feature_len) * 2
|
||||
+ ioread8(&desc->config_len);
|
||||
}
|
||||
@@ -67,8 +67,7 @@ mic_vq_configspace(struct mic_device_desc __iomem *desc)
|
||||
}
|
||||
static inline unsigned mic_total_desc_size(struct mic_device_desc __iomem *desc)
|
||||
{
|
||||
return mic_aligned_desc_size(desc) +
|
||||
mic_aligned_size(struct mic_device_ctrl);
|
||||
return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
|
||||
}
|
||||
|
||||
int mic_devices_init(struct mic_driver *mdrv);
|
||||
|
@@ -62,7 +62,7 @@ void mic_bootparam_init(struct mic_device *mdev)
|
||||
{
|
||||
struct mic_bootparam *bootparam = mdev->dp;
|
||||
|
||||
bootparam->magic = MIC_MAGIC;
|
||||
bootparam->magic = cpu_to_le32(MIC_MAGIC);
|
||||
bootparam->c2h_shutdown_db = mdev->shutdown_db;
|
||||
bootparam->h2c_shutdown_db = -1;
|
||||
bootparam->h2c_config_db = -1;
|
||||
|
@@ -41,7 +41,7 @@ static int mic_virtio_copy_to_user(struct mic_vdev *mvdev,
|
||||
* We are copying from IO below an should ideally use something
|
||||
* like copy_to_user_fromio(..) if it existed.
|
||||
*/
|
||||
if (copy_to_user(ubuf, dbuf, len)) {
|
||||
if (copy_to_user(ubuf, (void __force *)dbuf, len)) {
|
||||
err = -EFAULT;
|
||||
dev_err(mic_dev(mvdev), "%s %d err %d\n",
|
||||
__func__, __LINE__, err);
|
||||
@@ -66,7 +66,7 @@ static int mic_virtio_copy_from_user(struct mic_vdev *mvdev,
|
||||
* We are copying to IO below and should ideally use something
|
||||
* like copy_from_user_toio(..) if it existed.
|
||||
*/
|
||||
if (copy_from_user(dbuf, ubuf, len)) {
|
||||
if (copy_from_user((void __force *)dbuf, ubuf, len)) {
|
||||
err = -EFAULT;
|
||||
dev_err(mic_dev(mvdev), "%s %d err %d\n",
|
||||
__func__, __LINE__, err);
|
||||
@@ -293,7 +293,7 @@ static void mic_virtio_init_post(struct mic_vdev *mvdev)
|
||||
continue;
|
||||
}
|
||||
mvdev->mvr[i].vrh.vring.used =
|
||||
mvdev->mdev->aper.va +
|
||||
(void __force *)mvdev->mdev->aper.va +
|
||||
le64_to_cpu(vqconfig[i].used_address);
|
||||
}
|
||||
|
||||
@@ -378,7 +378,7 @@ int mic_virtio_config_change(struct mic_vdev *mvdev,
|
||||
void __user *argp)
|
||||
{
|
||||
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wake);
|
||||
int ret = 0, retry = 100, i;
|
||||
int ret = 0, retry, i;
|
||||
struct mic_bootparam *bootparam = mvdev->mdev->dp;
|
||||
s8 db = bootparam->h2c_config_db;
|
||||
|
||||
@@ -401,7 +401,7 @@ int mic_virtio_config_change(struct mic_vdev *mvdev,
|
||||
mvdev->dc->config_change = MIC_VIRTIO_PARAM_CONFIG_CHANGED;
|
||||
mvdev->mdev->ops->send_intr(mvdev->mdev, db);
|
||||
|
||||
for (i = retry; i--;) {
|
||||
for (retry = 100; retry--;) {
|
||||
ret = wait_event_timeout(wake,
|
||||
mvdev->dc->guest_ack, msecs_to_jiffies(100));
|
||||
if (ret)
|
||||
@@ -467,7 +467,7 @@ static int mic_copy_dp_entry(struct mic_vdev *mvdev,
|
||||
}
|
||||
|
||||
/* Find the first free device page entry */
|
||||
for (i = mic_aligned_size(struct mic_bootparam);
|
||||
for (i = sizeof(struct mic_bootparam);
|
||||
i < MIC_DP_SIZE - mic_total_desc_size(dd_config);
|
||||
i += mic_total_desc_size(devp)) {
|
||||
devp = mdev->dp + i;
|
||||
@@ -525,6 +525,7 @@ int mic_virtio_add_device(struct mic_vdev *mvdev,
|
||||
char irqname[10];
|
||||
struct mic_bootparam *bootparam = mdev->dp;
|
||||
u16 num;
|
||||
dma_addr_t vr_addr;
|
||||
|
||||
mutex_lock(&mdev->mic_mutex);
|
||||
|
||||
@@ -559,17 +560,16 @@ int mic_virtio_add_device(struct mic_vdev *mvdev,
|
||||
}
|
||||
vr->len = vr_size;
|
||||
vr->info = vr->va + vring_size(num, MIC_VIRTIO_RING_ALIGN);
|
||||
vr->info->magic = MIC_MAGIC + mvdev->virtio_id + i;
|
||||
vqconfig[i].address = mic_map_single(mdev,
|
||||
vr->va, vr_size);
|
||||
if (mic_map_error(vqconfig[i].address)) {
|
||||
vr->info->magic = cpu_to_le32(MIC_MAGIC + mvdev->virtio_id + i);
|
||||
vr_addr = mic_map_single(mdev, vr->va, vr_size);
|
||||
if (mic_map_error(vr_addr)) {
|
||||
free_pages((unsigned long)vr->va, get_order(vr_size));
|
||||
ret = -ENOMEM;
|
||||
dev_err(mic_dev(mvdev), "%s %d err %d\n",
|
||||
__func__, __LINE__, ret);
|
||||
goto err;
|
||||
}
|
||||
vqconfig[i].address = cpu_to_le64(vqconfig[i].address);
|
||||
vqconfig[i].address = cpu_to_le64(vr_addr);
|
||||
|
||||
vring_init(&vr->vr, num, vr->va, MIC_VIRTIO_RING_ALIGN);
|
||||
ret = vringh_init_kern(&mvr->vrh,
|
||||
@@ -639,7 +639,7 @@ void mic_virtio_del_device(struct mic_vdev *mvdev)
|
||||
struct mic_vdev *tmp_mvdev;
|
||||
struct mic_device *mdev = mvdev->mdev;
|
||||
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wake);
|
||||
int i, ret, retry = 100;
|
||||
int i, ret, retry;
|
||||
struct mic_vqconfig *vqconfig;
|
||||
struct mic_bootparam *bootparam = mdev->dp;
|
||||
s8 db;
|
||||
@@ -652,16 +652,16 @@ void mic_virtio_del_device(struct mic_vdev *mvdev)
|
||||
"Requesting hot remove id %d\n", mvdev->virtio_id);
|
||||
mvdev->dc->config_change = MIC_VIRTIO_PARAM_DEV_REMOVE;
|
||||
mdev->ops->send_intr(mdev, db);
|
||||
for (i = retry; i--;) {
|
||||
for (retry = 100; retry--;) {
|
||||
ret = wait_event_timeout(wake,
|
||||
mvdev->dc->guest_ack, msecs_to_jiffies(100));
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
dev_dbg(mdev->sdev->parent,
|
||||
"Device id %d config_change %d guest_ack %d\n",
|
||||
"Device id %d config_change %d guest_ack %d retry %d\n",
|
||||
mvdev->virtio_id, mvdev->dc->config_change,
|
||||
mvdev->dc->guest_ack);
|
||||
mvdev->dc->guest_ack, retry);
|
||||
mvdev->dc->config_change = 0;
|
||||
mvdev->dc->guest_ack = 0;
|
||||
skip_hot_remove:
|
||||
|
@@ -400,8 +400,8 @@ mic_x100_load_ramdisk(struct mic_device *mdev)
|
||||
* so copy over the ramdisk @ 128M.
|
||||
*/
|
||||
memcpy_toio(mdev->aper.va + (mdev->bootaddr << 1), fw->data, fw->size);
|
||||
iowrite32(cpu_to_le32(mdev->bootaddr << 1), &bp->hdr.ramdisk_image);
|
||||
iowrite32(cpu_to_le32(fw->size), &bp->hdr.ramdisk_size);
|
||||
iowrite32(mdev->bootaddr << 1, &bp->hdr.ramdisk_image);
|
||||
iowrite32(fw->size, &bp->hdr.ramdisk_size);
|
||||
release_firmware(fw);
|
||||
error:
|
||||
return rc;
|
||||
|
Reference in New Issue
Block a user