#include <linux/seq_file.h>
#include <linux/serial.h>
#include <linux/serialP.h>
+#include <linux/rcupdate.h>
#include <net/arp.h>
#include <linux/ip.h>
*/
if (haddr.c[0] == 0xFF) {
u32 brd = 0;
- struct in_device *in_dev = in_dev_get(strip_info->dev);
- if (in_dev == NULL)
+ struct in_device *in_dev;
+
+ rcu_read_lock();
+ in_dev = __in_dev_get(strip_info->dev);
+ if (in_dev == NULL) {
+ rcu_read_unlock();
return NULL;
- read_lock(&in_dev->lock);
+ }
if (in_dev->ifa_list)
brd = in_dev->ifa_list->ifa_broadcast;
- read_unlock(&in_dev->lock);
- in_dev_put(in_dev);
+ rcu_read_unlock();
/* arp_query returns 1 if it succeeds in looking up the address, 0 if it fails */
if (!arp_query(haddr.c, brd, strip_info->dev)) {
}
if (1) {
- struct in_device *in_dev = in_dev_get(strip_info->dev);
+ struct in_device *in_dev;
+
brd = addr = 0;
+ rcu_read_lock();
+ in_dev = __in_dev_get(strip_info->dev);
if (in_dev) {
- read_lock(&in_dev->lock);
if (in_dev->ifa_list) {
brd = in_dev->ifa_list->ifa_broadcast;
addr = in_dev->ifa_list->ifa_local;
}
- read_unlock(&in_dev->lock);
- in_dev_put(in_dev);
}
+ rcu_read_unlock();
}
tty->disc_data = strip_info;
if (tty->driver->flush_buffer)
tty->driver->flush_buffer(tty);
- if (tty->ldisc.flush_buffer)
- tty->ldisc.flush_buffer(tty);
/*
* Restore default settings