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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6047862d5e
|
@ -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,
|
||||
struct qdio_initialize *init_data);
|
||||
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,
|
||||
unsigned int bufnr, unsigned int count, struct qaob *aob);
|
||||
extern int qdio_start_irq(struct ccw_device *cdev);
|
||||
|
|
|
@ -24,19 +24,6 @@
|
|||
#define QBUFF_PER_PAGE (PAGE_SIZE / sizeof(struct qdio_buffer))
|
||||
|
||||
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
|
||||
|
@ -447,39 +434,22 @@ void qdio_print_subchannel_info(struct qdio_irq *irq_ptr)
|
|||
|
||||
int __init qdio_setup_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
qdio_q_cache = kmem_cache_create("qdio_q", sizeof(struct qdio_q),
|
||||
256, 0, NULL);
|
||||
if (!qdio_q_cache)
|
||||
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). */
|
||||
DBF_EVENT("thinint:%1d",
|
||||
(css_general_characteristics.aif_osa) ? 1 : 0);
|
||||
|
||||
/* Check for QEBSM support in general (bit 58). */
|
||||
DBF_EVENT("cssQEBSM:%1d", css_general_characteristics.qebsm);
|
||||
rc = 0;
|
||||
out:
|
||||
return rc;
|
||||
free_qdio_q_cache:
|
||||
kmem_cache_destroy(qdio_q_cache);
|
||||
goto out;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qdio_setup_exit(void)
|
||||
{
|
||||
kmem_cache_destroy(qdio_aob_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)
|
|||
struct qeth_qdio_info {
|
||||
atomic_t state;
|
||||
/* input */
|
||||
int no_in_queues;
|
||||
struct qeth_qdio_q *in_q;
|
||||
struct qeth_qdio_q *c_q;
|
||||
struct qeth_qdio_buffer_pool in_buf_pool;
|
||||
|
@ -771,8 +770,6 @@ struct qeth_discipline {
|
|||
void (*remove) (struct ccwgroup_device *);
|
||||
int (*set_online)(struct qeth_card *card, bool carrier_ok);
|
||||
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,
|
||||
struct qeth_ipa_cmd *cmd);
|
||||
};
|
||||
|
@ -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_siocdevprivate(struct net_device *dev, struct ifreq *rq,
|
||||
void __user *data, int cmd);
|
||||
__printf(3, 4)
|
||||
void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
|
||||
int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
|
||||
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
|
||||
|
|
|
@ -59,6 +59,7 @@ EXPORT_SYMBOL_GPL(qeth_dbf);
|
|||
|
||||
static struct kmem_cache *qeth_core_header_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 dentry *qeth_debugfs_root;
|
||||
|
@ -354,8 +355,8 @@ static int qeth_cq_init(struct qeth_card *card)
|
|||
qdio_reset_buffers(card->qdio.c_q->qdio_bufs,
|
||||
QDIO_MAX_BUFFERS_PER_Q);
|
||||
card->qdio.c_q->next_buf_to_init = 127;
|
||||
rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT,
|
||||
card->qdio.no_in_queues - 1, 0, 127, NULL);
|
||||
rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 1, 0, 127,
|
||||
NULL);
|
||||
if (rc) {
|
||||
QETH_CARD_TEXT_(card, 2, "1err%d", rc);
|
||||
goto out;
|
||||
|
@ -375,21 +376,16 @@ static int qeth_alloc_cq(struct qeth_card *card)
|
|||
dev_err(&card->gdev->dev, "Failed to create completion queue\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
card->qdio.no_in_queues = 2;
|
||||
} else {
|
||||
QETH_CARD_TEXT(card, 2, "nocq");
|
||||
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;
|
||||
}
|
||||
|
||||
static void qeth_free_cq(struct qeth_card *card)
|
||||
{
|
||||
if (card->qdio.c_q) {
|
||||
--card->qdio.no_in_queues;
|
||||
qeth_free_qdio_queue(card->qdio.c_q);
|
||||
card->qdio.c_q = NULL;
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
if (buf->aob)
|
||||
qdio_release_aob(buf->aob);
|
||||
kmem_cache_free(qeth_qaob_cache, buf->aob);
|
||||
kmem_cache_free(qeth_qdio_outbuf_cache, buf);
|
||||
}
|
||||
|
||||
|
@ -1458,7 +1454,6 @@ static void qeth_init_qdio_info(struct qeth_card *card)
|
|||
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
|
||||
|
||||
/* inbound */
|
||||
card->qdio.no_in_queues = 1;
|
||||
card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT;
|
||||
if (IS_IQD(card))
|
||||
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,
|
|||
* @card: qeth_card structure pointer
|
||||
* @iob: qeth_cmd_buffer pointer
|
||||
* @reply_cb: callback function pointer
|
||||
* @cb_card: pointer to the qeth_card structure
|
||||
* @cb_reply: pointer to the qeth_reply structure
|
||||
* @cb_cmd: pointer to the original iob for non-IPA
|
||||
* cb_card: pointer to the qeth_card structure
|
||||
* cb_reply: pointer to the qeth_reply structure
|
||||
* cb_cmd: pointer to the original iob for non-IPA
|
||||
* commands, or to the qeth_ipa_cmd structure
|
||||
* for the IPA commands.
|
||||
* @reply_param: private pointer passed to the callback
|
||||
|
@ -2629,7 +2624,7 @@ static void qeth_free_qdio_queues(struct qeth_card *card)
|
|||
qeth_free_cq(card);
|
||||
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
|
||||
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);
|
||||
card->qdio.in_q = NULL;
|
||||
|
@ -3039,7 +3034,7 @@ static int qeth_send_ipa_cmd_cb(struct qeth_card *card,
|
|||
return (cmd->hdr.return_code) ? -EIO : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* qeth_send_ipa_cmd() - send an IPA command
|
||||
*
|
||||
* 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,
|
|||
!qeth_iqd_is_mcast_queue(card, queue) &&
|
||||
count == 1) {
|
||||
if (!buf->aob)
|
||||
buf->aob = qdio_allocate_aob();
|
||||
buf->aob = kmem_cache_zalloc(qeth_qaob_cache,
|
||||
GFP_ATOMIC);
|
||||
if (buf->aob) {
|
||||
struct qeth_qaob_priv1 *priv;
|
||||
|
||||
|
@ -3780,7 +3776,7 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev,
|
|||
qeth_schedule_recovery(card);
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* Note: Function assumes that we have 4 outbound queues.
|
||||
*/
|
||||
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,
|
|||
|
||||
/**
|
||||
* 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.
|
||||
* @hdr: double pointer to a qeth_hdr. When returning with >= 0,
|
||||
* it contains a valid pointer to a qeth_hdr.
|
||||
* @hdr_len: length of the HW header.
|
||||
* @proto_len: length of protocol headers that need to be in same page as the
|
||||
* 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
|
||||
* (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)
|
|||
struct qdio_buffer **in_sbal_ptrs[QETH_MAX_IN_QUEUES];
|
||||
struct qeth_qib_parms *qib_parms = NULL;
|
||||
struct qdio_initialize init_data;
|
||||
unsigned int no_input_qs = 1;
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
|
||||
|
@ -5153,8 +5152,10 @@ static int qeth_qdio_establish(struct qeth_card *card)
|
|||
}
|
||||
|
||||
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;
|
||||
no_input_qs++;
|
||||
}
|
||||
|
||||
for (i = 0; i < card->qdio.no_out_queues; i++)
|
||||
out_sbal_ptrs[i] = card->qdio.out_qs[i]->qdio_bufs;
|
||||
|
@ -5164,7 +5165,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
|
|||
QDIO_QETH_QFMT;
|
||||
init_data.qib_param_field_format = 0;
|
||||
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.input_handler = qeth_qdio_input_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,
|
|||
if (uses_frags)
|
||||
napi_free_frags(napi);
|
||||
else
|
||||
dev_kfree_skb_any(skb);
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5795,7 +5796,7 @@ walk_packet:
|
|||
if (uses_frags)
|
||||
napi_free_frags(napi);
|
||||
else
|
||||
dev_kfree_skb_any(skb);
|
||||
kfree_skb(skb);
|
||||
QETH_CARD_STAT_INC(card,
|
||||
rx_length_errors);
|
||||
}
|
||||
|
@ -6600,10 +6601,7 @@ int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *d
|
|||
rc = qeth_query_oat_command(card, data);
|
||||
break;
|
||||
default:
|
||||
if (card->discipline->do_ioctl)
|
||||
rc = card->discipline->do_ioctl(dev, rq, data, cmd);
|
||||
else
|
||||
rc = -EOPNOTSUPP;
|
||||
rc = -EOPNOTSUPP;
|
||||
}
|
||||
if (rc)
|
||||
QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
|
||||
|
@ -7177,6 +7175,16 @@ static int __init qeth_core_init(void)
|
|||
rc = -ENOMEM;
|
||||
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);
|
||||
if (rc)
|
||||
goto ccw_err;
|
||||
|
@ -7189,6 +7197,8 @@ static int __init qeth_core_init(void)
|
|||
ccwgroup_err:
|
||||
ccw_driver_unregister(&qeth_ccw_driver);
|
||||
ccw_err:
|
||||
kmem_cache_destroy(qeth_qaob_cache);
|
||||
qaob_err:
|
||||
kmem_cache_destroy(qeth_qdio_outbuf_cache);
|
||||
cqslab_err:
|
||||
kmem_cache_destroy(qeth_core_header_cache);
|
||||
|
@ -7207,6 +7217,7 @@ static void __exit qeth_core_exit(void)
|
|||
qeth_clear_dbf_list();
|
||||
ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver);
|
||||
ccw_driver_unregister(&qeth_ccw_driver);
|
||||
kmem_cache_destroy(qeth_qaob_cache);
|
||||
kmem_cache_destroy(qeth_qdio_outbuf_cache);
|
||||
kmem_cache_destroy(qeth_core_header_cache);
|
||||
root_device_unregister(qeth_core_root_dev);
|
||||
|
|
|
@ -121,11 +121,11 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)
|
|||
QETH_CARD_TEXT(card, 2, "L2Wmac");
|
||||
rc = qeth_l2_send_setdelmac(card, mac, cmd);
|
||||
if (rc == -EADDRINUSE)
|
||||
QETH_DBF_MESSAGE(2, "MAC already registered on device %x\n",
|
||||
CARD_DEVID(card));
|
||||
QETH_DBF_MESSAGE(2, "MAC address %012llx is already registered on device %x\n",
|
||||
ether_addr_to_u64(mac), CARD_DEVID(card));
|
||||
else if (rc)
|
||||
QETH_DBF_MESSAGE(2, "Failed to register MAC on device %x: %d\n",
|
||||
CARD_DEVID(card), rc);
|
||||
QETH_DBF_MESSAGE(2, "Failed to register MAC address %012llx on device %x: %d\n",
|
||||
ether_addr_to_u64(mac), CARD_DEVID(card), rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -138,8 +138,8 @@ static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)
|
|||
QETH_CARD_TEXT(card, 2, "L2Rmac");
|
||||
rc = qeth_l2_send_setdelmac(card, mac, cmd);
|
||||
if (rc)
|
||||
QETH_DBF_MESSAGE(2, "Failed to delete MAC on device %u: %d\n",
|
||||
CARD_DEVID(card), rc);
|
||||
QETH_DBF_MESSAGE(2, "Failed to delete MAC address %012llx on device %x: %d\n",
|
||||
ether_addr_to_u64(mac), CARD_DEVID(card), rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -661,13 +661,13 @@ static void qeth_l2_dev2br_fdb_notify(struct qeth_card *card, u8 code,
|
|||
card->dev, &info.info, NULL);
|
||||
QETH_CARD_TEXT(card, 4, "andelmac");
|
||||
QETH_CARD_TEXT_(card, 4,
|
||||
"mc%012lx", ether_addr_to_u64(ntfy_mac));
|
||||
"mc%012llx", ether_addr_to_u64(ntfy_mac));
|
||||
} else {
|
||||
call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE,
|
||||
card->dev, &info.info, NULL);
|
||||
QETH_CARD_TEXT(card, 4, "anaddmac");
|
||||
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)
|
|||
int err = 0;
|
||||
|
||||
kfree(br2dev_event_work);
|
||||
QETH_CARD_TEXT_(card, 4, "b2dw%04x", event);
|
||||
QETH_CARD_TEXT_(card, 4, "ma%012lx", ether_addr_to_u64(addr));
|
||||
QETH_CARD_TEXT_(card, 4, "b2dw%04lx", event);
|
||||
QETH_CARD_TEXT_(card, 4, "ma%012llx", ether_addr_to_u64(addr));
|
||||
|
||||
rcu_read_lock();
|
||||
/* Verify preconditions are still valid: */
|
||||
|
@ -795,7 +795,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work)
|
|||
if (err) {
|
||||
QETH_CARD_TEXT(card, 2, "b2derris");
|
||||
QETH_CARD_TEXT_(card, 2,
|
||||
"err%02x%03d", event,
|
||||
"err%02lx%03d", event,
|
||||
lowerdev->ifindex);
|
||||
}
|
||||
}
|
||||
|
@ -813,7 +813,7 @@ static void qeth_l2_br2dev_worker(struct work_struct *work)
|
|||
break;
|
||||
}
|
||||
if (err)
|
||||
QETH_CARD_TEXT_(card, 2, "b2derr%02x", event);
|
||||
QETH_CARD_TEXT_(card, 2, "b2derr%02lx", event);
|
||||
}
|
||||
|
||||
unlock:
|
||||
|
@ -878,7 +878,7 @@ static int qeth_l2_switchdev_event(struct notifier_block *unused,
|
|||
while (lowerdev) {
|
||||
if (qeth_l2_must_learn(lowerdev, dstdev)) {
|
||||
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,
|
||||
dstdev, event,
|
||||
fdb_info->addr);
|
||||
|
@ -2430,7 +2430,6 @@ const struct qeth_discipline qeth_l2_discipline = {
|
|||
.remove = qeth_l2_remove_device,
|
||||
.set_online = qeth_l2_set_online,
|
||||
.set_offline = qeth_l2_set_offline,
|
||||
.do_ioctl = NULL,
|
||||
.control_event_handler = qeth_l2_control_event,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(qeth_l2_discipline);
|
||||
|
|
|
@ -492,7 +492,7 @@ int qeth_l3_setrouting_v6(struct qeth_card *card)
|
|||
* IP address takeover related functions
|
||||
*/
|
||||
|
||||
/**
|
||||
/*
|
||||
* qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs.
|
||||
*
|
||||
* Caller must hold ip_lock.
|
||||
|
@ -1511,7 +1511,8 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
|
|||
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_arp_cache_entry arp_entry;
|
||||
|
@ -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);
|
||||
break;
|
||||
default:
|
||||
rc = -EOPNOTSUPP;
|
||||
rc = qeth_siocdevprivate(dev, rq, data, cmd);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -1841,7 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
|
|||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
|
||||
.ndo_eth_ioctl = qeth_do_ioctl,
|
||||
.ndo_siocdevprivate = qeth_siocdevprivate,
|
||||
.ndo_siocdevprivate = qeth_l3_ndo_siocdevprivate,
|
||||
.ndo_fix_features = qeth_fix_features,
|
||||
.ndo_set_features = qeth_set_features,
|
||||
.ndo_tx_timeout = qeth_tx_timeout,
|
||||
|
@ -1857,7 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
|
|||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
|
||||
.ndo_eth_ioctl = qeth_do_ioctl,
|
||||
.ndo_siocdevprivate = qeth_siocdevprivate,
|
||||
.ndo_siocdevprivate = qeth_l3_ndo_siocdevprivate,
|
||||
.ndo_fix_features = qeth_fix_features,
|
||||
.ndo_set_features = qeth_set_features,
|
||||
.ndo_tx_timeout = qeth_tx_timeout,
|
||||
|
@ -2071,7 +2072,6 @@ const struct qeth_discipline qeth_l3_discipline = {
|
|||
.remove = qeth_l3_remove_device,
|
||||
.set_online = qeth_l3_set_online,
|
||||
.set_offline = qeth_l3_set_offline,
|
||||
.do_ioctl = qeth_l3_do_ioctl,
|
||||
.control_event_handler = qeth_l3_control_event,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(qeth_l3_discipline);
|
||||
|
|
Loading…
Reference in New Issue