Skip to content

Commit

Permalink
Merge "When in a softirq context, memory allocation should be atomic"…
Browse files Browse the repository at this point in the history
… into R3.0
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Sep 2, 2016
2 parents 54f87b0 + c08c488 commit a20d45b
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 12 deletions.
3 changes: 1 addition & 2 deletions dp-core/vr_flow.c
Expand Up @@ -1698,8 +1698,7 @@ __vr_flow_schedule_transition(struct vrouter *router, struct vr_flow_entry *fe,
}
flmd->flmd_defer_data = defer;

vr_schedule_work(vr_get_cpu(), vr_flow_work, (void *)flmd);
return 0;
return vr_schedule_work(vr_get_cpu(), vr_flow_work, (void *)flmd);
}

static int
Expand Down
4 changes: 3 additions & 1 deletion dpdk/vr_dpdk_host.c
Expand Up @@ -502,11 +502,13 @@ dpdk_get_mono_time(unsigned int *sec, unsigned int *nsec)
}

/* Work callback called on NetLink lcore */
static void
static int
dpdk_schedule_work(unsigned int cpu, void (*fn)(void *), void *arg)
{
/* no RCU reader lock needed, just do the work */
fn(arg);

return 0;
}

static void
Expand Down
5 changes: 3 additions & 2 deletions freebsd/vrouter_mod.c
Expand Up @@ -331,11 +331,12 @@ fh_get_cpu(void)
return (cpuid);
}

static void
static int
fh_schedule_work(unsigned int cpu, void (*fn)(void *), void *arg)
{

vr_log(VR_ERR, "%s: not implemented\n", __func__);

return -EOPNOTSUPP;
}

static void
Expand Down
4 changes: 2 additions & 2 deletions host/vrouter_host_mod.c
Expand Up @@ -225,10 +225,10 @@ vr_lib_get_cpu(void)
return 0;
}

static void
static int
vr_lib_schedule_work(unsigned int cpu, void (*fn)(void *), void *arg)
{
return;
return -EOPNOTSUPP;
}

static void
Expand Down
2 changes: 1 addition & 1 deletion include/vrouter.h
Expand Up @@ -159,7 +159,7 @@ struct host_os {
unsigned int (*hos_pgso_size)(struct vr_packet *);

unsigned int (*hos_get_cpu)(void);
void (*hos_schedule_work)(unsigned int, void (*)(void *), void *);
int (*hos_schedule_work)(unsigned int, void (*)(void *), void *);
void (*hos_delay_op)(void);
void (*hos_defer)(struct vrouter *, vr_defer_cb, void *);
void *(*hos_get_defer_data)(unsigned int);
Expand Down
16 changes: 12 additions & 4 deletions linux/vrouter_mod.c
Expand Up @@ -416,20 +416,28 @@ lh_work(struct work_struct *work)
return;
}

static void
static int
lh_schedule_work(unsigned int cpu, void (*fn)(void *), void *arg)
{
struct work_arg *wa = kzalloc(sizeof(*wa), GFP_KERNEL);
unsigned int alloc_flag;
struct work_arg *wa;

if (in_softirq()) {
alloc_flag = GFP_ATOMIC;
} else {
alloc_flag = GFP_KERNEL;
}

wa = kzalloc(sizeof(*wa), alloc_flag);
if (!wa)
return;
return -ENOMEM;

wa->fn = fn;
wa->wa_arg = arg;
INIT_WORK(&wa->wa_work, lh_work);
schedule_work_on(cpu, &wa->wa_work);

return;
return 0;
}

static void
Expand Down

0 comments on commit a20d45b

Please sign in to comment.