Lines Matching refs:be

13 static int connect_data_rings(struct backend_info *be,
15 static void connect(struct backend_info *be);
16 static int read_xenbus_vif_flags(struct backend_info *be);
17 static int backend_create_xenvif(struct backend_info *be);
18 static void unregister_hotplug_status_watch(struct backend_info *be);
20 static void set_backend_state(struct backend_info *be,
206 struct backend_info *be = dev_get_drvdata(&xdev->dev);
208 if (!be)
211 if (add_uevent_var(env, "script=%s", be->hotplug_script))
214 if (!be->vif)
217 return add_uevent_var(env, "vif=%s", be->vif->dev->name);
221 static int backend_create_xenvif(struct backend_info *be)
225 struct xenbus_device *dev = be->dev;
228 if (be->vif != NULL)
243 be->vif = vif;
244 vif->be = be;
250 static void backend_disconnect(struct backend_info *be)
252 struct xenvif *vif = be->vif;
264 /* At this point some of the handlers may still be active
280 static void backend_connect(struct backend_info *be)
282 if (be->vif)
283 connect(be);
286 static inline void backend_switch_state(struct backend_info *be,
289 struct xenbus_device *dev = be->dev;
292 be->state = state;
297 if (!be->have_hotplug_status_watch)
321 static void set_backend_state(struct backend_info *be,
324 while (be->state != state) {
325 switch (be->state) {
331 backend_switch_state(be, XenbusStateInitWait);
334 backend_switch_state(be, XenbusStateClosed);
344 backend_switch_state(be, XenbusStateInitWait);
347 backend_switch_state(be, XenbusStateClosing);
356 backend_connect(be);
357 backend_switch_state(be, XenbusStateConnected);
361 backend_switch_state(be, XenbusStateClosing);
372 backend_disconnect(be);
373 backend_switch_state(be, XenbusStateClosing);
384 backend_switch_state(be, XenbusStateClosed);
396 static void read_xenbus_frontend_xdp(struct backend_info *be,
399 struct xenvif *vif = be->vif;
420 struct backend_info *be = dev_get_drvdata(&dev->dev);
424 be->frontend_state = frontend_state;
428 set_backend_state(be, XenbusStateInitWait);
435 set_backend_state(be, XenbusStateConnected);
439 read_xenbus_frontend_xdp(be, dev);
444 set_backend_state(be, XenbusStateClosing);
448 set_backend_state(be, XenbusStateClosed);
453 set_backend_state(be, XenbusStateClosed);
650 static void unregister_hotplug_status_watch(struct backend_info *be)
652 if (be->have_hotplug_status_watch) {
653 unregister_xenbus_watch(&be->hotplug_status_watch);
654 kfree(be->hotplug_status_watch.node);
656 be->have_hotplug_status_watch = 0;
663 struct backend_info *be = container_of(watch,
669 str = xenbus_read(XBT_NIL, be->dev->nodename, "hotplug-status", &len);
674 xenbus_switch_state(be->dev, be->state);
677 unregister_hotplug_status_watch(be);
682 static int connect_ctrl_ring(struct backend_info *be)
684 struct xenbus_device *dev = be->dev;
685 struct xenvif *vif = be->vif;
724 static void connect(struct backend_info *be)
727 struct xenbus_device *dev = be->dev;
746 err = xen_net_read_mac(dev, be->vif->fe_dev_addr);
753 xen_unregister_watchers(be->vif);
754 xen_register_watchers(dev, be->vif);
755 read_xenbus_vif_flags(be);
757 err = connect_ctrl_ring(be);
764 be->vif->queues = vzalloc(array_size(requested_num_queues,
766 if (!be->vif->queues) {
772 be->vif->num_queues = requested_num_queues;
773 be->vif->stalled_queues = requested_num_queues;
776 queue = &be->vif->queues[queue_index];
777 queue->vif = be->vif;
780 be->vif->dev->name, queue->id);
787 * earlier queues can be destroyed using the regular
790 be->vif->num_queues = queue_index;
798 err = connect_data_rings(be, queue);
806 be->vif->num_queues = queue_index;
812 xenvif_debugfs_addif(be->vif);
819 netif_set_real_num_tx_queues(be->vif->dev, requested_num_queues);
820 netif_set_real_num_rx_queues(be->vif->dev, requested_num_queues);
823 xenvif_carrier_on(be->vif);
825 unregister_hotplug_status_watch(be);
826 err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, NULL,
830 be->have_hotplug_status_watch = 1;
832 netif_tx_wake_all_queues(be->vif->dev);
837 if (be->vif->num_queues > 0)
838 xenvif_disconnect_data(be->vif); /* Clean up existing queues */
839 for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index)
840 xenvif_deinit_queue(&be->vif->queues[queue_index]);
841 vfree(be->vif->queues);
842 be->vif->queues = NULL;
843 be->vif->num_queues = 0;
844 xenvif_disconnect_ctrl(be->vif);
849 static int connect_data_rings(struct backend_info *be,
852 struct xenbus_device *dev = be->dev;
929 static int read_xenbus_vif_flags(struct backend_info *be)
931 struct xenvif *vif = be->vif;
932 struct xenbus_device *dev = be->dev;
955 be->vif->drain_timeout = msecs_to_jiffies(30);
956 be->vif->stall_timeout = 0;
975 read_xenbus_frontend_xdp(be, dev);
982 struct backend_info *be = dev_get_drvdata(&dev->dev);
984 unregister_hotplug_status_watch(be);
986 if (be->vif) {
988 backend_disconnect(be);
989 xenvif_free(be->vif);
990 be->vif = NULL;
992 kfree(be->hotplug_script);
993 kfree(be);
1009 struct backend_info *be = kzalloc(sizeof(*be), GFP_KERNEL);
1011 if (!be) {
1017 be->dev = dev;
1018 dev_set_drvdata(&dev->dev, be);
1130 backend_switch_state(be, XenbusStateInitWait);
1139 be->hotplug_script = script;
1142 err = backend_create_xenvif(be);