Skip to content
  • David Howells's avatar
    [PATCH] NOMMU: Make futexes work under NOMMU conditions · 930e652a
    David Howells authored
    Make futexes work under NOMMU conditions.
    
    This can be tested by running this in one shell:
    
    	#define SYSERROR(X, Y) \
    		do { if ((long)(X) == -1L) { perror(Y); exit(1); }} while(0)
    
    	int main()
    	{
    		int shmid, tmp, *f, n;
    
    		shmid = shmget(23, 4, IPC_CREAT|0666);
    		SYSERROR(shmid, "shmget");
    
    		f = shmat(shmid, NULL, 0);
    		SYSERROR(f, "shmat");
    
    		n = *f;
    		printf("WAIT: %p{%x}\n", f, n);
    		tmp = futex(f, FUTEX_WAIT, n, NULL, NULL, 0);
    		SYSERROR(tmp, "futex");
    		printf("WAITED: %d\n", tmp);
    
    		tmp = shmdt(f);
    		SYSERROR(tmp, "shmdt");
    
    		exit(0);
    	}
    
    And then this in the other shell:
    
    	#define SYSERROR(X, Y) \
    		do { if ((long)(X) == -1L) { perror(Y); exit(1); }} while(0)
    
    	int main()
    	{
    		int shmid, tmp, *f;
    
    		shmid = shmget(23, 4, IPC_CREAT|0666);
    		SYSERROR(shmid, "shmget");
    
    		f = shmat(shmid, NULL, 0);
    		SYSERROR(f, "shmat");
    
    		(*f)++;
    		printf("WAKE: %p{%x}\n", f, *f);
    		tmp = futex(f, FUTEX_WAKE, 1, NULL, NULL, 0);
    		SYSERROR(tmp, "futex")...
    930e652a