mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-15 15:03:08 +02:00
m1/perf/sched.c: return -1 if malloc fails
This commit is contained in:
parent
0a7e5b1473
commit
24a9b85ce0
@ -312,7 +312,7 @@ static void mark(int vm_reg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void init_registers(struct fpvm_fragment *frag,
|
static int init_registers(struct fpvm_fragment *frag,
|
||||||
unsigned int *registers)
|
unsigned int *registers)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -321,6 +321,8 @@ static void init_registers(struct fpvm_fragment *frag,
|
|||||||
|
|
||||||
sc->regs =
|
sc->regs =
|
||||||
calloc(frag->nbindings-frag->next_sur, sizeof(struct vm_reg));
|
calloc(frag->nbindings-frag->next_sur, sizeof(struct vm_reg));
|
||||||
|
if (!sc->regs)
|
||||||
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i != frag->ninstructions; i++) {
|
for (i = 0; i != frag->ninstructions; i++) {
|
||||||
mark(frag->code[i].opa);
|
mark(frag->code[i].opa);
|
||||||
@ -332,6 +334,8 @@ static void init_registers(struct fpvm_fragment *frag,
|
|||||||
for (i = PFPU_SPREG_COUNT; i != PFPU_REG_COUNT; i++)
|
for (i = PFPU_SPREG_COUNT; i != PFPU_REG_COUNT; i++)
|
||||||
if (!sc->pfpu_regs[i].used)
|
if (!sc->pfpu_regs[i].used)
|
||||||
list_add_tail(&sc->unallocated, &sc->pfpu_regs[i].more);
|
list_add_tail(&sc->unallocated, &sc->pfpu_regs[i].more);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -609,15 +613,22 @@ static int schedule(unsigned int *code)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void init_scheduler_context(struct fpvm_fragment *frag,
|
static int init_scheduler_context(struct fpvm_fragment *frag,
|
||||||
unsigned int *reg)
|
unsigned int *reg)
|
||||||
{
|
{
|
||||||
sc = calloc(1, sizeof(*sc));
|
sc = calloc(1, sizeof(*sc));
|
||||||
|
if (!sc)
|
||||||
|
return -1;
|
||||||
|
|
||||||
sc->frag = frag;
|
sc->frag = frag;
|
||||||
|
|
||||||
init_registers(frag, reg);
|
if (init_registers(frag, reg) < 0) {
|
||||||
|
free(sc);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
init_scheduler(frag);
|
init_scheduler(frag);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -627,7 +638,8 @@ int gfpus_schedule(struct fpvm_fragment *frag, unsigned int *code,
|
|||||||
pfpu_instruction vecout;
|
pfpu_instruction vecout;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
init_scheduler_context(frag, reg);
|
if (init_scheduler_context(frag, reg) < 0)
|
||||||
|
return -1;
|
||||||
memset(code, 0, PFPU_PROGSIZE*sizeof(*code));
|
memset(code, 0, PFPU_PROGSIZE*sizeof(*code));
|
||||||
res = schedule(code);
|
res = schedule(code);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user