Skip to content

Commit 2f5107c

Browse files
petkomanolovdavem330
authored andcommitted
pegasus: Remove pegasus' own workqueue
Remove pegasus' own workqueue and replace it with system_long_wq. Signed-off-by: Petko Manolov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 19e16d2 commit 2f5107c

File tree

1 file changed

+6
-32
lines changed

1 file changed

+6
-32
lines changed

drivers/net/usb/pegasus.c

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ static const char driver_name[] = "pegasus";
5454
#undef PEGASUS_WRITE_EEPROM
5555
#define BMSR_MEDIA (BMSR_10HALF | BMSR_10FULL | BMSR_100HALF | \
5656
BMSR_100FULL | BMSR_ANEGCAPABLE)
57+
#define CARRIER_CHECK_DELAY (2 * HZ)
5758

5859
static bool loopback;
5960
static bool mii_mode;
@@ -1089,17 +1090,12 @@ static inline void setup_pegasus_II(pegasus_t *pegasus)
10891090
set_register(pegasus, Reg81, 2);
10901091
}
10911092

1092-
1093-
static int pegasus_count;
1094-
static struct workqueue_struct *pegasus_workqueue;
1095-
#define CARRIER_CHECK_DELAY (2 * HZ)
1096-
10971093
static void check_carrier(struct work_struct *work)
10981094
{
10991095
pegasus_t *pegasus = container_of(work, pegasus_t, carrier_check.work);
11001096
set_carrier(pegasus->net);
11011097
if (!(pegasus->flags & PEGASUS_UNPLUG)) {
1102-
queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
1098+
queue_delayed_work(system_long_wq, &pegasus->carrier_check,
11031099
CARRIER_CHECK_DELAY);
11041100
}
11051101
}
@@ -1120,18 +1116,6 @@ static int pegasus_blacklisted(struct usb_device *udev)
11201116
return 0;
11211117
}
11221118

1123-
/* we rely on probe() and remove() being serialized so we
1124-
* don't need extra locking on pegasus_count.
1125-
*/
1126-
static void pegasus_dec_workqueue(void)
1127-
{
1128-
pegasus_count--;
1129-
if (pegasus_count == 0) {
1130-
destroy_workqueue(pegasus_workqueue);
1131-
pegasus_workqueue = NULL;
1132-
}
1133-
}
1134-
11351119
static int pegasus_probe(struct usb_interface *intf,
11361120
const struct usb_device_id *id)
11371121
{
@@ -1144,14 +1128,6 @@ static int pegasus_probe(struct usb_interface *intf,
11441128
if (pegasus_blacklisted(dev))
11451129
return -ENODEV;
11461130

1147-
if (pegasus_count == 0) {
1148-
pegasus_workqueue = alloc_workqueue("pegasus", WQ_MEM_RECLAIM,
1149-
0);
1150-
if (!pegasus_workqueue)
1151-
return -ENOMEM;
1152-
}
1153-
pegasus_count++;
1154-
11551131
net = alloc_etherdev(sizeof(struct pegasus));
11561132
if (!net)
11571133
goto out;
@@ -1209,7 +1185,7 @@ static int pegasus_probe(struct usb_interface *intf,
12091185
res = register_netdev(net);
12101186
if (res)
12111187
goto out3;
1212-
queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
1188+
queue_delayed_work(system_long_wq, &pegasus->carrier_check,
12131189
CARRIER_CHECK_DELAY);
12141190
dev_info(&intf->dev, "%s, %s, %pM\n", net->name,
12151191
usb_dev_id[dev_index].name, net->dev_addr);
@@ -1222,7 +1198,6 @@ static int pegasus_probe(struct usb_interface *intf,
12221198
out1:
12231199
free_netdev(net);
12241200
out:
1225-
pegasus_dec_workqueue();
12261201
return res;
12271202
}
12281203

@@ -1237,7 +1212,7 @@ static void pegasus_disconnect(struct usb_interface *intf)
12371212
}
12381213

12391214
pegasus->flags |= PEGASUS_UNPLUG;
1240-
cancel_delayed_work(&pegasus->carrier_check);
1215+
cancel_delayed_work_sync(&pegasus->carrier_check);
12411216
unregister_netdev(pegasus->net);
12421217
unlink_all_urbs(pegasus);
12431218
free_all_urbs(pegasus);
@@ -1246,15 +1221,14 @@ static void pegasus_disconnect(struct usb_interface *intf)
12461221
pegasus->rx_skb = NULL;
12471222
}
12481223
free_netdev(pegasus->net);
1249-
pegasus_dec_workqueue();
12501224
}
12511225

12521226
static int pegasus_suspend(struct usb_interface *intf, pm_message_t message)
12531227
{
12541228
struct pegasus *pegasus = usb_get_intfdata(intf);
12551229

12561230
netif_device_detach(pegasus->net);
1257-
cancel_delayed_work(&pegasus->carrier_check);
1231+
cancel_delayed_work_sync(&pegasus->carrier_check);
12581232
if (netif_running(pegasus->net)) {
12591233
usb_kill_urb(pegasus->rx_urb);
12601234
usb_kill_urb(pegasus->intr_urb);
@@ -1276,7 +1250,7 @@ static int pegasus_resume(struct usb_interface *intf)
12761250
pegasus->intr_urb->actual_length = 0;
12771251
intr_callback(pegasus->intr_urb);
12781252
}
1279-
queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
1253+
queue_delayed_work(system_long_wq, &pegasus->carrier_check,
12801254
CARRIER_CHECK_DELAY);
12811255
return 0;
12821256
}

0 commit comments

Comments
 (0)