forked from luck/tmp_suning_uos_patched
net/802: add __rcu annotations
(struct net_device)->garp_port is rcu protected : (struct garp_port)->applicants is rcu protected : add __rcu annotation and proper rcu primitives. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
198caeca3e
commit
3cc77ec74e
|
@ -1072,7 +1072,7 @@ struct net_device {
|
|||
struct pcpu_dstats __percpu *dstats; /* dummy stats */
|
||||
};
|
||||
/* GARP */
|
||||
struct garp_port *garp_port;
|
||||
struct garp_port __rcu *garp_port;
|
||||
|
||||
/* class/net/name entry */
|
||||
struct device dev;
|
||||
|
|
|
@ -107,7 +107,7 @@ struct garp_applicant {
|
|||
};
|
||||
|
||||
struct garp_port {
|
||||
struct garp_applicant *applicants[GARP_APPLICATION_MAX + 1];
|
||||
struct garp_applicant __rcu *applicants[GARP_APPLICATION_MAX + 1];
|
||||
};
|
||||
|
||||
extern int garp_register_application(struct garp_application *app);
|
||||
|
|
|
@ -346,8 +346,8 @@ int garp_request_join(const struct net_device *dev,
|
|||
const struct garp_application *appl,
|
||||
const void *data, u8 len, u8 type)
|
||||
{
|
||||
struct garp_port *port = dev->garp_port;
|
||||
struct garp_applicant *app = port->applicants[appl->type];
|
||||
struct garp_port *port = rtnl_dereference(dev->garp_port);
|
||||
struct garp_applicant *app = rtnl_dereference(port->applicants[appl->type]);
|
||||
struct garp_attr *attr;
|
||||
|
||||
spin_lock_bh(&app->lock);
|
||||
|
@ -366,8 +366,8 @@ void garp_request_leave(const struct net_device *dev,
|
|||
const struct garp_application *appl,
|
||||
const void *data, u8 len, u8 type)
|
||||
{
|
||||
struct garp_port *port = dev->garp_port;
|
||||
struct garp_applicant *app = port->applicants[appl->type];
|
||||
struct garp_port *port = rtnl_dereference(dev->garp_port);
|
||||
struct garp_applicant *app = rtnl_dereference(port->applicants[appl->type]);
|
||||
struct garp_attr *attr;
|
||||
|
||||
spin_lock_bh(&app->lock);
|
||||
|
@ -546,11 +546,11 @@ static int garp_init_port(struct net_device *dev)
|
|||
|
||||
static void garp_release_port(struct net_device *dev)
|
||||
{
|
||||
struct garp_port *port = dev->garp_port;
|
||||
struct garp_port *port = rtnl_dereference(dev->garp_port);
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i <= GARP_APPLICATION_MAX; i++) {
|
||||
if (port->applicants[i])
|
||||
if (rtnl_dereference(port->applicants[i]))
|
||||
return;
|
||||
}
|
||||
rcu_assign_pointer(dev->garp_port, NULL);
|
||||
|
@ -565,7 +565,7 @@ int garp_init_applicant(struct net_device *dev, struct garp_application *appl)
|
|||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if (!dev->garp_port) {
|
||||
if (!rtnl_dereference(dev->garp_port)) {
|
||||
err = garp_init_port(dev);
|
||||
if (err < 0)
|
||||
goto err1;
|
||||
|
@ -601,8 +601,8 @@ EXPORT_SYMBOL_GPL(garp_init_applicant);
|
|||
|
||||
void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl)
|
||||
{
|
||||
struct garp_port *port = dev->garp_port;
|
||||
struct garp_applicant *app = port->applicants[appl->type];
|
||||
struct garp_port *port = rtnl_dereference(dev->garp_port);
|
||||
struct garp_applicant *app = rtnl_dereference(port->applicants[appl->type]);
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
#define GARP_ADDR_MAX 0x2F
|
||||
#define GARP_ADDR_RANGE (GARP_ADDR_MAX - GARP_ADDR_MIN)
|
||||
|
||||
static const struct stp_proto *garp_protos[GARP_ADDR_RANGE + 1] __read_mostly;
|
||||
static const struct stp_proto *stp_proto __read_mostly;
|
||||
static const struct stp_proto __rcu *garp_protos[GARP_ADDR_RANGE + 1] __read_mostly;
|
||||
static const struct stp_proto __rcu *stp_proto __read_mostly;
|
||||
|
||||
static struct llc_sap *sap __read_mostly;
|
||||
static unsigned int sap_registered;
|
||||
|
|
Loading…
Reference in New Issue
Block a user