Skip to content

Commit c8c81de

Browse files
committed
Merge branch 's390-qeth-updates'
Julian Wiedmann says: ==================== s390/qeth: updates 2018-07-11 please apply this first batch of qeth patches for net-next. It brings the usual cleanups, and some performance improvements to the transmit paths. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 0761680 + fb321f2 commit c8c81de

File tree

6 files changed

+281
-259
lines changed

6 files changed

+281
-259
lines changed

drivers/s390/net/qeth_core.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,6 @@ struct qeth_qdio_out_buffer {
465465
struct sk_buff_head skb_list;
466466
int is_header[QDIO_MAX_ELEMENTS_PER_BUFFER];
467467

468-
struct qaob *aob;
469468
struct qeth_qdio_out_q *q;
470469
struct qeth_qdio_out_buffer *next_pending;
471470
};
@@ -662,7 +661,6 @@ struct qeth_card_info {
662661
int portno;
663662
enum qeth_card_types type;
664663
enum qeth_link_types link_type;
665-
int is_multicast_different;
666664
int initial_mtu;
667665
int max_mtu;
668666
int broadcast_capable;
@@ -935,6 +933,19 @@ static inline int qeth_send_simple_setassparms_v6(struct qeth_card *card,
935933
data, QETH_PROT_IPV6);
936934
}
937935

936+
int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb,
937+
int ipv);
938+
static inline struct qeth_qdio_out_q *qeth_get_tx_queue(struct qeth_card *card,
939+
struct sk_buff *skb,
940+
int ipv, int cast_type)
941+
{
942+
if (IS_IQD(card) && cast_type != RTN_UNICAST)
943+
return card->qdio.out_qs[card->qdio.no_out_queues - 1];
944+
if (!card->qdio.do_prio_queueing)
945+
return card->qdio.out_qs[card->qdio.default_out_queue];
946+
return card->qdio.out_qs[qeth_get_priority_queue(card, skb, ipv)];
947+
}
948+
938949
extern struct qeth_discipline qeth_l2_discipline;
939950
extern struct qeth_discipline qeth_l3_discipline;
940951
extern const struct attribute_group *qeth_generic_attr_groups[];
@@ -972,7 +983,6 @@ int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
972983
void *);
973984
struct qeth_cmd_buffer *qeth_get_ipacmd_buffer(struct qeth_card *,
974985
enum qeth_ipa_cmds, enum qeth_prot_versions);
975-
int qeth_query_setadapterparms(struct qeth_card *);
976986
struct sk_buff *qeth_core_get_next_skb(struct qeth_card *,
977987
struct qeth_qdio_buffer *, struct qdio_buffer_element **, int *,
978988
struct qeth_hdr **);
@@ -998,11 +1008,6 @@ int qeth_query_switch_attributes(struct qeth_card *card,
9981008
int qeth_send_control_data(struct qeth_card *, int, struct qeth_cmd_buffer *,
9991009
int (*reply_cb)(struct qeth_card *, struct qeth_reply*, unsigned long),
10001010
void *reply_param);
1001-
int qeth_bridgeport_query_ports(struct qeth_card *card,
1002-
enum qeth_sbp_roles *role, enum qeth_sbp_states *state);
1003-
int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role);
1004-
int qeth_bridgeport_an_set(struct qeth_card *card, int enable);
1005-
int qeth_get_priority_queue(struct qeth_card *, struct sk_buff *, int, int);
10061011
int qeth_get_elements_no(struct qeth_card *card, struct sk_buff *skb,
10071012
int extra_elems, int data_offset);
10081013
int qeth_get_elements_for_frags(struct sk_buff *);
@@ -1026,7 +1031,6 @@ int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback);
10261031
int qeth_hdr_chk_and_bounce(struct sk_buff *, struct qeth_hdr **, int);
10271032
int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
10281033
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
1029-
int qeth_query_ipassists(struct qeth_card *, enum qeth_prot_versions prot);
10301034
void qeth_trace_features(struct qeth_card *);
10311035
void qeth_close_dev(struct qeth_card *);
10321036
int qeth_send_setassparms(struct qeth_card *, struct qeth_cmd_buffer *, __u16,

drivers/s390/net/qeth_core_main.c

Lines changed: 45 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,6 @@ static void qeth_cleanup_handled_pending(struct qeth_qdio_out_q *q, int bidx,
473473
if (forced_cleanup && (atomic_read(&(q->bufs[bidx]->state)) ==
474474
QETH_QDIO_BUF_HANDLED_DELAYED)) {
475475
/* for recovery situations */
476-
q->bufs[bidx]->aob = q->bufstates[bidx].aob;
477476
qeth_init_qdio_out_buf(q, bidx);
478477
QETH_CARD_TEXT(q->card, 2, "clprecov");
479478
}
@@ -510,7 +509,6 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,
510509
}
511510
qeth_notify_skbs(buffer->q, buffer, notification);
512511

513-
buffer->aob = NULL;
514512
/* Free dangling allocations. The attached skbs are handled by
515513
* qeth_cleanup_handled_pending().
516514
*/
@@ -1267,32 +1265,27 @@ static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf)
12671265
}
12681266

12691267
static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
1270-
struct qeth_qdio_out_buffer *buf,
1271-
enum qeth_qdio_buffer_states newbufstate)
1268+
struct qeth_qdio_out_buffer *buf)
12721269
{
12731270
int i;
12741271

12751272
/* is PCI flag set on buffer? */
12761273
if (buf->buffer->element[0].sflags & SBAL_SFLAGS0_PCI_REQ)
12771274
atomic_dec(&queue->set_pci_flags_count);
12781275

1279-
if (newbufstate == QETH_QDIO_BUF_EMPTY) {
1280-
qeth_release_skbs(buf);
1281-
}
1276+
qeth_release_skbs(buf);
1277+
12821278
for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(queue->card); ++i) {
12831279
if (buf->buffer->element[i].addr && buf->is_header[i])
12841280
kmem_cache_free(qeth_core_header_cache,
12851281
buf->buffer->element[i].addr);
12861282
buf->is_header[i] = 0;
1287-
buf->buffer->element[i].length = 0;
1288-
buf->buffer->element[i].addr = NULL;
1289-
buf->buffer->element[i].eflags = 0;
1290-
buf->buffer->element[i].sflags = 0;
12911283
}
1292-
buf->buffer->element[15].eflags = 0;
1293-
buf->buffer->element[15].sflags = 0;
1284+
1285+
qeth_scrub_qdio_buffer(buf->buffer,
1286+
QETH_MAX_BUFFER_ELEMENTS(queue->card));
12941287
buf->next_element_to_fill = 0;
1295-
atomic_set(&buf->state, newbufstate);
1288+
atomic_set(&buf->state, QETH_QDIO_BUF_EMPTY);
12961289
}
12971290

12981291
static void qeth_clear_outq_buffers(struct qeth_qdio_out_q *q, int free)
@@ -1303,7 +1296,7 @@ static void qeth_clear_outq_buffers(struct qeth_qdio_out_q *q, int free)
13031296
if (!q->bufs[j])
13041297
continue;
13051298
qeth_cleanup_handled_pending(q, j, 1);
1306-
qeth_clear_output_buffer(q, q->bufs[j], QETH_QDIO_BUF_EMPTY);
1299+
qeth_clear_output_buffer(q, q->bufs[j]);
13071300
if (free) {
13081301
kmem_cache_free(qeth_qdio_outbuf_cache, q->bufs[j]);
13091302
q->bufs[j] = NULL;
@@ -1544,8 +1537,6 @@ static void qeth_determine_card_type(struct qeth_card *card)
15441537
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
15451538
card->info.type = CARD_RDEV(card)->id.driver_info;
15461539
card->qdio.no_out_queues = QETH_MAX_QUEUES;
1547-
if (card->info.type == QETH_CARD_TYPE_IQD)
1548-
card->info.is_multicast_different = 0x0103;
15491540
qeth_update_from_chp_desc(card);
15501541
}
15511542

@@ -2473,32 +2464,20 @@ static int qeth_ulp_setup(struct qeth_card *card)
24732464

24742465
static int qeth_init_qdio_out_buf(struct qeth_qdio_out_q *q, int bidx)
24752466
{
2476-
int rc;
24772467
struct qeth_qdio_out_buffer *newbuf;
24782468

2479-
rc = 0;
24802469
newbuf = kmem_cache_zalloc(qeth_qdio_outbuf_cache, GFP_ATOMIC);
2481-
if (!newbuf) {
2482-
rc = -ENOMEM;
2483-
goto out;
2484-
}
2470+
if (!newbuf)
2471+
return -ENOMEM;
2472+
24852473
newbuf->buffer = q->qdio_bufs[bidx];
24862474
skb_queue_head_init(&newbuf->skb_list);
24872475
lockdep_set_class(&newbuf->skb_list.lock, &qdio_out_skb_queue_key);
24882476
newbuf->q = q;
2489-
newbuf->aob = NULL;
24902477
newbuf->next_pending = q->bufs[bidx];
24912478
atomic_set(&newbuf->state, QETH_QDIO_BUF_EMPTY);
24922479
q->bufs[bidx] = newbuf;
2493-
if (q->bufstates) {
2494-
q->bufstates[bidx].user = newbuf;
2495-
QETH_CARD_TEXT_(q->card, 2, "nbs%d", bidx);
2496-
QETH_CARD_TEXT_(q->card, 2, "%lx", (long) newbuf);
2497-
QETH_CARD_TEXT_(q->card, 2, "%lx",
2498-
(long) newbuf->next_pending);
2499-
}
2500-
out:
2501-
return rc;
2480+
return 0;
25022481
}
25032482

25042483
static void qeth_free_qdio_out_buf(struct qeth_qdio_out_q *q)
@@ -2908,8 +2887,7 @@ int qeth_init_qdio_queues(struct qeth_card *card)
29082887
QDIO_MAX_BUFFERS_PER_Q);
29092888
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
29102889
qeth_clear_output_buffer(card->qdio.out_qs[i],
2911-
card->qdio.out_qs[i]->bufs[j],
2912-
QETH_QDIO_BUF_EMPTY);
2890+
card->qdio.out_qs[i]->bufs[j]);
29132891
}
29142892
card->qdio.out_qs[i]->card = card;
29152893
card->qdio.out_qs[i]->next_buf_to_fill = 0;
@@ -3076,7 +3054,7 @@ static struct qeth_cmd_buffer *qeth_get_adapter_cmd(struct qeth_card *card,
30763054
return iob;
30773055
}
30783056

3079-
int qeth_query_setadapterparms(struct qeth_card *card)
3057+
static int qeth_query_setadapterparms(struct qeth_card *card)
30803058
{
30813059
int rc;
30823060
struct qeth_cmd_buffer *iob;
@@ -3089,7 +3067,6 @@ int qeth_query_setadapterparms(struct qeth_card *card)
30893067
rc = qeth_send_ipa_cmd(card, iob, qeth_query_setadapterparms_cb, NULL);
30903068
return rc;
30913069
}
3092-
EXPORT_SYMBOL_GPL(qeth_query_setadapterparms);
30933070

30943071
static int qeth_query_ipassists_cb(struct qeth_card *card,
30953072
struct qeth_reply *reply, unsigned long data)
@@ -3129,7 +3106,8 @@ static int qeth_query_ipassists_cb(struct qeth_card *card,
31293106
return 0;
31303107
}
31313108

3132-
int qeth_query_ipassists(struct qeth_card *card, enum qeth_prot_versions prot)
3109+
static int qeth_query_ipassists(struct qeth_card *card,
3110+
enum qeth_prot_versions prot)
31333111
{
31343112
int rc;
31353113
struct qeth_cmd_buffer *iob;
@@ -3141,7 +3119,6 @@ int qeth_query_ipassists(struct qeth_card *card, enum qeth_prot_versions prot)
31413119
rc = qeth_send_ipa_cmd(card, iob, qeth_query_ipassists_cb, NULL);
31423120
return rc;
31433121
}
3144-
EXPORT_SYMBOL_GPL(qeth_query_ipassists);
31453122

31463123
static int qeth_query_switch_attributes_cb(struct qeth_card *card,
31473124
struct qeth_reply *reply, unsigned long data)
@@ -3180,7 +3157,6 @@ int qeth_query_switch_attributes(struct qeth_card *card,
31803157
return qeth_send_ipa_cmd(card, iob,
31813158
qeth_query_switch_attributes_cb, sw_info);
31823159
}
3183-
EXPORT_SYMBOL_GPL(qeth_query_switch_attributes);
31843160

31853161
static int qeth_query_setdiagass_cb(struct qeth_card *card,
31863162
struct qeth_reply *reply, unsigned long data)
@@ -3634,10 +3610,10 @@ int qeth_configure_cq(struct qeth_card *card, enum qeth_cq cq)
36343610
}
36353611
EXPORT_SYMBOL_GPL(qeth_configure_cq);
36363612

3637-
3638-
static void qeth_qdio_cq_handler(struct qeth_card *card,
3639-
unsigned int qdio_err,
3640-
unsigned int queue, int first_element, int count) {
3613+
static void qeth_qdio_cq_handler(struct qeth_card *card, unsigned int qdio_err,
3614+
unsigned int queue, int first_element,
3615+
int count)
3616+
{
36413617
struct qeth_qdio_q *cq = card->qdio.c_q;
36423618
int i;
36433619
int rc;
@@ -3663,25 +3639,17 @@ static void qeth_qdio_cq_handler(struct qeth_card *card,
36633639
for (i = first_element; i < first_element + count; ++i) {
36643640
int bidx = i % QDIO_MAX_BUFFERS_PER_Q;
36653641
struct qdio_buffer *buffer = cq->qdio_bufs[bidx];
3666-
int e;
3642+
int e = 0;
36673643

3668-
e = 0;
36693644
while ((e < QDIO_MAX_ELEMENTS_PER_BUFFER) &&
36703645
buffer->element[e].addr) {
36713646
unsigned long phys_aob_addr;
36723647

36733648
phys_aob_addr = (unsigned long) buffer->element[e].addr;
36743649
qeth_qdio_handle_aob(card, phys_aob_addr);
3675-
buffer->element[e].addr = NULL;
3676-
buffer->element[e].eflags = 0;
3677-
buffer->element[e].sflags = 0;
3678-
buffer->element[e].length = 0;
3679-
36803650
++e;
36813651
}
3682-
3683-
buffer->element[15].eflags = 0;
3684-
buffer->element[15].sflags = 0;
3652+
qeth_scrub_qdio_buffer(buffer, QDIO_MAX_ELEMENTS_PER_BUFFER);
36853653
}
36863654
rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, queue,
36873655
card->qdio.c_q->next_buf_to_init,
@@ -3760,11 +3728,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev,
37603728
qeth_notify_skbs(queue, buffer,
37613729
TX_NOTIFY_PENDING);
37623730
}
3763-
buffer->aob = queue->bufstates[bidx].aob;
37643731
QETH_CARD_TEXT_(queue->card, 5, "pel%d", bidx);
3765-
QETH_CARD_TEXT(queue->card, 5, "aob");
3766-
QETH_CARD_TEXT_(queue->card, 5, "%lx",
3767-
virt_to_phys(buffer->aob));
37683732

37693733
/* prepare the queue slot for re-use: */
37703734
qeth_scrub_qdio_buffer(buffer->buffer,
@@ -3782,8 +3746,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev,
37823746
qeth_notify_skbs(queue, buffer, n);
37833747
}
37843748

3785-
qeth_clear_output_buffer(queue, buffer,
3786-
QETH_QDIO_BUF_EMPTY);
3749+
qeth_clear_output_buffer(queue, buffer);
37873750
}
37883751
qeth_cleanup_handled_pending(queue, bidx, 0);
37893752
}
@@ -3810,15 +3773,11 @@ static inline int qeth_cut_iqd_prio(struct qeth_card *card, int queue_num)
38103773
* Note: Function assumes that we have 4 outbound queues.
38113774
*/
38123775
int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb,
3813-
int ipv, int cast_type)
3776+
int ipv)
38143777
{
38153778
__be16 *tci;
38163779
u8 tos;
38173780

3818-
if (cast_type && card->info.is_multicast_different)
3819-
return card->info.is_multicast_different &
3820-
(card->qdio.no_out_queues - 1);
3821-
38223781
switch (card->qdio.do_prio_queueing) {
38233782
case QETH_PRIO_Q_ING_TOS:
38243783
case QETH_PRIO_Q_ING_PREC:
@@ -5887,31 +5846,13 @@ static int qeth_core_restore(struct ccwgroup_device *gdev)
58875846
return 0;
58885847
}
58895848

5890-
static struct ccwgroup_driver qeth_core_ccwgroup_driver = {
5891-
.driver = {
5892-
.owner = THIS_MODULE,
5893-
.name = "qeth",
5894-
},
5895-
.ccw_driver = &qeth_ccw_driver,
5896-
.setup = qeth_core_probe_device,
5897-
.remove = qeth_core_remove_device,
5898-
.set_online = qeth_core_set_online,
5899-
.set_offline = qeth_core_set_offline,
5900-
.shutdown = qeth_core_shutdown,
5901-
.prepare = NULL,
5902-
.complete = NULL,
5903-
.freeze = qeth_core_freeze,
5904-
.thaw = qeth_core_thaw,
5905-
.restore = qeth_core_restore,
5906-
};
5907-
59085849
static ssize_t group_store(struct device_driver *ddrv, const char *buf,
59095850
size_t count)
59105851
{
59115852
int err;
59125853

5913-
err = ccwgroup_create_dev(qeth_core_root_dev,
5914-
&qeth_core_ccwgroup_driver, 3, buf);
5854+
err = ccwgroup_create_dev(qeth_core_root_dev, to_ccwgroupdrv(ddrv), 3,
5855+
buf);
59155856

59165857
return err ? err : count;
59175858
}
@@ -5929,6 +5870,25 @@ static const struct attribute_group *qeth_drv_attr_groups[] = {
59295870
NULL,
59305871
};
59315872

5873+
static struct ccwgroup_driver qeth_core_ccwgroup_driver = {
5874+
.driver = {
5875+
.groups = qeth_drv_attr_groups,
5876+
.owner = THIS_MODULE,
5877+
.name = "qeth",
5878+
},
5879+
.ccw_driver = &qeth_ccw_driver,
5880+
.setup = qeth_core_probe_device,
5881+
.remove = qeth_core_remove_device,
5882+
.set_online = qeth_core_set_online,
5883+
.set_offline = qeth_core_set_offline,
5884+
.shutdown = qeth_core_shutdown,
5885+
.prepare = NULL,
5886+
.complete = NULL,
5887+
.freeze = qeth_core_freeze,
5888+
.thaw = qeth_core_thaw,
5889+
.restore = qeth_core_restore,
5890+
};
5891+
59325892
int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
59335893
{
59345894
struct qeth_card *card = dev->ml_priv;
@@ -6620,7 +6580,6 @@ static int __init qeth_core_init(void)
66206580
rc = ccw_driver_register(&qeth_ccw_driver);
66216581
if (rc)
66226582
goto ccw_err;
6623-
qeth_core_ccwgroup_driver.driver.groups = qeth_drv_attr_groups;
66246583
rc = ccwgroup_driver_register(&qeth_core_ccwgroup_driver);
66256584
if (rc)
66266585
goto ccwgroup_err;

drivers/s390/net/qeth_core_mpc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ enum qeth_card_types {
6464
QETH_CARD_TYPE_OSX = 2,
6565
};
6666

67+
#define IS_IQD(card) ((card)->info.type == QETH_CARD_TYPE_IQD)
68+
6769
#define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18
6870
/* only the first two bytes are looked at in qeth_get_cardname_short */
6971
enum qeth_link_types {

drivers/s390/net/qeth_l2.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ extern const struct attribute_group *qeth_l2_attr_groups[];
1414
int qeth_l2_create_device_attributes(struct device *);
1515
void qeth_l2_remove_device_attributes(struct device *);
1616
void qeth_l2_setup_bridgeport_attrs(struct qeth_card *card);
17+
int qeth_bridgeport_query_ports(struct qeth_card *card,
18+
enum qeth_sbp_roles *role,
19+
enum qeth_sbp_states *state);
20+
int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role);
21+
int qeth_bridgeport_an_set(struct qeth_card *card, int enable);
1722

1823
int qeth_l2_vnicc_set_state(struct qeth_card *card, u32 vnicc, bool state);
1924
int qeth_l2_vnicc_get_state(struct qeth_card *card, u32 vnicc, bool *state);

0 commit comments

Comments
 (0)