/* * _remove is the opposite of _probe; it's probe that * should set up rp.  raw3270_remove gets entered for * devices even if they haven't been varied online. * Thus, rp may validly be NULL here. */ if (rp == NULL) return; 
raw3270_remove (struct ccw_device *cdev){	unsigned long flags;	struct raw3270 *rp;	struct raw3270_view *v;	struct raw3270_notifier *np;	rp = cdev->dev.driver_data;	clear_bit(RAW3270_FLAGS_READY, &rp->flags);	sysfs_remove_group(&cdev->dev.kobj, &raw3270_attr_group);	/* Deactivate current view and remove all views. */	spin_lock_irqsave(get_ccwdev_lock(cdev), flags);	if (rp->view) {		rp->view->fn->deactivate(rp->view);		rp->view = 0;	}	while (!list_empty(&rp->view_list)) {		v = list_entry(rp->view_list.next, struct raw3270_view, list);		if (v->fn->release)			v->fn->release(v);		spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);		raw3270_del_view(v);		spin_lock_irqsave(get_ccwdev_lock(cdev), flags);	}	spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);	down(&raw3270_sem);	list_for_each_entry(np, &raw3270_notifier, list)		np->notifier(rp->minor, 0);	up(&raw3270_sem);	/* Reset 3270 device. */	raw3270_reset_device(rp);	/* And finally remove it. */	raw3270_delete_device(rp);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ed3cb6f039bb296457bfd2877cba6ad0287d8d54/raw3270.c/clean/drivers/s390/char/raw3270.c