spu_run(2) System Calls Manual spu_run(2) NAVN spu_run - afvikl en SPU-kontekst BIBLIOTEK C-standardbibliotek (libc, -lc) SYNOPSIS #include /* Definition af SPU_*-konstanter */ #include /* Definition af SYS_*-konstanter */ #include int syscall(SYS_spu_run, int fd, uint32_t *npc, uint32_t *event); Bemaerk: glibc tilbyder intet omslag for spu_run(), hvilket nodvendiggor brug af syscall(2). BESKRIVELSE Systemkaldet spu_run() bruges pa PowerPC-maskiner, der implementerer Cell Broadband Engine Architecture for at tilga Synergistic Processor Units (SPU'er). Argumentet fd er en fildeskriptor returneret af spu_create(2), der refererer til en specifik SPU-kontekst. Nar konteksten bliver planlagt til en fysisk SPU, sa startes afvikling pa instruktionspegeren sendt i npc. Afvikling af SPU-kode sker synkront, hvilket betyder at spu_run() blokerer mens SPU stadig afvikles. Hvis der er et behov for at afvikle SPU-kode parallelt med anden kode pa enten hoved-cpu'en eller andre SPU'er, skal en ny afviklingstrad oprettes forst (f.eks. via pthread_create(3)). Nar spu_run() returnerer skrives den nuvaerend evaerdi for SPU-programtaelleren til npc, sa efterfolgende kald til spu_run() kan bruge den samme npc-peger. Argumentet event tilbyder et mellemlager for en udvidet statuskode. Hvis SPU-konteksten blev oprettet med flaget SPU_CREATE_EVENTS_ENABLED, sa udfyldes dette mellemlager af Linuxkernen for spu_run() returnerer. Statuskoden kan vaere en (eller flere) af de folgende konstanter: SPE_EVENT_DMA_ALIGNMENT Der opstod en DMA-justeringsfejl. SPE_EVENT_INVALID_DMA En ugyldig MFC DMA-kommando blev forsogt. SPE_EVENT_SPE_DATA_STORAGE Der opstod en DMA-lagerfejl. SPE_EVENT_SPE_ERROR En illegal instruktion blev afviklet. NULL er en gyldig vaerdi for argumentet event argument. I dette tilfaelde vil haendelserne ikke blive rapporteret til den kaldende proces. RETURVAERDI Ved succes returnerer spu_run() vaerdien for registeret spu_status. Ved returneres -1 og errno angives for at indikere fejlen. Registervaerdien spu_status er en bitmaske for statuskoder og valgfrit en 14-bit kode returneret fra instruktionen stop-and-signal pa SPU'en. Bitmaskene for statuskoderne er: 0x02 SPU blev stoppet af en stop-and-signal-instruktion. 0x04 SPU blev stoppet af en halt-instrution. 0x08 SPU venter pa en kanal. 0x10 SPU er i enkelt trin-tilstand. 0x20 SPU har forsogt at afvikle en ugyldig instruktion. 0x40 SPU har forsogt at tilga en ugyldig kanal. 0x3fff0000 Bittene maskeret med denne vaerdi indeholder koden returneret fra en stop-and-signal-instruktion. Disse bit er kun gyldige hvis 0x02-bitten er angivet. Hvis spu_run() ikke har returneret en fejl, er en eller flere bit blandt de nedre otte altid angivet.* FEJL EBADF fd er ikke en gyldig filbeskrivelse. EFAULT npc er ikke en gyldig peger, eller event er ikke-NULL og en ugyldig peger. EINTR Der opstod et signal mens spu_run() var i gang; se signal(7). Vaerdien npc er blevet opdateret til den nye programtaellervaerdi hvis nodvendigt. EINVAL fd er ikke en gyldig fildeskriptor returneret fra spu_create(2). ENOMEM Der var ikke nok hukommelse tilgaengelig til at handtere en sidefejl medfort fra en Memory Flow Controller (MFC) direkte hukommelsesadgang. ENOSYS Funktionaliteten er ikke tilbudt af det nuvaerende system, da hverken udstyret tilbyder SPU'er eller spufs-modulet er indlaest. STANDARDER Linux pa PowerPC. HISTORIK Linux 2.6.16. NOTER spu_run() er lavet til brug fra biblioteker, der impelemnterer en mere abstrakt graenseflade til SPU'er, ikke til brug fra normale programmer. Se for de anbefalede biblioteker. EKSEMPLER Det folgende er et eksempel pa afvikling af et simpelt, en instruktion SPU-program med systemkaldet spu_run(). #include #include #include #include #include #include #include int main(void) { int context, fd, spu_status; uint32_t instruction, npc; context = syscall(SYS_spu_create, "/spu/example-context", 0, 0755); if (context == -1) err(EXIT_FAILURE, "spu_create"); /* * Skriv en 'stop 0x1234' instruktion til SPU'en's * lokale lagerhukommelse. */ instruction = 0x00001234; fd = open("/spu/example-context/mem", O_RDWR); if (fd == -1) err(EXIT_FAILURE, "open"); write(fd, &instruction, sizeof(instruction)); /* * angiv npc til den startende instruktionsadresse for * SPU-programmet. Siden vi skrev instruktionen i starten af * mem-filen vil indgangspunktet vaere 0x0. */ npc = 0; spu_status = syscall(SYS_spu_run, context, &npc, NULL); if (spu_status == -1) err(EXIT_FAILURE, "open"); /* * Vi bor se en statuskode pa 0x12340002: * 0x00000002 (spu blev stoppet pa grund af stop og signal) * | 0x12340000 (stop og signal-koden) */ printf("SPU Status: %#08x\n", spu_status); exit(EXIT_SUCCESS); } SE OGSA close(2), spu_create(2), capabilities(7), spufs(7) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Dalton Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.18 8. februar 2026 spu_run(2)