Commit 6047862d authored by David S. Miller's avatar David S. Miller

Merge branch 's390-qeth-next'

Julian Wiedmann says:

====================
s390/qeth: updates 2021-10-25

please apply the following patch series for qeth to netdev's net-next tree.

This brings some minor maintenance improvements, and a bunch of cleanups
so that the W=1 build passes without warning.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 57bb1132 56c5af25
...@@ -349,8 +349,6 @@ extern int qdio_allocate(struct ccw_device *cdev, unsigned int no_input_qs, ...@@ -349,8 +349,6 @@ extern int qdio_allocate(struct ccw_device *cdev, unsigned int no_input_qs,
extern int qdio_establish(struct ccw_device *cdev, extern int qdio_establish(struct ccw_device *cdev,
struct qdio_initialize *init_data); struct qdio_initialize *init_data);
extern int qdio_activate(struct ccw_device *); extern int qdio_activate(struct ccw_device *);
extern struct qaob *qdio_allocate_aob(void);
extern void qdio_release_aob(struct qaob *);
extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, int q_nr, extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, int q_nr,
unsigned int bufnr, unsigned int count, struct qaob *aob); unsigned int bufnr, unsigned int count, struct qaob *aob);
extern int qdio_start_irq(struct ccw_device *cdev); extern int qdio_start_irq(struct ccw_device *cdev);
......
...@@ -24,19 +24,6 @@ ...@@ -24,19 +24,6 @@
#define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer)) #define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer))
static struct kmem_cache *qdio_q_cache; static struct kmem_cache *qdio_q_cache;
static struct kmem_cache *qdio_aob_cache;
struct qaob *qdio_allocate_aob(void)
{
return kmem_cache_zalloc(qdio_aob_cache, GFP_ATOMIC);
}
EXPORT_SYMBOL_GPL(qdio_allocate_aob);
void qdio_release_aob(struct qaob *aob)
{
kmem_cache_free(qdio_aob_cache, aob);
}
EXPORT_SYMBOL_GPL(qdio_release_aob);
/** /**
* qdio_free_buffers() - free qdio buffers * qdio_free_buffers() - free qdio buffers
...@@ -447,39 +434,22 @@ void qdio_print_subchannel_info(struct qdio_irq *irq_ptr) ...@@ -447,39 +434,22 @@ void qdio_print_subchannel_info(struct qdio_irq *irq_ptr)
int __init qdio_setup_init(void) int __init qdio_setup_init(void)
{ {
int rc;
qdio_q_cache = kmem_cache_create("qdio_q", sizeof(struct qdio_q), qdio_q_cache = kmem_cache_create("qdio_q", sizeof(struct qdio_q),
256, 0, NULL); 256, 0, NULL);
if (!qdio_q_cache) if (!qdio_q_cache)
return -ENOMEM; return -ENOMEM;
qdio_aob_cache = kmem_cache_create("qdio_aob",
sizeof(struct qaob),
sizeof(struct qaob),
0,
NULL);
if (!qdio_aob_cache) {
rc = -ENOMEM;
goto free_qdio_q_cache;
}
/* Check for OSA/FCP thin interrupts (bit 67). */ /* Check for OSA/FCP thin interrupts (bit 67). */
DBF_EVENT("thinint:%1d", DBF_EVENT("thinint:%1d",
(css_general_characteristics.aif_osa) ? 1 : 0); (css_general_characteristics.aif_osa) ? 1 : 0);
/* Check for QEBSM support in general (bit 58). */ /* Check for QEBSM support in general (bit 58). */
DBF_EVENT("cssQEBSM:%1d", css_general_characteristics.qebsm); DBF_EVENT("cssQEBSM:%1d", css_general_characteristics.qebsm);
rc = 0;
out: return 0;
return rc;
free_qdio_q_cache:
kmem_cache_destroy(qdio_q_cache);
goto out;
} }
void qdio_setup_exit(void) void qdio_setup_exit(void)
{ {
kmem_cache_destroy(qdio_aob_cache);
kmem_cache_destroy(qdio_q_cache); kmem_cache_destroy(qdio_q_cache);
} }
...@@ -545,7 +545,6 @@ static inline bool qeth_out_queue_is_empty(struct qeth_qdio_out_q *queue) ...@@ -545,7 +545,6 @@ static inline bool qeth_out_queue_is_empty(struct qeth_qdio_out_q *queue)
struct qeth_qdio_info { struct qeth_qdio_info {
atomic_t state; atomic_t state;
/* input */ /* input */
int no_in_queues;
struct qeth_qdio_q *in_q; struct qeth_qdio_q *in_q;
struct qeth_qdio_q *c_q; struct qeth_qdio_q *c_q;
struct qeth_qdio_buffer_pool in_buf_pool; struct qeth_qdio_buffer_pool in_buf_pool;
...@@ -771,8 +770,6 @@ struct qeth_discipline { ...@@ -771,8 +770,6 @@ struct qeth_discipline {
void (*remove) (struct ccwgroup_device *); void (*remove) (struct ccwgroup_device *);
int (*set_online)(struct qeth_card *card, bool carrier_ok); int (*set_online)(struct qeth_card *card, bool carrier_ok);
void (*set_offline)(struct qeth_card *card); void (*set_offline)(struct qeth_card *card);
int (*do_ioctl)(struct net_device *dev, struct ifreq *rq,
void __user *data, int cmd);
int (*control_event_handler)(struct qeth_card *card, int (*control_event_handler)(struct qeth_card *card,
struct qeth_ipa_cmd *cmd); struct qeth_ipa_cmd *cmd);
}; };
...@@ -1087,6 +1084,7 @@ int qeth_setadpparms_set_access_ctrl(struct qeth_card *card, ...@@ -1087,6 +1084,7 @@ int qeth_setadpparms_set_access_ctrl(struct qeth_card *card,
int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq,
void __user *data, int cmd); void __user *data, int cmd);
__printf(3, 4)
void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...); void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
int qeth_configure_cq(struct qeth_card *, enum qeth_cq); int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action); int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
......
...@@ -59,6 +59,7 @@ EXPORT_SYMBOL_GPL(qeth_dbf); ...@@ -59,6 +59,7 @@ EXPORT_SYMBOL_GPL(qeth_dbf);
static struct kmem_cache *qeth_core_header_cache; static struct kmem_cache *qeth_core_header_cache;
static struct kmem_cache *qeth_qdio_outbuf_cache; static struct kmem_cache *qeth_qdio_outbuf_cache;
static struct kmem_cache *qeth_qaob_cache;
static struct device *qeth_core_root_dev; static struct device *qeth_core_root_dev;
static struct dentry *qeth_debugfs_root; static struct dentry *qeth_debugfs_root;
...@@ -354,8 +355,8 @@ static int qeth_cq_init(struct qeth_card *card) ...@@ -354,8 +355,8 @@ static int qeth_cq_init(struct qeth_card *card)
qdio_reset_buffers(card->qdio.c_q->qdio_bufs, qdio_reset_buffers(card->qdio.c_q->qdio_bufs,
QDIO_MAX_BUFFERS_PER_Q); QDIO_MAX_BUFFERS_PER_Q);
card->qdio.c_q->next_buf_to_init = 127; card->qdio.c_q->next_buf_to_init = 127;
rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 1, 0, 127,
card->qdio.no_in_queues - 1, 0, 127, NULL); NULL);
if (rc) { if (rc) {
QETH_CARD_TEXT_(card, 2, "1err%d", rc); QETH_CARD_TEXT_(card, 2, "1err%d", rc);
goto out; goto out;
...@@ -375,21 +376,16 @@ static int qeth_alloc_cq(struct qeth_card *card) ...@@ -375,21 +376,16 @@ static int qeth_alloc_cq(struct qeth_card *card)
dev_err(&card->gdev->dev, "Failed to create completion queue\n"); dev_err(&card->gdev->dev, "Failed to create completion queue\n");
return -ENOMEM; return -ENOMEM;
} }
card->qdio.no_in_queues = 2;
} else { } else {
QETH_CARD_TEXT(card, 2, "nocq"); QETH_CARD_TEXT(card, 2, "nocq");
card->qdio.c_q = NULL; card->qdio.c_q = NULL;
card->qdio.no_in_queues = 1;
} }
QETH_CARD_TEXT_(card, 2, "iqc%d", card->qdio.no_in_queues);
return 0; return 0;
} }
static void qeth_free_cq(struct qeth_card *card) static void qeth_free_cq(struct qeth_card *card)
{ {
if (card->qdio.c_q) { if (card->qdio.c_q) {
--card->qdio.no_in_queues;
qeth_free_qdio_queue(card->qdio.c_q); qeth_free_qdio_queue(card->qdio.c_q);
card->qdio.c_q = NULL; card->qdio.c_q = NULL;
} }
...@@ -1338,7 +1334,7 @@ static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue, ...@@ -1338,7 +1334,7 @@ static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
static void qeth_free_out_buf(struct qeth_qdio_out_buffer *buf) static void qeth_free_out_buf(struct qeth_qdio_out_buffer *buf)
{ {
if (buf->aob) if (buf->aob)
qdio_release_aob(buf->aob); kmem_cache_free(qeth_qaob_cache, buf->aob);
kmem_cache_free(qeth_qdio_outbuf_cache, buf); kmem_cache_free(qeth_qdio_outbuf_cache, buf);
} }
...@@ -1458,7 +1454,6 @@ static void qeth_init_qdio_info(struct qeth_card *card) ...@@ -1458,7 +1454,6 @@ static void qeth_init_qdio_info(struct qeth_card *card)
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
/* inbound */ /* inbound */
card->qdio.no_in_queues = 1;
card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT; card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT;
if (IS_IQD(card)) if (IS_IQD(card))
card->qdio.init_pool.buf_count = QETH_IN_BUF_COUNT_HSDEFAULT; card->qdio.init_pool.buf_count = QETH_IN_BUF_COUNT_HSDEFAULT;
...@@ -1930,9 +1925,9 @@ static struct qeth_cmd_buffer *qeth_mpc_alloc_cmd(struct qeth_card *card, ...@@ -1930,9 +1925,9 @@ static struct qeth_cmd_buffer *qeth_mpc_alloc_cmd(struct qeth_card *card,
* @card: qeth_card structure pointer * @card: qeth_card structure pointer
* @iob: qeth_cmd_buffer pointer * @iob: qeth_cmd_buffer pointer
* @reply_cb: callback function pointer * @reply_cb: callback function pointer
* @cb_card: pointer to the qeth_card structure * cb_card: pointer to the qeth_card structure
* @cb_reply: pointer to the qeth_reply structure * cb_reply: pointer to the qeth_reply structure
* @cb_cmd: pointer to the original iob for non-IPA * cb_cmd: pointer to the original iob for non-IPA
* commands, or to the qeth_ipa_cmd structure * commands, or to the qeth_ipa_cmd structure
* for the IPA commands. * for the IPA commands.
* @reply_param: private pointer passed to the callback * @reply_param: private pointer passed to the callback
...@@ -2629,7 +2624,7 @@ static void qeth_free_qdio_queues(struct qeth_card *card) ...@@ -2629,7 +2624,7 @@ static void qeth_free_qdio_queues(struct qeth_card *card)
qeth_free_cq(card); qeth_free_cq(card);
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) { for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
if (card->qdio.in_q->bufs[j].rx_skb) if (card->qdio.in_q->bufs[j].rx_skb)
dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb); consume_skb(card->qdio.in_q->bufs[j].rx_skb);
} }
qeth_free_qdio_queue(card->qdio.in_q); qeth_free_qdio_queue(card->qdio.in_q);
card->qdio.in_q = NULL; card->qdio.in_q = NULL;
...@@ -3039,7 +3034,7 @@ static int qeth_send_ipa_cmd_cb(struct qeth_card *card, ...@@ -3039,7 +3034,7 @@ static int qeth_send_ipa_cmd_cb(struct qeth_card *card,
return (cmd->hdr.return_code) ? -EIO : 0; return (cmd->hdr.return_code) ? -EIO : 0;
} }
/** /*
* qeth_send_ipa_cmd() - send an IPA command * qeth_send_ipa_cmd() - send an IPA command
* *
* See qeth_send_control_data() for explanation of the arguments. * See qeth_send_control_data() for explanation of the arguments.
...@@ -3554,7 +3549,8 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index, ...@@ -3554,7 +3549,8 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
!qeth_iqd_is_mcast_queue(card, queue) && !qeth_iqd_is_mcast_queue(card, queue) &&
count == 1) { count == 1) {
if (!buf->aob) if (!buf->aob)
buf->aob = qdio_allocate_aob(); buf->aob = kmem_cache_zalloc(qeth_qaob_cache,
GFP_ATOMIC);
if (buf->aob) { if (buf->aob) {
struct qeth_qaob_priv1 *priv; struct qeth_qaob_priv1 *priv;
...@@ -3780,7 +3776,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev, ...@@ -3780,7 +3776,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev,
qeth_schedule_recovery(card); qeth_schedule_recovery(card);
} }
/** /*
* Note: Function assumes that we have 4 outbound queues. * Note: Function assumes that we have 4 outbound queues.
*/ */
int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb) int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
...@@ -3877,12 +3873,14 @@ static unsigned int qeth_count_elements(struct sk_buff *skb, ...@@ -3877,12 +3873,14 @@ static unsigned int qeth_count_elements(struct sk_buff *skb,
/** /**
* qeth_add_hw_header() - add a HW header to an skb. * qeth_add_hw_header() - add a HW header to an skb.
* @queue: TX queue that the skb will be placed on.
* @skb: skb that the HW header should be added to. * @skb: skb that the HW header should be added to.
* @hdr: double pointer to a qeth_hdr. When returning with >= 0, * @hdr: double pointer to a qeth_hdr. When returning with >= 0,
* it contains a valid pointer to a qeth_hdr. * it contains a valid pointer to a qeth_hdr.
* @hdr_len: length of the HW header. * @hdr_len: length of the HW header.
* @proto_len: length of protocol headers that need to be in same page as the * @proto_len: length of protocol headers that need to be in same page as the
* HW header. * HW header.
* @elements: returns the required number of buffer elements for this skb.
* *
* Returns the pushed length. If the header can't be pushed on * Returns the pushed length. If the header can't be pushed on
* (eg. because it would cross a page boundary), it is allocated from * (eg. because it would cross a page boundary), it is allocated from
...@@ -5139,6 +5137,7 @@ static int qeth_qdio_establish(struct qeth_card *card) ...@@ -5139,6 +5137,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
struct qdio_buffer **in_sbal_ptrs[QETH_MAX_IN_QUEUES]; struct qdio_buffer **in_sbal_ptrs[QETH_MAX_IN_QUEUES];
struct qeth_qib_parms *qib_parms = NULL; struct qeth_qib_parms *qib_parms = NULL;
struct qdio_initialize init_data; struct qdio_initialize init_data;
unsigned int no_input_qs = 1;
unsigned int i; unsigned int i;
int rc = 0; int rc = 0;
...@@ -5153,8 +5152,10 @@ static int qeth_qdio_establish(struct qeth_card *card) ...@@ -5153,8 +5152,10 @@ static int qeth_qdio_establish(struct qeth_card *card)
} }
in_sbal_ptrs[0] = card->qdio.in_q->qdio_bufs; in_sbal_ptrs[0] = card->qdio.in_q->qdio_bufs;
if (card->options.cq == QETH_CQ_ENABLED) if (card->options.cq == QETH_CQ_ENABLED) {
in_sbal_ptrs[1] = card->qdio.c_q->qdio_bufs; in_sbal_ptrs[1] = card->qdio.c_q->qdio_bufs;
no_input_qs++;
}
for (i = 0; i < card->qdio.no_out_queues; i++) for (i = 0; i < card->qdio.no_out_queues; i++)
out_sbal_ptrs[i] = card->qdio.out_qs[i]->qdio_bufs; out_sbal_ptrs[i] = card->qdio.out_qs[i]->qdio_bufs;
...@@ -5164,7 +5165,7 @@ static int qeth_qdio_establish(struct qeth_card *card) ...@@ -5164,7 +5165,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
QDIO_QETH_QFMT; QDIO_QETH_QFMT;
init_data.qib_param_field_format = 0; init_data.qib_param_field_format = 0;
init_data.qib_param_field = (void *)qib_parms; init_data.qib_param_field = (void *)qib_parms;
init_data.no_input_qs = card->qdio.no_in_queues; init_data.no_input_qs = no_input_qs;
init_data.no_output_qs = card->qdio.no_out_queues; init_data.no_output_qs = card->qdio.no_out_queues;
init_data.input_handler = qeth_qdio_input_handler; init_data.input_handler = qeth_qdio_input_handler;
init_data.output_handler = qeth_qdio_output_handler; init_data.output_handler = qeth_qdio_output_handler;
...@@ -5604,7 +5605,7 @@ static void qeth_receive_skb(struct qeth_card *card, struct sk_buff *skb, ...@@ -5604,7 +5605,7 @@ static void qeth_receive_skb(struct qeth_card *card, struct sk_buff *skb,
if (uses_frags) if (uses_frags)
napi_free_frags(napi); napi_free_frags(napi);
else else
dev_kfree_skb_any(skb); kfree_skb(skb);
return; return;
} }
...@@ -5795,7 +5796,7 @@ static int qeth_extract_skb(struct qeth_card *card, ...@@ -5795,7 +5796,7 @@ static int qeth_extract_skb(struct qeth_card *card,
if (uses_frags) if (uses_frags)
napi_free_frags(napi); napi_free_frags(napi);
else else
dev_kfree_skb_any(skb); kfree_skb(skb);
QETH_CARD_STAT_INC(card, QETH_CARD_STAT_INC(card,
rx_length_errors); rx_length_errors);
} }
...@@ -6600,10 +6601,7 @@ int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *d ...@@ -6600,10 +6601,7 @@ int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *d
rc = qeth_query_oat_command(card, data); rc = qeth_query_oat_command(card, data);
break; break;
default: default:
if (card->discipline->do_ioctl) rc = -EOPNOTSUPP;
rc = card->discipline->do_ioctl(dev, rq, data, cmd);
else
rc = -EOPNOTSUPP;
} }
if (rc) if (rc)
QETH_CARD_TEXT_(card, 2, "ioce%x", rc); QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
...@@ -7177,6 +7175,16 @@ static int __init qeth_core_init(void) ...@@ -7177,6 +7175,16 @@ static int __init qeth_core_init(void)
rc = -ENOMEM; rc = -ENOMEM;
goto cqslab_err; goto cqslab_err;
} }
qeth_qaob_cache = kmem_cache_create("qeth_qaob",
sizeof(struct qaob),
sizeof(struct qaob),
0, NULL);
if (!qeth_qaob_cache) {
rc = -ENOMEM;
goto qaob_err;
}
rc = ccw_driver_register(&qeth_ccw_driver); rc = ccw_driver_register(&qeth_ccw_driver);
if (rc) if (rc)
goto ccw_err; goto ccw_err;
...@@ -7189,6 +7197,8 @@ static int __init qeth_core_init(void) ...@@ -7189,6 +7197,8 @@ static int __init qeth_core_init(void)
ccwgroup_err: ccwgroup_err:
ccw_driver_unregister(&qeth_ccw_driver); ccw_driver_unregister(&qeth_ccw_driver);
ccw_err: ccw_err:
kmem_cache_destroy(qeth_qaob_cache);
qaob_err:
kmem_cache_destroy(qeth_qdio_outbuf_cache); kmem_cache_destroy(qeth_qdio_outbuf_cache);
cqslab_err: cqslab_err:
kmem_cache_destroy(qeth_core_header_cache); kmem_cache_destroy(qeth_core_header_cache);
...@@ -7207,6 +7217,7 @@ static void __exit qeth_core_exit(void) ...@@ -7207,6 +7217,7 @@ static void __exit qeth_core_exit(void)
qeth_clear_dbf_list(); qeth_clear_dbf_list();
ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver); ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver);
ccw_driver_unregister(&qeth_ccw_driver); ccw_driver_unregister(&qeth_ccw_driver);
kmem_cache_destroy(qeth_qaob_cache);
kmem_cache_destroy(qeth_qdio_outbuf_cache); kmem_cache_destroy(qeth_qdio_outbuf_cache);
kmem_cache_destroy(qeth_core_header_cache); kmem_cache_destroy(qeth_core_header_cache);
root_device_unregister(qeth_core_root_dev); root_device_unregister(qeth_core_root_dev);
......
...@@ -121,11 +121,11 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac) ...@@ -121,11 +121,11 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)
QETH_CARD_TEXT(card, 2, "L2Wmac"); QETH_CARD_TEXT(card, 2, "L2Wmac");
rc = qeth_l2_send_setdelmac(card, mac, cmd); rc = qeth_l2_send_setdelmac(card, mac, cmd);
if (rc == -EADDRINUSE) if (rc == -EADDRINUSE)
QETH_DBF_MESSAGE(2, "MAC already registered on device %x\n", QETH_DBF_MESSAGE(2, "MAC address %012llx is already registered on device %x\n",
CARD_DEVID(card)); ether_addr_to_u64(mac), CARD_DEVID(card));
else if (rc) else if (rc)
QETH_DBF_MESSAGE(2, "Failed to register MAC on device %x: %d\n", QETH_DBF_MESSAGE(2, "Failed to register MAC address %012llx on device %x: %d\n",
CARD_DEVID(card), rc); ether_addr_to_u64(mac), CARD_DEVID(card), rc);
return rc; return rc;
} }
...@@ -138,8 +138,8 @@ static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac) ...@@ -138,8 +138,8 @@ static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)
QETH_CARD_TEXT(card, 2, "L2Rmac"); QETH_CARD_TEXT(card, 2, "L2Rmac");
rc = qeth_l2_send_setdelmac(card, mac, cmd); rc = qeth_l2_send_setdelmac(card, mac, cmd);
if (rc) if (rc)
QETH_DBF_MESSAGE(2, "Failed to delete MAC on device %u: %d\n", QETH_DBF_MESSAGE(2, "Failed to delete MAC address %012llx on device %x: %d\n",
CARD_DEVID(card), rc); ether_addr_to_u64(mac), CARD_DEVID(card), rc);
return rc; return rc;
} }
...@@ -661,13 +661,13 @@ static void qeth_l2_dev2br_fdb_notify(struct qeth_card *card, u8 code, ...@@ -661,13 +661,13 @@ static void qeth_l2_dev2br_fdb_notify(struct qeth_card *card, u8 code,
card->dev, &info.info, NULL); card->dev, &info.info, NULL);
QETH_CARD_TEXT(card, 4, "andelmac"); QETH_CARD_TEXT(card, 4, "andelmac");
QETH_CARD_TEXT_(card, 4, QETH_CARD_TEXT_(card, 4,
"mc%012lx", ether_addr_to_u64(ntfy_mac)); "mc%012llx", ether_addr_to_u64(ntfy_mac));
} else { } else {
call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE, call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE,
card->dev, &info.info, NULL); card->dev, &info.info, NULL);
QETH_CARD_TEXT(card, 4, "anaddmac"); QETH_CARD_TEXT(card, 4, "anaddmac");
QETH_CARD_TEXT_(card, 4, QETH_CARD_TEXT_(card, 4,
"mc%012lx", ether_addr_to_u64(ntfy_mac)); "mc%012llx", ether_addr_to_u64(ntfy_mac));
} }
} }
...@@ -765,8 +765,8 @@ static void qeth_l2_br2dev_worker(struct work_struct *work) ...@@ -765,8 +765,8 @@ static void qeth_l2_br2dev_worker(struct work_struct *work)
int err = 0; int err = 0;
kfree(br2dev_event_work); kfree(br2dev_event_work);
QETH_CARD_TEXT_(card, 4, "b2dw%04x", event); QETH_CARD_TEXT_(card, 4, "b2dw%04lx", event);
QETH_CARD_TEXT_(card, 4, "ma%012lx", ether_addr_to_u64(addr)); QETH_CARD_TEXT_(card, 4, "ma%012llx", ether_addr_to_u64(addr));
rcu_read_lock(); rcu_read_lock();
/* Verify preconditions are still valid: */ /* Verify preconditions are still valid: */
...@@ -795,7 +795,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work) ...@@ -795,7 +795,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work)
if (err) { if (err) {
QETH_CARD_TEXT(card, 2, "b2derris"); QETH_CARD_TEXT(card, 2, "b2derris");
QETH_CARD_TEXT_(card, 2, QETH_CARD_TEXT_(card, 2,
"err%02x%03d", event, "err%02lx%03d", event,
lowerdev->ifindex); lowerdev->ifindex);
} }
} }
...@@ -813,7 +813,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work) ...@@ -813,7 +813,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work)
break; break;
} }
if (err) if (err)
QETH_CARD_TEXT_(card, 2, "b2derr%02x", event); QETH_CARD_TEXT_(card, 2, "b2derr%02lx", event);
} }
unlock: unlock:
...@@ -878,7 +878,7 @@ static int qeth_l2_switchdev_event(struct notifier_block *unused, ...@@ -878,7 +878,7 @@ static int qeth_l2_switchdev_event(struct notifier_block *unused,
while (lowerdev) { while (lowerdev) {
if (qeth_l2_must_learn(lowerdev, dstdev)) { if (qeth_l2_must_learn(lowerdev, dstdev)) {
card = lowerdev->ml_priv; card = lowerdev->ml_priv;
QETH_CARD_TEXT_(card, 4, "b2dqw%03x", event); QETH_CARD_TEXT_(card, 4, "b2dqw%03lx", event);
rc = qeth_l2_br2dev_queue_work(brdev, lowerdev, rc = qeth_l2_br2dev_queue_work(brdev, lowerdev,
dstdev, event, dstdev, event,
fdb_info->addr); fdb_info->addr);
...@@ -2430,7 +2430,6 @@ const struct qeth_discipline qeth_l2_discipline = { ...@@ -2430,7 +2430,6 @@ const struct qeth_discipline qeth_l2_discipline = {
.remove = qeth_l2_remove_device, .remove = qeth_l2_remove_device,
.set_online = qeth_l2_set_online, .set_online = qeth_l2_set_online,
.set_offline = qeth_l2_set_offline, .set_offline = qeth_l2_set_offline,
.do_ioctl = NULL,
.control_event_handler = qeth_l2_control_event, .control_event_handler = qeth_l2_control_event,
}; };
EXPORT_SYMBOL_GPL(qeth_l2_discipline); EXPORT_SYMBOL_GPL(qeth_l2_discipline);
......
...@@ -492,7 +492,7 @@ int qeth_l3_setrouting_v6(struct qeth_card *card) ...@@ -492,7 +492,7 @@ int qeth_l3_setrouting_v6(struct qeth_card *card)
* IP address takeover related functions * IP address takeover related functions
*/ */
/** /*
* qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs. * qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs.
* *
* Caller must hold ip_lock. * Caller must hold ip_lock.
...@@ -1511,7 +1511,8 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card) ...@@ -1511,7 +1511,8 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
return rc; return rc;
} }
static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd) static int qeth_l3_ndo_siocdevprivate(struct net_device *dev, struct ifreq *rq,
void __user *data, int cmd)
{ {
struct qeth_card *card = dev->ml_priv; struct qeth_card *card = dev->ml_priv;
struct qeth_arp_cache_entry arp_entry; struct qeth_arp_cache_entry arp_entry;
...@@ -1552,7 +1553,7 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __use ...@@ -1552,7 +1553,7 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __use
rc = qeth_l3_arp_flush_cache(card); rc = qeth_l3_arp_flush_cache(card);
break; break;
default: default:
rc = -EOPNOTSUPP; rc = qeth_siocdevprivate(dev, rq, data, cmd);
} }
return rc; return rc;
} }
...@@ -1841,7 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = { ...@@ -1841,7 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_set_rx_mode = qeth_l3_set_rx_mode, .ndo_set_rx_mode = qeth_l3_set_rx_mode,
.ndo_eth_ioctl = qeth_do_ioctl, .ndo_eth_ioctl = qeth_do_ioctl,
.ndo_siocdevprivate = qeth_siocdevprivate, .ndo_siocdevprivate = qeth_l3_ndo_siocdevprivate,
.ndo_fix_features = qeth_fix_features, .ndo_fix_features = qeth_fix_features,
.ndo_set_features = qeth_set_features, .ndo_set_features = qeth_set_features,
.ndo_tx_timeout = qeth_tx_timeout, .ndo_tx_timeout = qeth_tx_timeout,
...@@ -1857,7 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = { ...@@ -1857,7 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_set_rx_mode = qeth_l3_set_rx_mode, .ndo_set_rx_mode = qeth_l3_set_rx_mode,
.ndo_eth_ioctl = qeth_do_ioctl, .ndo_eth_ioctl = qeth_do_ioctl,
.ndo_siocdevprivate = qeth_siocdevprivate, .ndo_siocdevprivate = qeth_l3_ndo_siocdevprivate,
.ndo_fix_features = qeth_fix_features, .ndo_fix_features = qeth_fix_features,
.ndo_set_features = qeth_set_features, .ndo_set_features = qeth_set_features,
.ndo_tx_timeout = qeth_tx_timeout, .ndo_tx_timeout = qeth_tx_timeout,
...@@ -2071,7 +2072,6 @@ const struct qeth_discipline qeth_l3_discipline = { ...@@ -2071,7 +2072,6 @@ const struct qeth_discipline qeth_l3_discipline = {
.remove = qeth_l3_remove_device, .remove = qeth_l3_remove_device,
.set_online = qeth_l3_set_online, .set_online = qeth_l3_set_online,
.set_offline = qeth_l3_set_offline, .set_offline = qeth_l3_set_offline,
.do_ioctl = qeth_l3_do_ioctl,
.control_event_handler = qeth_l3_control_event, .control_event_handler = qeth_l3_control_event,
}; };
EXPORT_SYMBOL_GPL(qeth_l3_discipline); EXPORT_SYMBOL_GPL(qeth_l3_discipline);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment