Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xen/scsifront: use xenbus_setup_ring() and xenbus_teardown_ring()

Simplify scsifront's ring creation and removal via xenbus_setup_ring()
and xenbus_teardown_ring().

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>

+7 -21
+7 -21
drivers/scsi/xen-scsifront.c
··· 798 798 { 799 799 struct xenbus_device *dev = info->dev; 800 800 struct vscsiif_sring *sring; 801 - grant_ref_t gref; 802 - int err = -ENOMEM; 801 + int err; 803 802 804 803 /***** Frontend to Backend ring start *****/ 805 - sring = (struct vscsiif_sring *)__get_free_page(GFP_KERNEL); 806 - if (!sring) { 807 - xenbus_dev_fatal(dev, err, 808 - "fail to allocate shared ring (Front to Back)"); 804 + err = xenbus_setup_ring(dev, GFP_KERNEL, (void **)&sring, 1, 805 + &info->ring_ref); 806 + if (err) 809 807 return err; 810 - } 811 - SHARED_RING_INIT(sring); 812 - FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); 813 808 814 - err = xenbus_grant_ring(dev, sring, 1, &gref); 815 - if (err < 0) { 816 - free_page((unsigned long)sring); 817 - xenbus_dev_fatal(dev, err, 818 - "fail to grant shared ring (Front to Back)"); 819 - return err; 820 - } 821 - info->ring_ref = gref; 809 + XEN_FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); 822 810 823 811 err = xenbus_alloc_evtchn(dev, &info->evtchn); 824 812 if (err) { ··· 835 847 free_irq: 836 848 unbind_from_irqhandler(info->irq, info); 837 849 free_gnttab: 838 - gnttab_end_foreign_access(info->ring_ref, 839 - (unsigned long)info->ring.sring); 850 + xenbus_teardown_ring((void **)&sring, 1, &info->ring_ref); 840 851 841 852 return err; 842 853 } ··· 843 856 static void scsifront_free_ring(struct vscsifrnt_info *info) 844 857 { 845 858 unbind_from_irqhandler(info->irq, info); 846 - gnttab_end_foreign_access(info->ring_ref, 847 - (unsigned long)info->ring.sring); 859 + xenbus_teardown_ring((void **)&info->ring.sring, 1, &info->ring_ref); 848 860 } 849 861 850 862 static int scsifront_init_ring(struct vscsifrnt_info *info)