AnsweredAssumed Answered

icc_loader question

Question asked by VicZ Employee on Dec 14, 2016
Latest reply on Apr 20, 2017 by Gregchen

I do have a question about icc_loader (the inter-core communications loader).  Sporadically I get an out of memory error on the console when it runs:

 

writing to 0x05800000, 0x138800  bytes: OK

writing to 0x06000000, 0x5dc     bytes: OK

out of memory (could not malloc(9830400))

writing to 0x069605e0, 0x1dd8    bytes: OK

writing to 0x07000000, 0x214d5e  bytes: OK

 

I suspect this is from fragmentation, because I can make it work by rearranging how things happen at startup a bit,

so I’m not actually too worried about that specific situation.

 

However, it appears that "icc_loader -l ourstuff.dxe" needs to re-run every time the unit wakes up from sleep-to-mem

(otherwise the other core stuff just doesn’t seem to run), and I’m worried that it might get unlucky and lose at some point.

 

Is it possible to avoid having to reload the other core after sleep-to-mem suspend (echo mem > /sys/power/state) ?

I tried running just the core startup code, cribbed from icc_loader.c, but while it didn't fail, the other core seems unresponsive:

 

    int fd = open("/dev/coreb", O_RDWR);

 

    if (fd < 0) {

        perror("unable to open /dev/coreb");

        return -1;

    }

 

    if (ioctl(fd, CMD_COREB_START, NULL) != 0) {

        perror("ioctl(CMD_COREB_START)");

        return -1;

    }

    close(fd);

Outcomes