hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/s390/net/qeth_core_sys.c
....@@ -20,23 +20,16 @@
2020 struct device_attribute *attr, char *buf)
2121 {
2222 struct qeth_card *card = dev_get_drvdata(dev);
23
- if (!card)
24
- return -EINVAL;
2523
2624 switch (card->state) {
2725 case CARD_STATE_DOWN:
2826 return sprintf(buf, "DOWN\n");
29
- case CARD_STATE_HARDSETUP:
30
- return sprintf(buf, "HARDSETUP\n");
3127 case CARD_STATE_SOFTSETUP:
28
+ if (card->dev->flags & IFF_UP)
29
+ return sprintf(buf, "UP (LAN %s)\n",
30
+ netif_carrier_ok(card->dev) ? "ONLINE" :
31
+ "OFFLINE");
3232 return sprintf(buf, "SOFTSETUP\n");
33
- case CARD_STATE_UP:
34
- if (card->lan_online)
35
- return sprintf(buf, "UP (LAN ONLINE)\n");
36
- else
37
- return sprintf(buf, "UP (LAN OFFLINE)\n");
38
- case CARD_STATE_RECOVER:
39
- return sprintf(buf, "RECOVER\n");
4033 default:
4134 return sprintf(buf, "UNKNOWN\n");
4235 }
....@@ -48,8 +41,6 @@
4841 struct device_attribute *attr, char *buf)
4942 {
5043 struct qeth_card *card = dev_get_drvdata(dev);
51
- if (!card)
52
- return -EINVAL;
5344
5445 return sprintf(buf, "%02X\n", card->info.chpid);
5546 }
....@@ -60,9 +51,8 @@
6051 struct device_attribute *attr, char *buf)
6152 {
6253 struct qeth_card *card = dev_get_drvdata(dev);
63
- if (!card)
64
- return -EINVAL;
65
- return sprintf(buf, "%s\n", QETH_CARD_IFNAME(card));
54
+
55
+ return sprintf(buf, "%s\n", netdev_name(card->dev));
6656 }
6757
6858 static DEVICE_ATTR(if_name, 0444, qeth_dev_if_name_show, NULL);
....@@ -71,8 +61,6 @@
7161 struct device_attribute *attr, char *buf)
7262 {
7363 struct qeth_card *card = dev_get_drvdata(dev);
74
- if (!card)
75
- return -EINVAL;
7664
7765 return sprintf(buf, "%s\n", qeth_get_cardname_short(card));
7866 }
....@@ -97,8 +85,6 @@
9785 struct device_attribute *attr, char *buf)
9886 {
9987 struct qeth_card *card = dev_get_drvdata(dev);
100
- if (!card)
101
- return -EINVAL;
10288
10389 return sprintf(buf, "%s\n", qeth_get_bufsize_str(card));
10490 }
....@@ -109,8 +95,6 @@
10995 struct device_attribute *attr, char *buf)
11096 {
11197 struct qeth_card *card = dev_get_drvdata(dev);
112
- if (!card)
113
- return -EINVAL;
11498
11599 return sprintf(buf, "%i\n", card->dev->dev_port);
116100 }
....@@ -119,25 +103,21 @@
119103 struct device_attribute *attr, const char *buf, size_t count)
120104 {
121105 struct qeth_card *card = dev_get_drvdata(dev);
122
- char *tmp;
123106 unsigned int portno, limit;
124107 int rc = 0;
125108
126
- if (!card)
109
+ rc = kstrtouint(buf, 16, &portno);
110
+ if (rc)
111
+ return rc;
112
+ if (portno > QETH_MAX_PORTNO)
127113 return -EINVAL;
128114
129115 mutex_lock(&card->conf_mutex);
130
- if ((card->state != CARD_STATE_DOWN) &&
131
- (card->state != CARD_STATE_RECOVER)) {
116
+ if (card->state != CARD_STATE_DOWN) {
132117 rc = -EPERM;
133118 goto out;
134119 }
135120
136
- portno = simple_strtoul(buf, &tmp, 16);
137
- if (portno > QETH_MAX_PORTNO) {
138
- rc = -EINVAL;
139
- goto out;
140
- }
141121 limit = (card->ssqd.pcnt ? card->ssqd.pcnt - 1 : card->ssqd.pcnt);
142122 if (portno > limit) {
143123 rc = -EINVAL;
....@@ -175,9 +155,6 @@
175155 {
176156 struct qeth_card *card = dev_get_drvdata(dev);
177157
178
- if (!card)
179
- return -EINVAL;
180
-
181158 switch (card->qdio.do_prio_queueing) {
182159 case QETH_PRIO_Q_ING_PREC:
183160 return sprintf(buf, "%s\n", "by precedence");
....@@ -187,9 +164,11 @@
187164 return sprintf(buf, "%s\n", "by skb-priority");
188165 case QETH_PRIO_Q_ING_VLAN:
189166 return sprintf(buf, "%s\n", "by VLAN headers");
190
- default:
167
+ case QETH_PRIO_Q_ING_FIXED:
191168 return sprintf(buf, "always queue %i\n",
192169 card->qdio.default_out_queue);
170
+ default:
171
+ return sprintf(buf, "disabled\n");
193172 }
194173 }
195174
....@@ -199,12 +178,11 @@
199178 struct qeth_card *card = dev_get_drvdata(dev);
200179 int rc = 0;
201180
202
- if (!card)
203
- return -EINVAL;
181
+ if (IS_IQD(card) || IS_VM_NIC(card))
182
+ return -EOPNOTSUPP;
204183
205184 mutex_lock(&card->conf_mutex);
206
- if ((card->state != CARD_STATE_DOWN) &&
207
- (card->state != CARD_STATE_RECOVER)) {
185
+ if (card->state != CARD_STATE_DOWN) {
208186 rc = -EPERM;
209187 goto out;
210188 }
....@@ -228,27 +206,23 @@
228206 card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_TOS;
229207 card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
230208 } else if (sysfs_streq(buf, "prio_queueing_vlan")) {
231
- if (!card->options.layer2) {
232
- rc = -ENOTSUPP;
209
+ if (IS_LAYER3(card)) {
210
+ rc = -EOPNOTSUPP;
233211 goto out;
234212 }
235213 card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN;
236214 card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
237215 } else if (sysfs_streq(buf, "no_prio_queueing:0")) {
238
- card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
216
+ card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
239217 card->qdio.default_out_queue = 0;
240218 } else if (sysfs_streq(buf, "no_prio_queueing:1")) {
241
- card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
219
+ card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
242220 card->qdio.default_out_queue = 1;
243221 } else if (sysfs_streq(buf, "no_prio_queueing:2")) {
244
- card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
222
+ card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
245223 card->qdio.default_out_queue = 2;
246224 } else if (sysfs_streq(buf, "no_prio_queueing:3")) {
247
- if (card->info.type == QETH_CARD_TYPE_IQD) {
248
- rc = -EPERM;
249
- goto out;
250
- }
251
- card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
225
+ card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_FIXED;
252226 card->qdio.default_out_queue = 3;
253227 } else if (sysfs_streq(buf, "no_prio_queueing")) {
254228 card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
....@@ -268,9 +242,6 @@
268242 {
269243 struct qeth_card *card = dev_get_drvdata(dev);
270244
271
- if (!card)
272
- return -EINVAL;
273
-
274245 return sprintf(buf, "%i\n", card->qdio.in_buf_pool.buf_count);
275246 }
276247
....@@ -278,27 +249,22 @@
278249 struct device_attribute *attr, const char *buf, size_t count)
279250 {
280251 struct qeth_card *card = dev_get_drvdata(dev);
281
- char *tmp;
282
- int cnt, old_cnt;
252
+ unsigned int cnt;
283253 int rc = 0;
284254
285
- if (!card)
286
- return -EINVAL;
255
+ rc = kstrtouint(buf, 10, &cnt);
256
+ if (rc)
257
+ return rc;
287258
288259 mutex_lock(&card->conf_mutex);
289
- if ((card->state != CARD_STATE_DOWN) &&
290
- (card->state != CARD_STATE_RECOVER)) {
260
+ if (card->state != CARD_STATE_DOWN) {
291261 rc = -EPERM;
292262 goto out;
293263 }
294264
295
- old_cnt = card->qdio.in_buf_pool.buf_count;
296
- cnt = simple_strtoul(buf, &tmp, 10);
297
- cnt = (cnt < QETH_IN_BUF_COUNT_MIN) ? QETH_IN_BUF_COUNT_MIN :
298
- ((cnt > QETH_IN_BUF_COUNT_MAX) ? QETH_IN_BUF_COUNT_MAX : cnt);
299
- if (old_cnt != cnt) {
300
- rc = qeth_realloc_buffer_pool(card, cnt);
301
- }
265
+ cnt = clamp(cnt, QETH_IN_BUF_COUNT_MIN, QETH_IN_BUF_COUNT_MAX);
266
+ rc = qeth_resize_buffer_pool(card, cnt);
267
+
302268 out:
303269 mutex_unlock(&card->conf_mutex);
304270 return rc ? rc : count;
....@@ -311,20 +277,20 @@
311277 struct device_attribute *attr, const char *buf, size_t count)
312278 {
313279 struct qeth_card *card = dev_get_drvdata(dev);
314
- char *tmp;
315
- int i;
280
+ bool reset;
281
+ int rc;
316282
317
- if (!card)
318
- return -EINVAL;
283
+ rc = kstrtobool(buf, &reset);
284
+ if (rc)
285
+ return rc;
319286
320
- if (card->state != CARD_STATE_UP)
287
+ if (!qeth_card_hw_is_reachable(card))
321288 return -EPERM;
322289
323
- i = simple_strtoul(buf, &tmp, 16);
324
- if (i == 1)
325
- qeth_schedule_recovery(card);
290
+ if (reset)
291
+ rc = qeth_schedule_recovery(card);
326292
327
- return count;
293
+ return rc ? rc : count;
328294 }
329295
330296 static DEVICE_ATTR(recover, 0200, NULL, qeth_dev_recover_store);
....@@ -332,40 +298,33 @@
332298 static ssize_t qeth_dev_performance_stats_show(struct device *dev,
333299 struct device_attribute *attr, char *buf)
334300 {
335
- struct qeth_card *card = dev_get_drvdata(dev);
336
-
337
- if (!card)
338
- return -EINVAL;
339
-
340
- return sprintf(buf, "%i\n", card->options.performance_stats ? 1:0);
301
+ return sprintf(buf, "1\n");
341302 }
342303
343304 static ssize_t qeth_dev_performance_stats_store(struct device *dev,
344305 struct device_attribute *attr, const char *buf, size_t count)
345306 {
346307 struct qeth_card *card = dev_get_drvdata(dev);
347
- char *tmp;
348
- int i, rc = 0;
308
+ struct qeth_qdio_out_q *queue;
309
+ unsigned int i;
310
+ bool reset;
311
+ int rc;
349312
350
- if (!card)
351
- return -EINVAL;
313
+ rc = kstrtobool(buf, &reset);
314
+ if (rc)
315
+ return rc;
352316
353
- mutex_lock(&card->conf_mutex);
354
- i = simple_strtoul(buf, &tmp, 16);
355
- if ((i == 0) || (i == 1)) {
356
- if (i == card->options.performance_stats)
357
- goto out;
358
- card->options.performance_stats = i;
359
- if (i == 0)
360
- memset(&card->perf_stats, 0,
361
- sizeof(struct qeth_perf_stats));
362
- card->perf_stats.initial_rx_packets = card->stats.rx_packets;
363
- card->perf_stats.initial_tx_packets = card->stats.tx_packets;
364
- } else
365
- rc = -EINVAL;
366
-out:
367
- mutex_unlock(&card->conf_mutex);
368
- return rc ? rc : count;
317
+ if (reset) {
318
+ memset(&card->stats, 0, sizeof(card->stats));
319
+ for (i = 0; i < card->qdio.no_out_queues; i++) {
320
+ queue = card->qdio.out_qs[i];
321
+ if (!queue)
322
+ break;
323
+ memset(&queue->stats, 0, sizeof(queue->stats));
324
+ }
325
+ }
326
+
327
+ return count;
369328 }
370329
371330 static DEVICE_ATTR(performance_stats, 0644, qeth_dev_performance_stats_show,
....@@ -376,10 +335,7 @@
376335 {
377336 struct qeth_card *card = dev_get_drvdata(dev);
378337
379
- if (!card)
380
- return -EINVAL;
381
-
382
- return sprintf(buf, "%i\n", card->options.layer2);
338
+ return sprintf(buf, "%i\n", card->options.layer);
383339 }
384340
385341 static ssize_t qeth_dev_layer2_store(struct device *dev,
....@@ -387,21 +343,15 @@
387343 {
388344 struct qeth_card *card = dev_get_drvdata(dev);
389345 struct net_device *ndev;
390
- char *tmp;
391
- int i, rc = 0;
392346 enum qeth_discipline_id newdis;
347
+ unsigned int input;
348
+ int rc;
393349
394
- if (!card)
395
- return -EINVAL;
350
+ rc = kstrtouint(buf, 16, &input);
351
+ if (rc)
352
+ return rc;
396353
397
- mutex_lock(&card->discipline_mutex);
398
- if (card->state != CARD_STATE_DOWN) {
399
- rc = -EPERM;
400
- goto out;
401
- }
402
-
403
- i = simple_strtoul(buf, &tmp, 16);
404
- switch (i) {
354
+ switch (input) {
405355 case 0:
406356 newdis = QETH_DISCIPLINE_LAYER3;
407357 break;
....@@ -409,11 +359,16 @@
409359 newdis = QETH_DISCIPLINE_LAYER2;
410360 break;
411361 default:
412
- rc = -EINVAL;
362
+ return -EINVAL;
363
+ }
364
+
365
+ mutex_lock(&card->discipline_mutex);
366
+ if (card->state != CARD_STATE_DOWN) {
367
+ rc = -EPERM;
413368 goto out;
414369 }
415370
416
- if (card->options.layer2 == newdis)
371
+ if (card->options.layer == newdis)
417372 goto out;
418373 if (card->info.layer_enforced) {
419374 /* fixed layer, can't switch */
....@@ -421,7 +376,6 @@
421376 goto out;
422377 }
423378
424
- card->info.mac_bits = 0;
425379 if (card->discipline) {
426380 /* start with a new, pristine netdevice: */
427381 ndev = qeth_clone_netdev(card->dev);
....@@ -432,8 +386,6 @@
432386
433387 card->discipline->remove(card->gdev);
434388 qeth_core_free_discipline(card);
435
- card->options.layer2 = -1;
436
-
437389 free_netdev(card->dev);
438390 card->dev = ndev;
439391 }
....@@ -462,9 +414,6 @@
462414 {
463415 struct qeth_card *card = dev_get_drvdata(dev);
464416
465
- if (!card)
466
- return -EINVAL;
467
-
468417 switch (card->options.isolation) {
469418 case ISOLATION_MODE_NONE:
470419 return snprintf(buf, 6, "%s\n", ATTR_QETH_ISOLATION_NONE);
....@@ -484,12 +433,8 @@
484433 enum qeth_ipa_isolation_modes isolation;
485434 int rc = 0;
486435
487
- if (!card)
488
- return -EINVAL;
489
-
490436 mutex_lock(&card->conf_mutex);
491
- if (card->info.type != QETH_CARD_TYPE_OSD &&
492
- card->info.type != QETH_CARD_TYPE_OSX) {
437
+ if (!IS_OSD(card) && !IS_OSX(card)) {
493438 rc = -EOPNOTSUPP;
494439 dev_err(&card->gdev->dev, "Adapter does not "
495440 "support QDIO data connection isolation\n");
....@@ -507,19 +452,17 @@
507452 rc = -EINVAL;
508453 goto out;
509454 }
510
- rc = count;
511455
512
- /* defer IP assist if device is offline (until discipline->set_online)*/
513
- card->options.prev_isolation = card->options.isolation;
514
- card->options.isolation = isolation;
515
- if (qeth_card_hw_is_reachable(card)) {
516
- int ipa_rc = qeth_set_access_ctrl_online(card, 1);
517
- if (ipa_rc != 0)
518
- rc = ipa_rc;
519
- }
456
+ if (qeth_card_hw_is_reachable(card))
457
+ rc = qeth_setadpparms_set_access_ctrl(card, isolation);
458
+
459
+ if (!rc)
460
+ WRITE_ONCE(card->options.isolation, isolation);
461
+
520462 out:
521463 mutex_unlock(&card->conf_mutex);
522
- return rc;
464
+
465
+ return rc ? rc : count;
523466 }
524467
525468 static DEVICE_ATTR(isolation, 0644, qeth_dev_isolation_show,
....@@ -531,9 +474,6 @@
531474 struct qeth_card *card = dev_get_drvdata(dev);
532475 struct qeth_switch_info sw_info;
533476 int rc = 0;
534
-
535
- if (!card)
536
- return -EINVAL;
537477
538478 if (!qeth_card_hw_is_reachable(card))
539479 return sprintf(buf, "n/a\n");
....@@ -565,8 +505,6 @@
565505 {
566506 struct qeth_card *card = dev_get_drvdata(dev);
567507
568
- if (!card)
569
- return -EINVAL;
570508 if (card->info.hwtrap)
571509 return snprintf(buf, 5, "arm\n");
572510 else
....@@ -579,9 +517,6 @@
579517 struct qeth_card *card = dev_get_drvdata(dev);
580518 int rc = 0;
581519 int state = 0;
582
-
583
- if (!card)
584
- return -EINVAL;
585520
586521 mutex_lock(&card->conf_mutex);
587522 if (qeth_card_hw_is_reachable(card))
....@@ -617,36 +552,24 @@
617552 static DEVICE_ATTR(hw_trap, 0644, qeth_hw_trap_show,
618553 qeth_hw_trap_store);
619554
620
-static ssize_t qeth_dev_blkt_show(char *buf, struct qeth_card *card, int value)
621
-{
622
-
623
- if (!card)
624
- return -EINVAL;
625
-
626
- return sprintf(buf, "%i\n", value);
627
-}
628
-
629555 static ssize_t qeth_dev_blkt_store(struct qeth_card *card,
630556 const char *buf, size_t count, int *value, int max_value)
631557 {
632
- char *tmp;
633
- int i, rc = 0;
558
+ unsigned int input;
559
+ int rc;
634560
635
- if (!card)
561
+ rc = kstrtouint(buf, 10, &input);
562
+ if (rc)
563
+ return rc;
564
+
565
+ if (input > max_value)
636566 return -EINVAL;
637567
638568 mutex_lock(&card->conf_mutex);
639
- if ((card->state != CARD_STATE_DOWN) &&
640
- (card->state != CARD_STATE_RECOVER)) {
569
+ if (card->state != CARD_STATE_DOWN)
641570 rc = -EPERM;
642
- goto out;
643
- }
644
- i = simple_strtoul(buf, &tmp, 10);
645
- if (i <= max_value)
646
- *value = i;
647571 else
648
- rc = -EINVAL;
649
-out:
572
+ *value = input;
650573 mutex_unlock(&card->conf_mutex);
651574 return rc ? rc : count;
652575 }
....@@ -656,7 +579,7 @@
656579 {
657580 struct qeth_card *card = dev_get_drvdata(dev);
658581
659
- return qeth_dev_blkt_show(buf, card, card->info.blkt.time_total);
582
+ return sprintf(buf, "%i\n", card->info.blkt.time_total);
660583 }
661584
662585 static ssize_t qeth_dev_blkt_total_store(struct device *dev,
....@@ -668,8 +591,6 @@
668591 &card->info.blkt.time_total, 5000);
669592 }
670593
671
-
672
-
673594 static DEVICE_ATTR(total, 0644, qeth_dev_blkt_total_show,
674595 qeth_dev_blkt_total_store);
675596
....@@ -678,7 +599,7 @@
678599 {
679600 struct qeth_card *card = dev_get_drvdata(dev);
680601
681
- return qeth_dev_blkt_show(buf, card, card->info.blkt.inter_packet);
602
+ return sprintf(buf, "%i\n", card->info.blkt.inter_packet);
682603 }
683604
684605 static ssize_t qeth_dev_blkt_inter_store(struct device *dev,
....@@ -698,8 +619,7 @@
698619 {
699620 struct qeth_card *card = dev_get_drvdata(dev);
700621
701
- return qeth_dev_blkt_show(buf, card,
702
- card->info.blkt.inter_packet_jumbo);
622
+ return sprintf(buf, "%i\n", card->info.blkt.inter_packet_jumbo);
703623 }
704624
705625 static ssize_t qeth_dev_blkt_inter_jumbo_store(struct device *dev,