Commit 7b68b2f7 authored by David S. Miller's avatar David S. Miller

Merge branch 's390-next'

Ursula Braun says:

====================
s390: network patches for net-next

here are some s390 related patches for net-next
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 33e9fcc6 1dafd094
...@@ -109,10 +109,8 @@ static debug_info_t *claw_dbf_trace; ...@@ -109,10 +109,8 @@ static debug_info_t *claw_dbf_trace;
static void static void
claw_unregister_debug_facility(void) claw_unregister_debug_facility(void)
{ {
if (claw_dbf_setup) debug_unregister(claw_dbf_setup);
debug_unregister(claw_dbf_setup); debug_unregister(claw_dbf_trace);
if (claw_dbf_trace)
debug_unregister(claw_dbf_trace);
} }
static int static int
......
...@@ -251,13 +251,11 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg) ...@@ -251,13 +251,11 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg)
int first = 1; int first = 1;
int i; int i;
unsigned long duration; unsigned long duration;
struct timespec done_stamp = current_kernel_time(); /* xtime */ unsigned long done_stamp = jiffies;
CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name); CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name);
duration = duration = done_stamp - ch->prof.send_stamp;
(done_stamp.tv_sec - ch->prof.send_stamp.tv_sec) * 1000000 +
(done_stamp.tv_nsec - ch->prof.send_stamp.tv_nsec) / 1000;
if (duration > ch->prof.tx_time) if (duration > ch->prof.tx_time)
ch->prof.tx_time = duration; ch->prof.tx_time = duration;
...@@ -307,7 +305,7 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg) ...@@ -307,7 +305,7 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg)
spin_unlock(&ch->collect_lock); spin_unlock(&ch->collect_lock);
ch->ccw[1].count = ch->trans_skb->len; ch->ccw[1].count = ch->trans_skb->len;
fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
ch->prof.send_stamp = current_kernel_time(); /* xtime */ ch->prof.send_stamp = jiffies;
rc = ccw_device_start(ch->cdev, &ch->ccw[0], rc = ccw_device_start(ch->cdev, &ch->ccw[0],
(unsigned long)ch, 0xff, 0); (unsigned long)ch, 0xff, 0);
ch->prof.doios_multi++; ch->prof.doios_multi++;
...@@ -1229,14 +1227,12 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg) ...@@ -1229,14 +1227,12 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
int rc; int rc;
struct th_header *header; struct th_header *header;
struct pdu *p_header; struct pdu *p_header;
struct timespec done_stamp = current_kernel_time(); /* xtime */ unsigned long done_stamp = jiffies;
CTCM_PR_DEBUG("Enter %s: %s cp:%i\n", CTCM_PR_DEBUG("Enter %s: %s cp:%i\n",
__func__, dev->name, smp_processor_id()); __func__, dev->name, smp_processor_id());
duration = duration = done_stamp - ch->prof.send_stamp;
(done_stamp.tv_sec - ch->prof.send_stamp.tv_sec) * 1000000 +
(done_stamp.tv_nsec - ch->prof.send_stamp.tv_nsec) / 1000;
if (duration > ch->prof.tx_time) if (duration > ch->prof.tx_time)
ch->prof.tx_time = duration; ch->prof.tx_time = duration;
...@@ -1361,7 +1357,7 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg) ...@@ -1361,7 +1357,7 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
ch->ccw[1].count = ch->trans_skb->len; ch->ccw[1].count = ch->trans_skb->len;
fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
ch->prof.send_stamp = current_kernel_time(); /* xtime */ ch->prof.send_stamp = jiffies;
if (do_debug_ccw) if (do_debug_ccw)
ctcmpc_dumpit((char *)&ch->ccw[0], sizeof(struct ccw1) * 3); ctcmpc_dumpit((char *)&ch->ccw[0], sizeof(struct ccw1) * 3);
rc = ccw_device_start(ch->cdev, &ch->ccw[0], rc = ccw_device_start(ch->cdev, &ch->ccw[0],
...@@ -1827,7 +1823,7 @@ static void ctcmpc_chx_send_sweep(fsm_instance *fsm, int event, void *arg) ...@@ -1827,7 +1823,7 @@ static void ctcmpc_chx_send_sweep(fsm_instance *fsm, int event, void *arg)
fsm_newstate(wch->fsm, CTC_STATE_TX); fsm_newstate(wch->fsm, CTC_STATE_TX);
spin_lock_irqsave(get_ccwdev_lock(wch->cdev), saveflags); spin_lock_irqsave(get_ccwdev_lock(wch->cdev), saveflags);
wch->prof.send_stamp = current_kernel_time(); /* xtime */ wch->prof.send_stamp = jiffies;
rc = ccw_device_start(wch->cdev, &wch->ccw[3], rc = ccw_device_start(wch->cdev, &wch->ccw[3],
(unsigned long) wch, 0xff, 0); (unsigned long) wch, 0xff, 0);
spin_unlock_irqrestore(get_ccwdev_lock(wch->cdev), saveflags); spin_unlock_irqrestore(get_ccwdev_lock(wch->cdev), saveflags);
......
...@@ -567,7 +567,7 @@ static int ctcm_transmit_skb(struct channel *ch, struct sk_buff *skb) ...@@ -567,7 +567,7 @@ static int ctcm_transmit_skb(struct channel *ch, struct sk_buff *skb)
fsm_newstate(ch->fsm, CTC_STATE_TX); fsm_newstate(ch->fsm, CTC_STATE_TX);
fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch);
spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags);
ch->prof.send_stamp = current_kernel_time(); /* xtime */ ch->prof.send_stamp = jiffies;
rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx], rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx],
(unsigned long)ch, 0xff, 0); (unsigned long)ch, 0xff, 0);
spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags);
...@@ -831,7 +831,7 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb) ...@@ -831,7 +831,7 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
sizeof(struct ccw1) * 3); sizeof(struct ccw1) * 3);
spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags);
ch->prof.send_stamp = current_kernel_time(); /* xtime */ ch->prof.send_stamp = jiffies;
rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx], rc = ccw_device_start(ch->cdev, &ch->ccw[ccw_idx],
(unsigned long)ch, 0xff, 0); (unsigned long)ch, 0xff, 0);
spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags);
......
...@@ -121,7 +121,7 @@ struct ctcm_profile { ...@@ -121,7 +121,7 @@ struct ctcm_profile {
unsigned long doios_multi; unsigned long doios_multi;
unsigned long txlen; unsigned long txlen;
unsigned long tx_time; unsigned long tx_time;
struct timespec send_stamp; unsigned long send_stamp;
}; };
/* /*
......
...@@ -100,8 +100,8 @@ static void ctcm_print_statistics(struct ctcm_priv *priv) ...@@ -100,8 +100,8 @@ static void ctcm_print_statistics(struct ctcm_priv *priv)
priv->channel[WRITE]->prof.doios_multi); priv->channel[WRITE]->prof.doios_multi);
p += sprintf(p, " Netto bytes written: %ld\n", p += sprintf(p, " Netto bytes written: %ld\n",
priv->channel[WRITE]->prof.txlen); priv->channel[WRITE]->prof.txlen);
p += sprintf(p, " Max. TX IO-time: %ld\n", p += sprintf(p, " Max. TX IO-time: %u\n",
priv->channel[WRITE]->prof.tx_time); jiffies_to_usecs(priv->channel[WRITE]->prof.tx_time));
printk(KERN_INFO "Statistics for %s:\n%s", printk(KERN_INFO "Statistics for %s:\n%s",
priv->channel[CTCM_WRITE]->netdev->name, sbuf); priv->channel[CTCM_WRITE]->netdev->name, sbuf);
......
...@@ -88,10 +88,8 @@ static debug_info_t *lcs_dbf_trace; ...@@ -88,10 +88,8 @@ static debug_info_t *lcs_dbf_trace;
static void static void
lcs_unregister_debug_facility(void) lcs_unregister_debug_facility(void)
{ {
if (lcs_dbf_setup) debug_unregister(lcs_dbf_setup);
debug_unregister(lcs_dbf_setup); debug_unregister(lcs_dbf_trace);
if (lcs_dbf_trace)
debug_unregister(lcs_dbf_trace);
} }
static int static int
......
...@@ -178,7 +178,7 @@ struct connection_profile { ...@@ -178,7 +178,7 @@ struct connection_profile {
unsigned long doios_multi; unsigned long doios_multi;
unsigned long txlen; unsigned long txlen;
unsigned long tx_time; unsigned long tx_time;
struct timespec send_stamp; unsigned long send_stamp;
unsigned long tx_pending; unsigned long tx_pending;
unsigned long tx_max_pending; unsigned long tx_max_pending;
}; };
...@@ -487,12 +487,9 @@ DEFINE_PER_CPU(char[256], iucv_dbf_txt_buf); ...@@ -487,12 +487,9 @@ DEFINE_PER_CPU(char[256], iucv_dbf_txt_buf);
static void iucv_unregister_dbf_views(void) static void iucv_unregister_dbf_views(void)
{ {
if (iucv_dbf_setup) debug_unregister(iucv_dbf_setup);
debug_unregister(iucv_dbf_setup); debug_unregister(iucv_dbf_data);
if (iucv_dbf_data) debug_unregister(iucv_dbf_trace);
debug_unregister(iucv_dbf_data);
if (iucv_dbf_trace)
debug_unregister(iucv_dbf_trace);
} }
static int iucv_register_dbf_views(void) static int iucv_register_dbf_views(void)
{ {
...@@ -786,7 +783,7 @@ static void conn_action_txdone(fsm_instance *fi, int event, void *arg) ...@@ -786,7 +783,7 @@ static void conn_action_txdone(fsm_instance *fi, int event, void *arg)
header.next = 0; header.next = 0;
memcpy(skb_put(conn->tx_buff, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN); memcpy(skb_put(conn->tx_buff, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN);
conn->prof.send_stamp = current_kernel_time(); conn->prof.send_stamp = jiffies;
txmsg.class = 0; txmsg.class = 0;
txmsg.tag = 0; txmsg.tag = 0;
rc = iucv_message_send(conn->path, &txmsg, 0, 0, rc = iucv_message_send(conn->path, &txmsg, 0, 0,
...@@ -1220,7 +1217,7 @@ static int netiucv_transmit_skb(struct iucv_connection *conn, ...@@ -1220,7 +1217,7 @@ static int netiucv_transmit_skb(struct iucv_connection *conn,
memcpy(skb_put(nskb, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN); memcpy(skb_put(nskb, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN);
fsm_newstate(conn->fsm, CONN_STATE_TX); fsm_newstate(conn->fsm, CONN_STATE_TX);
conn->prof.send_stamp = current_kernel_time(); conn->prof.send_stamp = jiffies;
msg.tag = 1; msg.tag = 1;
msg.class = 0; msg.class = 0;
......
...@@ -596,7 +596,6 @@ struct qeth_channel { ...@@ -596,7 +596,6 @@ struct qeth_channel {
struct ccw1 ccw; struct ccw1 ccw;
spinlock_t iob_lock; spinlock_t iob_lock;
wait_queue_head_t wait_q; wait_queue_head_t wait_q;
struct tasklet_struct irq_tasklet;
struct ccw_device *ccwdev; struct ccw_device *ccwdev;
/*command buffer for control data*/ /*command buffer for control data*/
struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO]; struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO];
......
...@@ -231,7 +231,6 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev, ...@@ -231,7 +231,6 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count) struct device_attribute *attr, const char *buf, size_t count)
{ {
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
char *tmp;
int rc = 0; int rc = 0;
if (!card) if (!card)
...@@ -253,36 +252,35 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev, ...@@ -253,36 +252,35 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev,
goto out; goto out;
} }
tmp = strsep((char **) &buf, "\n"); if (sysfs_streq(buf, "prio_queueing_prec")) {
if (!strcmp(tmp, "prio_queueing_prec")) {
card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_PREC; card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_PREC;
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
} else if (!strcmp(tmp, "prio_queueing_skb")) { } else if (sysfs_streq(buf, "prio_queueing_skb")) {
card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_SKB; card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_SKB;
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
} else if (!strcmp(tmp, "prio_queueing_tos")) { } else if (sysfs_streq(buf, "prio_queueing_tos")) {
card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_TOS; card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_TOS;
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
} else if (!strcmp(tmp, "prio_queueing_vlan")) { } else if (sysfs_streq(buf, "prio_queueing_vlan")) {
if (!card->options.layer2) { if (!card->options.layer2) {
rc = -ENOTSUPP; rc = -ENOTSUPP;
goto out; goto out;
} }
card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN; card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN;
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
} else if (!strcmp(tmp, "no_prio_queueing:0")) { } else if (sysfs_streq(buf, "no_prio_queueing:0")) {
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
card->qdio.default_out_queue = 0; card->qdio.default_out_queue = 0;
} else if (!strcmp(tmp, "no_prio_queueing:1")) { } else if (sysfs_streq(buf, "no_prio_queueing:1")) {
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
card->qdio.default_out_queue = 1; card->qdio.default_out_queue = 1;
} else if (!strcmp(tmp, "no_prio_queueing:2")) { } else if (sysfs_streq(buf, "no_prio_queueing:2")) {
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
card->qdio.default_out_queue = 2; card->qdio.default_out_queue = 2;
} else if (!strcmp(tmp, "no_prio_queueing:3")) { } else if (sysfs_streq(buf, "no_prio_queueing:3")) {
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
card->qdio.default_out_queue = 3; card->qdio.default_out_queue = 3;
} else if (!strcmp(tmp, "no_prio_queueing")) { } else if (sysfs_streq(buf, "no_prio_queueing")) {
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
} else } else
...@@ -497,8 +495,6 @@ static ssize_t qeth_dev_isolation_store(struct device *dev, ...@@ -497,8 +495,6 @@ static ssize_t qeth_dev_isolation_store(struct device *dev,
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
enum qeth_ipa_isolation_modes isolation; enum qeth_ipa_isolation_modes isolation;
int rc = 0; int rc = 0;
char *tmp, *curtoken;
curtoken = (char *) buf;
if (!card) if (!card)
return -EINVAL; return -EINVAL;
...@@ -515,12 +511,11 @@ static ssize_t qeth_dev_isolation_store(struct device *dev, ...@@ -515,12 +511,11 @@ static ssize_t qeth_dev_isolation_store(struct device *dev,
} }
/* parse input into isolation mode */ /* parse input into isolation mode */
tmp = strsep(&curtoken, "\n"); if (sysfs_streq(buf, ATTR_QETH_ISOLATION_NONE)) {
if (!strcmp(tmp, ATTR_QETH_ISOLATION_NONE)) {
isolation = ISOLATION_MODE_NONE; isolation = ISOLATION_MODE_NONE;
} else if (!strcmp(tmp, ATTR_QETH_ISOLATION_FWD)) { } else if (sysfs_streq(buf, ATTR_QETH_ISOLATION_FWD)) {
isolation = ISOLATION_MODE_FWD; isolation = ISOLATION_MODE_FWD;
} else if (!strcmp(tmp, ATTR_QETH_ISOLATION_DROP)) { } else if (sysfs_streq(buf, ATTR_QETH_ISOLATION_DROP)) {
isolation = ISOLATION_MODE_DROP; isolation = ISOLATION_MODE_DROP;
} else { } else {
rc = -EINVAL; rc = -EINVAL;
...@@ -531,8 +526,7 @@ static ssize_t qeth_dev_isolation_store(struct device *dev, ...@@ -531,8 +526,7 @@ static ssize_t qeth_dev_isolation_store(struct device *dev,
/* defer IP assist if device is offline (until discipline->set_online)*/ /* defer IP assist if device is offline (until discipline->set_online)*/
card->options.prev_isolation = card->options.isolation; card->options.prev_isolation = card->options.isolation;
card->options.isolation = isolation; card->options.isolation = isolation;
if (card->state == CARD_STATE_SOFTSETUP || if (qeth_card_hw_is_reachable(card)) {
card->state == CARD_STATE_UP) {
int ipa_rc = qeth_set_access_ctrl_online(card, 1); int ipa_rc = qeth_set_access_ctrl_online(card, 1);
if (ipa_rc != 0) if (ipa_rc != 0)
rc = ipa_rc; rc = ipa_rc;
...@@ -555,7 +549,7 @@ static ssize_t qeth_dev_switch_attrs_show(struct device *dev, ...@@ -555,7 +549,7 @@ static ssize_t qeth_dev_switch_attrs_show(struct device *dev,
if (!card) if (!card)
return -EINVAL; return -EINVAL;
if (card->state != CARD_STATE_SOFTSETUP && card->state != CARD_STATE_UP) if (!qeth_card_hw_is_reachable(card))
return sprintf(buf, "n/a\n"); return sprintf(buf, "n/a\n");
rc = qeth_query_switch_attributes(card, &sw_info); rc = qeth_query_switch_attributes(card, &sw_info);
...@@ -598,19 +592,16 @@ static ssize_t qeth_hw_trap_store(struct device *dev, ...@@ -598,19 +592,16 @@ static ssize_t qeth_hw_trap_store(struct device *dev,
{ {
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
int rc = 0; int rc = 0;
char *tmp, *curtoken;
int state = 0; int state = 0;
curtoken = (char *)buf;
if (!card) if (!card)
return -EINVAL; return -EINVAL;
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
if (card->state == CARD_STATE_SOFTSETUP || card->state == CARD_STATE_UP) if (qeth_card_hw_is_reachable(card))
state = 1; state = 1;
tmp = strsep(&curtoken, "\n");
if (!strcmp(tmp, "arm") && !card->info.hwtrap) { if (sysfs_streq(buf, "arm") && !card->info.hwtrap) {
if (state) { if (state) {
if (qeth_is_diagass_supported(card, if (qeth_is_diagass_supported(card,
QETH_DIAGS_CMD_TRAP)) { QETH_DIAGS_CMD_TRAP)) {
...@@ -621,14 +612,14 @@ static ssize_t qeth_hw_trap_store(struct device *dev, ...@@ -621,14 +612,14 @@ static ssize_t qeth_hw_trap_store(struct device *dev,
rc = -EINVAL; rc = -EINVAL;
} else } else
card->info.hwtrap = 1; card->info.hwtrap = 1;
} else if (!strcmp(tmp, "disarm") && card->info.hwtrap) { } else if (sysfs_streq(buf, "disarm") && card->info.hwtrap) {
if (state) { if (state) {
rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM);
if (!rc) if (!rc)
card->info.hwtrap = 0; card->info.hwtrap = 0;
} else } else
card->info.hwtrap = 0; card->info.hwtrap = 0;
} else if (!strcmp(tmp, "trap") && state && card->info.hwtrap) } else if (sysfs_streq(buf, "trap") && state && card->info.hwtrap)
rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_CAPTURE); rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_CAPTURE);
else else
rc = -EINVAL; rc = -EINVAL;
......
...@@ -48,8 +48,7 @@ static int qeth_l2_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -48,8 +48,7 @@ static int qeth_l2_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
if (!card) if (!card)
return -ENODEV; return -ENODEV;
if ((card->state != CARD_STATE_UP) && if (!qeth_card_hw_is_reachable(card))
(card->state != CARD_STATE_SOFTSETUP))
return -ENODEV; return -ENODEV;
if (card->info.type == QETH_CARD_TYPE_OSN) if (card->info.type == QETH_CARD_TYPE_OSN)
...@@ -1344,8 +1343,7 @@ int qeth_osn_assist(struct net_device *dev, void *data, int data_len) ...@@ -1344,8 +1343,7 @@ int qeth_osn_assist(struct net_device *dev, void *data, int data_len)
if (!card) if (!card)
return -ENODEV; return -ENODEV;
QETH_CARD_TEXT(card, 2, "osnsdmc"); QETH_CARD_TEXT(card, 2, "osnsdmc");
if ((card->state != CARD_STATE_UP) && if (!qeth_card_hw_is_reachable(card))
(card->state != CARD_STATE_SOFTSETUP))
return -ENODEV; return -ENODEV;
iob = qeth_wait_for_buffer(&card->write); iob = qeth_wait_for_buffer(&card->write);
memcpy(iob->data+IPA_PDU_HEADER_SIZE, data, data_len); memcpy(iob->data+IPA_PDU_HEADER_SIZE, data, data_len);
......
...@@ -432,10 +432,8 @@ void qeth_l3_set_ip_addr_list(struct qeth_card *card) ...@@ -432,10 +432,8 @@ void qeth_l3_set_ip_addr_list(struct qeth_card *card)
QETH_CARD_TEXT(card, 2, "sdiplist"); QETH_CARD_TEXT(card, 2, "sdiplist");
QETH_CARD_HEX(card, 2, &card, sizeof(void *)); QETH_CARD_HEX(card, 2, &card, sizeof(void *));
if ((card->state != CARD_STATE_UP && if (!qeth_card_hw_is_reachable(card) || card->options.sniffer)
card->state != CARD_STATE_SOFTSETUP) || card->options.sniffer) {
return; return;
}
spin_lock_irqsave(&card->ip_lock, flags); spin_lock_irqsave(&card->ip_lock, flags);
tbd_list = card->ip_tbd_list; tbd_list = card->ip_tbd_list;
...@@ -2626,8 +2624,7 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -2626,8 +2624,7 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
if (!card) if (!card)
return -ENODEV; return -ENODEV;
if ((card->state != CARD_STATE_UP) && if (!qeth_card_hw_is_reachable(card))
(card->state != CARD_STATE_SOFTSETUP))
return -ENODEV; return -ENODEV;
switch (cmd) { switch (cmd) {
......
...@@ -57,29 +57,26 @@ static ssize_t qeth_l3_dev_route_store(struct qeth_card *card, ...@@ -57,29 +57,26 @@ static ssize_t qeth_l3_dev_route_store(struct qeth_card *card,
const char *buf, size_t count) const char *buf, size_t count)
{ {
enum qeth_routing_types old_route_type = route->type; enum qeth_routing_types old_route_type = route->type;
char *tmp;
int rc = 0; int rc = 0;
tmp = strsep((char **) &buf, "\n");
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
if (!strcmp(tmp, "no_router")) { if (sysfs_streq(buf, "no_router")) {
route->type = NO_ROUTER; route->type = NO_ROUTER;
} else if (!strcmp(tmp, "primary_connector")) { } else if (sysfs_streq(buf, "primary_connector")) {
route->type = PRIMARY_CONNECTOR; route->type = PRIMARY_CONNECTOR;
} else if (!strcmp(tmp, "secondary_connector")) { } else if (sysfs_streq(buf, "secondary_connector")) {
route->type = SECONDARY_CONNECTOR; route->type = SECONDARY_CONNECTOR;
} else if (!strcmp(tmp, "primary_router")) { } else if (sysfs_streq(buf, "primary_router")) {
route->type = PRIMARY_ROUTER; route->type = PRIMARY_ROUTER;
} else if (!strcmp(tmp, "secondary_router")) { } else if (sysfs_streq(buf, "secondary_router")) {
route->type = SECONDARY_ROUTER; route->type = SECONDARY_ROUTER;
} else if (!strcmp(tmp, "multicast_router")) { } else if (sysfs_streq(buf, "multicast_router")) {
route->type = MULTICAST_ROUTER; route->type = MULTICAST_ROUTER;
} else { } else {
rc = -EINVAL; rc = -EINVAL;
goto out; goto out;
} }
if (((card->state == CARD_STATE_SOFTSETUP) || if (qeth_card_hw_is_reachable(card) &&
(card->state == CARD_STATE_UP)) &&
(old_route_type != route->type)) { (old_route_type != route->type)) {
if (prot == QETH_PROT_IPV4) if (prot == QETH_PROT_IPV4)
rc = qeth_l3_setrouting_v4(card); rc = qeth_l3_setrouting_v4(card);
...@@ -371,7 +368,6 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev, ...@@ -371,7 +368,6 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
{ {
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
struct qeth_ipaddr *tmpipa, *t; struct qeth_ipaddr *tmpipa, *t;
char *tmp;
int rc = 0; int rc = 0;
if (!card) if (!card)
...@@ -384,10 +380,9 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev, ...@@ -384,10 +380,9 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
goto out; goto out;
} }
tmp = strsep((char **) &buf, "\n"); if (sysfs_streq(buf, "toggle")) {
if (!strcmp(tmp, "toggle")) {
card->ipato.enabled = (card->ipato.enabled)? 0 : 1; card->ipato.enabled = (card->ipato.enabled)? 0 : 1;
} else if (!strcmp(tmp, "1")) { } else if (sysfs_streq(buf, "1")) {
card->ipato.enabled = 1; card->ipato.enabled = 1;
list_for_each_entry_safe(tmpipa, t, card->ip_tbd_list, entry) { list_for_each_entry_safe(tmpipa, t, card->ip_tbd_list, entry) {
if ((tmpipa->type == QETH_IP_TYPE_NORMAL) && if ((tmpipa->type == QETH_IP_TYPE_NORMAL) &&
...@@ -396,7 +391,7 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev, ...@@ -396,7 +391,7 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
QETH_IPA_SETIP_TAKEOVER_FLAG; QETH_IPA_SETIP_TAKEOVER_FLAG;
} }
} else if (!strcmp(tmp, "0")) { } else if (sysfs_streq(buf, "0")) {
card->ipato.enabled = 0; card->ipato.enabled = 0;
list_for_each_entry_safe(tmpipa, t, card->ip_tbd_list, entry) { list_for_each_entry_safe(tmpipa, t, card->ip_tbd_list, entry) {
if (tmpipa->set_flags & if (tmpipa->set_flags &
...@@ -431,21 +426,19 @@ static ssize_t qeth_l3_dev_ipato_invert4_store(struct device *dev, ...@@ -431,21 +426,19 @@ static ssize_t qeth_l3_dev_ipato_invert4_store(struct device *dev,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
char *tmp;
int rc = 0; int rc = 0;
if (!card) if (!card)
return -EINVAL; return -EINVAL;
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
tmp = strsep((char **) &buf, "\n"); if (sysfs_streq(buf, "toggle"))
if (!strcmp(tmp, "toggle")) {
card->ipato.invert4 = (card->ipato.invert4)? 0 : 1; card->ipato.invert4 = (card->ipato.invert4)? 0 : 1;
} else if (!strcmp(tmp, "1")) { else if (sysfs_streq(buf, "1"))
card->ipato.invert4 = 1; card->ipato.invert4 = 1;
} else if (!strcmp(tmp, "0")) { else if (sysfs_streq(buf, "0"))
card->ipato.invert4 = 0; card->ipato.invert4 = 0;
} else else
rc = -EINVAL; rc = -EINVAL;
mutex_unlock(&card->conf_mutex); mutex_unlock(&card->conf_mutex);
return rc ? rc : count; return rc ? rc : count;
...@@ -613,21 +606,19 @@ static ssize_t qeth_l3_dev_ipato_invert6_store(struct device *dev, ...@@ -613,21 +606,19 @@ static ssize_t qeth_l3_dev_ipato_invert6_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count) struct device_attribute *attr, const char *buf, size_t count)
{ {
struct qeth_card *card = dev_get_drvdata(dev); struct qeth_card *card = dev_get_drvdata(dev);
char *tmp;
int rc = 0; int rc = 0;
if (!card) if (!card)
return -EINVAL; return -EINVAL;
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
tmp = strsep((char **) &buf, "\n"); if (sysfs_streq(buf, "toggle"))
if (!strcmp(tmp, "toggle")) {
card->ipato.invert6 = (card->ipato.invert6)? 0 : 1; card->ipato.invert6 = (card->ipato.invert6)? 0 : 1;
} else if (!strcmp(tmp, "1")) { else if (sysfs_streq(buf, "1"))
card->ipato.invert6 = 1; card->ipato.invert6 = 1;
} else if (!strcmp(tmp, "0")) { else if (sysfs_streq(buf, "0"))
card->ipato.invert6 = 0; card->ipato.invert6 = 0;
} else else
rc = -EINVAL; rc = -EINVAL;
mutex_unlock(&card->conf_mutex); mutex_unlock(&card->conf_mutex);
return rc ? rc : count; return rc ? rc : count;
......
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