Lines Matching refs:vcdev

80 static inline unsigned long *indicators(struct virtio_ccw_device *vcdev)  in indicators()  argument
82 return &vcdev->dma_area->indicators; in indicators()
85 static inline unsigned long *indicators2(struct virtio_ccw_device *vcdev) in indicators2() argument
87 return &vcdev->dma_area->indicators2; in indicators2()
91 static inline dma64_t indicators_dma(struct virtio_ccw_device *vcdev) in indicators_dma() argument
93 u64 dma_area_addr = dma32_to_u32(vcdev->dma_area_addr); in indicators_dma()
100 static inline dma64_t indicators2_dma(struct virtio_ccw_device *vcdev) in indicators2_dma() argument
102 u64 dma_area_addr = dma32_to_u32(vcdev->dma_area_addr); in indicators2_dma()
108 static inline dma32_t config_block_dma(struct virtio_ccw_device *vcdev) in config_block_dma() argument
110 return dma32_add(vcdev->dma_area_addr, in config_block_dma()
114 static inline dma32_t status_dma(struct virtio_ccw_device *vcdev) in status_dma() argument
116 return dma32_add(vcdev->dma_area_addr, in status_dma()
345 static void virtio_ccw_drop_indicators(struct virtio_ccw_device *vcdev) in virtio_ccw_drop_indicators() argument
349 if (!vcdev->airq_info) in virtio_ccw_drop_indicators()
351 list_for_each_entry(info, &vcdev->virtqueues, node) in virtio_ccw_drop_indicators()
352 drop_airq_indicator(info->vq, vcdev->airq_info); in virtio_ccw_drop_indicators()
355 static int doing_io(struct virtio_ccw_device *vcdev, __u32 flag) in doing_io() argument
360 spin_lock_irqsave(get_ccwdev_lock(vcdev->cdev), flags); in doing_io()
361 if (vcdev->err) in doing_io()
364 ret = vcdev->curr_io & flag; in doing_io()
365 spin_unlock_irqrestore(get_ccwdev_lock(vcdev->cdev), flags); in doing_io()
369 static int ccw_io_helper(struct virtio_ccw_device *vcdev, in ccw_io_helper() argument
376 mutex_lock(&vcdev->io_lock); in ccw_io_helper()
378 spin_lock_irqsave(get_ccwdev_lock(vcdev->cdev), flags); in ccw_io_helper()
379 ret = ccw_device_start(vcdev->cdev, ccw, intparm, 0, 0); in ccw_io_helper()
381 if (!vcdev->curr_io) in ccw_io_helper()
382 vcdev->err = 0; in ccw_io_helper()
383 vcdev->curr_io |= flag; in ccw_io_helper()
385 spin_unlock_irqrestore(get_ccwdev_lock(vcdev->cdev), flags); in ccw_io_helper()
388 wait_event(vcdev->wait_q, doing_io(vcdev, flag) == 0); in ccw_io_helper()
389 ret = ret ? ret : vcdev->err; in ccw_io_helper()
390 mutex_unlock(&vcdev->io_lock); in ccw_io_helper()
394 static void virtio_ccw_drop_indicator(struct virtio_ccw_device *vcdev, in virtio_ccw_drop_indicator() argument
399 struct airq_info *airq_info = vcdev->airq_info; in virtio_ccw_drop_indicator()
402 if (vcdev->is_thinint) { in virtio_ccw_drop_indicator()
403 thinint_area = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_drop_indicator()
415 indicatorp = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_drop_indicator()
425 *indicators(vcdev) = 0; in virtio_ccw_drop_indicator()
427 ret = ccw_io_helper(vcdev, ccw, in virtio_ccw_drop_indicator()
428 vcdev->is_thinint ? in virtio_ccw_drop_indicator()
432 dev_info(&vcdev->cdev->dev, in virtio_ccw_drop_indicator()
434 else if (vcdev->is_thinint) in virtio_ccw_drop_indicator()
435 virtio_ccw_drop_indicators(vcdev); in virtio_ccw_drop_indicator()
436 ccw_device_dma_free(vcdev->cdev, indicatorp, sizeof(*indicatorp)); in virtio_ccw_drop_indicator()
437 ccw_device_dma_free(vcdev->cdev, thinint_area, sizeof(*thinint_area)); in virtio_ccw_drop_indicator()
443 struct virtio_ccw_device *vcdev; in virtio_ccw_do_kvm_notify() local
446 vcdev = to_vc_device(info->vq->vdev); in virtio_ccw_do_kvm_notify()
447 ccw_device_get_schid(vcdev->cdev, &schid); in virtio_ccw_do_kvm_notify()
467 static int virtio_ccw_read_vq_conf(struct virtio_ccw_device *vcdev, in virtio_ccw_read_vq_conf() argument
472 vcdev->dma_area->config_block.index = index; in virtio_ccw_read_vq_conf()
476 ccw->cda = config_block_dma(vcdev); in virtio_ccw_read_vq_conf()
477 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_VQ_CONF); in virtio_ccw_read_vq_conf()
480 return vcdev->dma_area->config_block.num ?: -ENOENT; in virtio_ccw_read_vq_conf()
485 struct virtio_ccw_device *vcdev = to_vc_device(vq->vdev); in virtio_ccw_del_vq() local
492 spin_lock_irqsave(&vcdev->lock, flags); in virtio_ccw_del_vq()
494 spin_unlock_irqrestore(&vcdev->lock, flags); in virtio_ccw_del_vq()
497 if (vcdev->revision == 0) { in virtio_ccw_del_vq()
514 ret = ccw_io_helper(vcdev, ccw, in virtio_ccw_del_vq()
525 ccw_device_dma_free(vcdev->cdev, info->info_block, in virtio_ccw_del_vq()
534 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_del_vqs() local
536 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_del_vqs()
540 virtio_ccw_drop_indicator(vcdev, ccw); in virtio_ccw_del_vqs()
545 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_del_vqs()
553 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_setup_vq() local
570 dev_warn(&vcdev->cdev->dev, "no info\n"); in virtio_ccw_setup_vq()
574 info->info_block = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_setup_vq()
578 dev_warn(&vcdev->cdev->dev, "no info block\n"); in virtio_ccw_setup_vq()
582 info->num = virtio_ccw_read_vq_conf(vcdev, ccw, i); in virtio_ccw_setup_vq()
587 may_reduce = vcdev->revision > 0; in virtio_ccw_setup_vq()
594 dev_warn(&vcdev->cdev->dev, "no vq\n"); in virtio_ccw_setup_vq()
606 if (vcdev->revision == 0) { in virtio_ccw_setup_vq()
623 err = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_VQ | i); in virtio_ccw_setup_vq()
625 dev_warn(&vcdev->cdev->dev, "SET_VQ failed\n"); in virtio_ccw_setup_vq()
633 spin_lock_irqsave(&vcdev->lock, flags); in virtio_ccw_setup_vq()
634 list_add(&info->node, &vcdev->virtqueues); in virtio_ccw_setup_vq()
635 spin_unlock_irqrestore(&vcdev->lock, flags); in virtio_ccw_setup_vq()
643 ccw_device_dma_free(vcdev->cdev, info->info_block, in virtio_ccw_setup_vq()
650 static int virtio_ccw_register_adapter_ind(struct virtio_ccw_device *vcdev, in virtio_ccw_register_adapter_ind() argument
659 thinint_area = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_register_adapter_ind()
669 &vcdev->airq_info); in virtio_ccw_register_adapter_ind()
675 info = vcdev->airq_info; in virtio_ccw_register_adapter_ind()
681 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_IND_ADAPTER); in virtio_ccw_register_adapter_ind()
691 dev_warn(&vcdev->cdev->dev, in virtio_ccw_register_adapter_ind()
693 virtio_ccw_drop_indicators(vcdev); in virtio_ccw_register_adapter_ind()
696 ccw_device_dma_free(vcdev->cdev, thinint_area, sizeof(*thinint_area)); in virtio_ccw_register_adapter_ind()
705 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_find_vqs() local
711 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_find_vqs()
736 indicatorp = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_find_vqs()
741 *indicatorp = indicators_dma(vcdev); in virtio_ccw_find_vqs()
742 if (vcdev->is_thinint) { in virtio_ccw_find_vqs()
743 ret = virtio_ccw_register_adapter_ind(vcdev, vqs, nvqs, ccw); in virtio_ccw_find_vqs()
746 vcdev->is_thinint = false; in virtio_ccw_find_vqs()
749 if (!vcdev->is_thinint) { in virtio_ccw_find_vqs()
751 *indicators(vcdev) = 0; in virtio_ccw_find_vqs()
755 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_IND); in virtio_ccw_find_vqs()
760 *indicatorp = indicators2_dma(vcdev); in virtio_ccw_find_vqs()
761 *indicators2(vcdev) = 0; in virtio_ccw_find_vqs()
765 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_CONF_IND); in virtio_ccw_find_vqs()
770 ccw_device_dma_free(vcdev->cdev, indicatorp, in virtio_ccw_find_vqs()
772 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_find_vqs()
776 ccw_device_dma_free(vcdev->cdev, indicatorp, in virtio_ccw_find_vqs()
778 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_find_vqs()
785 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_reset() local
788 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_reset()
793 vcdev->dma_area->status = 0; in virtio_ccw_reset()
800 ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_RESET); in virtio_ccw_reset()
801 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_reset()
806 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_get_features() local
812 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_get_features()
816 features = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*features), in virtio_ccw_get_features()
827 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_FEAT); in virtio_ccw_get_features()
835 if (vcdev->revision == 0) in virtio_ccw_get_features()
843 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_FEAT); in virtio_ccw_get_features()
848 ccw_device_dma_free(vcdev->cdev, features, sizeof(*features)); in virtio_ccw_get_features()
849 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_get_features()
862 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_finalize_features() local
867 if (vcdev->revision >= 1 && in virtio_ccw_finalize_features()
874 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_finalize_features()
878 features = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*features), in virtio_ccw_finalize_features()
896 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT); in virtio_ccw_finalize_features()
900 if (vcdev->revision == 0) in virtio_ccw_finalize_features()
909 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT); in virtio_ccw_finalize_features()
912 ccw_device_dma_free(vcdev->cdev, features, sizeof(*features)); in virtio_ccw_finalize_features()
913 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_finalize_features()
921 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_get_config() local
927 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_get_config()
931 config_area = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_get_config()
941 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_CONFIG); in virtio_ccw_get_config()
945 spin_lock_irqsave(&vcdev->lock, flags); in virtio_ccw_get_config()
946 memcpy(vcdev->config, config_area, offset + len); in virtio_ccw_get_config()
947 if (vcdev->config_ready < offset + len) in virtio_ccw_get_config()
948 vcdev->config_ready = offset + len; in virtio_ccw_get_config()
949 spin_unlock_irqrestore(&vcdev->lock, flags); in virtio_ccw_get_config()
954 ccw_device_dma_free(vcdev->cdev, config_area, VIRTIO_CCW_CONFIG_SIZE); in virtio_ccw_get_config()
955 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_get_config()
962 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_set_config() local
967 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_set_config()
971 config_area = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_set_config()
978 if (vcdev->config_ready < offset) in virtio_ccw_set_config()
980 spin_lock_irqsave(&vcdev->lock, flags); in virtio_ccw_set_config()
981 memcpy(&vcdev->config[offset], buf, len); in virtio_ccw_set_config()
983 memcpy(config_area, vcdev->config, sizeof(vcdev->config)); in virtio_ccw_set_config()
984 spin_unlock_irqrestore(&vcdev->lock, flags); in virtio_ccw_set_config()
988 ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_CONFIG); in virtio_ccw_set_config()
991 ccw_device_dma_free(vcdev->cdev, config_area, VIRTIO_CCW_CONFIG_SIZE); in virtio_ccw_set_config()
992 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_set_config()
997 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_get_status() local
998 u8 old_status = vcdev->dma_area->status; in virtio_ccw_get_status()
1001 if (vcdev->revision < 2) in virtio_ccw_get_status()
1002 return vcdev->dma_area->status; in virtio_ccw_get_status()
1004 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_get_status()
1010 ccw->count = sizeof(vcdev->dma_area->status); in virtio_ccw_get_status()
1011 ccw->cda = status_dma(vcdev); in virtio_ccw_get_status()
1012 ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_STATUS); in virtio_ccw_get_status()
1019 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_get_status()
1021 return vcdev->dma_area->status; in virtio_ccw_get_status()
1026 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_set_status() local
1027 u8 old_status = vcdev->dma_area->status; in virtio_ccw_set_status()
1031 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_set_status()
1036 vcdev->dma_area->status = status; in virtio_ccw_set_status()
1044 ccw->cda = status_dma(vcdev); in virtio_ccw_set_status()
1045 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_STATUS); in virtio_ccw_set_status()
1048 vcdev->dma_area->status = old_status; in virtio_ccw_set_status()
1049 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_set_status()
1054 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_bus_name() local
1056 return dev_name(&vcdev->cdev->dev); in virtio_ccw_bus_name()
1061 struct virtio_ccw_device *vcdev = to_vc_device(vdev); in virtio_ccw_synchronize_cbs() local
1062 struct airq_info *info = vcdev->airq_info; in virtio_ccw_synchronize_cbs()
1078 write_lock_irq(&vcdev->irq_lock); in virtio_ccw_synchronize_cbs()
1079 write_unlock_irq(&vcdev->irq_lock); in virtio_ccw_synchronize_cbs()
1105 struct virtio_ccw_device *vcdev = to_vc_device(dev); in virtio_ccw_release_dev() local
1107 ccw_device_dma_free(vcdev->cdev, vcdev->dma_area, in virtio_ccw_release_dev()
1108 sizeof(*vcdev->dma_area)); in virtio_ccw_release_dev()
1109 kfree(vcdev); in virtio_ccw_release_dev()
1123 static struct virtqueue *virtio_ccw_vq_by_ind(struct virtio_ccw_device *vcdev, in virtio_ccw_vq_by_ind() argument
1131 spin_lock_irqsave(&vcdev->lock, flags); in virtio_ccw_vq_by_ind()
1132 list_for_each_entry(info, &vcdev->virtqueues, node) { in virtio_ccw_vq_by_ind()
1138 spin_unlock_irqrestore(&vcdev->lock, flags); in virtio_ccw_vq_by_ind()
1142 static void virtio_ccw_check_activity(struct virtio_ccw_device *vcdev, in virtio_ccw_check_activity() argument
1145 if (vcdev->curr_io & activity) { in virtio_ccw_check_activity()
1160 vcdev->curr_io &= ~activity; in virtio_ccw_check_activity()
1161 wake_up(&vcdev->wait_q); in virtio_ccw_check_activity()
1165 dev_warn(&vcdev->cdev->dev, in virtio_ccw_check_activity()
1178 struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev); in virtio_ccw_int_handler() local
1182 if (!vcdev) in virtio_ccw_int_handler()
1185 vcdev->err = PTR_ERR(irb); in virtio_ccw_int_handler()
1186 virtio_ccw_check_activity(vcdev, activity); in virtio_ccw_int_handler()
1200 vcdev->err = -EOPNOTSUPP; in virtio_ccw_int_handler()
1203 vcdev->err = -EIO; in virtio_ccw_int_handler()
1205 virtio_ccw_check_activity(vcdev, activity); in virtio_ccw_int_handler()
1211 read_lock(&vcdev->irq_lock); in virtio_ccw_int_handler()
1213 for_each_set_bit(i, indicators(vcdev), in virtio_ccw_int_handler()
1214 sizeof(*indicators(vcdev)) * BITS_PER_BYTE) { in virtio_ccw_int_handler()
1216 clear_bit(i, indicators(vcdev)); in virtio_ccw_int_handler()
1218 vq = virtio_ccw_vq_by_ind(vcdev, i); in virtio_ccw_int_handler()
1222 read_unlock(&vcdev->irq_lock); in virtio_ccw_int_handler()
1224 if (test_bit(0, indicators2(vcdev))) { in virtio_ccw_int_handler()
1225 virtio_config_changed(&vcdev->vdev); in virtio_ccw_int_handler()
1226 clear_bit(0, indicators2(vcdev)); in virtio_ccw_int_handler()
1275 struct virtio_ccw_device *vcdev; in virtio_grab_drvdata() local
1278 vcdev = dev_get_drvdata(&cdev->dev); in virtio_grab_drvdata()
1279 if (!vcdev || vcdev->going_away) { in virtio_grab_drvdata()
1283 vcdev->going_away = true; in virtio_grab_drvdata()
1285 return vcdev; in virtio_grab_drvdata()
1291 struct virtio_ccw_device *vcdev = virtio_grab_drvdata(cdev); in virtio_ccw_remove() local
1293 if (vcdev && cdev->online) { in virtio_ccw_remove()
1294 if (vcdev->device_lost) in virtio_ccw_remove()
1295 virtio_break_device(&vcdev->vdev); in virtio_ccw_remove()
1296 unregister_virtio_device(&vcdev->vdev); in virtio_ccw_remove()
1307 struct virtio_ccw_device *vcdev = virtio_grab_drvdata(cdev); in virtio_ccw_offline() local
1309 if (!vcdev) in virtio_ccw_offline()
1311 if (vcdev->device_lost) in virtio_ccw_offline()
1312 virtio_break_device(&vcdev->vdev); in virtio_ccw_offline()
1313 unregister_virtio_device(&vcdev->vdev); in virtio_ccw_offline()
1321 static int virtio_ccw_set_transport_rev(struct virtio_ccw_device *vcdev) in virtio_ccw_set_transport_rev() argument
1327 ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); in virtio_ccw_set_transport_rev()
1330 rev = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*rev), &ccw->cda); in virtio_ccw_set_transport_rev()
1332 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_set_transport_rev()
1341 vcdev->revision = VIRTIO_CCW_REV_MAX; in virtio_ccw_set_transport_rev()
1343 rev->revision = vcdev->revision; in virtio_ccw_set_transport_rev()
1346 ret = ccw_io_helper(vcdev, ccw, in virtio_ccw_set_transport_rev()
1349 if (vcdev->revision == 0) in virtio_ccw_set_transport_rev()
1357 vcdev->revision--; in virtio_ccw_set_transport_rev()
1361 ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); in virtio_ccw_set_transport_rev()
1362 ccw_device_dma_free(vcdev->cdev, rev, sizeof(*rev)); in virtio_ccw_set_transport_rev()
1369 struct virtio_ccw_device *vcdev; in virtio_ccw_online() local
1372 vcdev = kzalloc(sizeof(*vcdev), GFP_KERNEL); in virtio_ccw_online()
1373 if (!vcdev) { in virtio_ccw_online()
1378 vcdev->vdev.dev.parent = &cdev->dev; in virtio_ccw_online()
1379 vcdev->cdev = cdev; in virtio_ccw_online()
1380 cdev->dev.dma_parms = &vcdev->dma_parms; in virtio_ccw_online()
1381 vcdev->dma_area = ccw_device_dma_zalloc(vcdev->cdev, in virtio_ccw_online()
1382 sizeof(*vcdev->dma_area), in virtio_ccw_online()
1383 &vcdev->dma_area_addr); in virtio_ccw_online()
1384 if (!vcdev->dma_area) { in virtio_ccw_online()
1389 vcdev->is_thinint = virtio_ccw_use_airq; /* at least try */ in virtio_ccw_online()
1391 vcdev->vdev.dev.release = virtio_ccw_release_dev; in virtio_ccw_online()
1392 vcdev->vdev.config = &virtio_ccw_config_ops; in virtio_ccw_online()
1393 init_waitqueue_head(&vcdev->wait_q); in virtio_ccw_online()
1394 INIT_LIST_HEAD(&vcdev->virtqueues); in virtio_ccw_online()
1395 spin_lock_init(&vcdev->lock); in virtio_ccw_online()
1396 rwlock_init(&vcdev->irq_lock); in virtio_ccw_online()
1397 mutex_init(&vcdev->io_lock); in virtio_ccw_online()
1400 dev_set_drvdata(&cdev->dev, vcdev); in virtio_ccw_online()
1402 vcdev->vdev.id.vendor = cdev->id.cu_type; in virtio_ccw_online()
1403 vcdev->vdev.id.device = cdev->id.cu_model; in virtio_ccw_online()
1405 ret = virtio_ccw_set_transport_rev(vcdev); in virtio_ccw_online()
1409 ret = register_virtio_device(&vcdev->vdev); in virtio_ccw_online()
1420 put_device(&vcdev->vdev.dev); in virtio_ccw_online()
1423 if (vcdev) { in virtio_ccw_online()
1424 ccw_device_dma_free(vcdev->cdev, vcdev->dma_area, in virtio_ccw_online()
1425 sizeof(*vcdev->dma_area)); in virtio_ccw_online()
1427 kfree(vcdev); in virtio_ccw_online()
1434 struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev); in virtio_ccw_cio_notify() local
1440 if (!vcdev) in virtio_ccw_cio_notify()
1445 vcdev->device_lost = true; in virtio_ccw_cio_notify()