#define Inp32(addr) (*(unsigned int *)addr)
#define G2D_CheckFifo(value) while( (( Inp32(rG2D_FIFO_STAT) & 0x7e) >> 1) > (FIFO_NUM - value) ) { schedule(); }
앞의 코드는 s3c6410에서 파이프 안에 남아있는 2D 가속 명령어 개수를 검사한다.
기본적으로 커널 코드 안에는 while(레지스터 검사) { 반복 } 과 같은 폴링 검사를 넣어서는 안 된다.
schedule() 시리즈 함수에 대해서는 나중에 다시 설명하고.
잘 모르겠으면 위와 같이 하면 된다.
나머지는 거의 효율의 문제다.
레지스터를 검사함에 있어 SMP, atomic 문제는 다시 생각해야 한다.
앞의 코드 용도라면 그다지 문제가 되지 않는다.
다만 매번 스케쥴을 한다면 이것도 비용이다.