Portál AbcLinuxu, 31. října 2025 06:15
    rotation_thread = kthread_create(rotation_thread_function, cam, "rotation thread");
    cam->sensor->private_data = (void *)rotation_thread;
    wake_up_process(rotation_thread);
    
samotná vláknová funkce:
  
    int rotation_thread_function(void *data){
        struct m5602_camera *cam = (struct m5602_camera *)data;
        // deklarace pár struktur a lokálních proměnných
        
        set_current_state(TASK_INTERRUPTIBLE);
        while(!schedule_timeout(500)){
            
            // vemu si mutex pro přístup k zařízení
            if (mutex_lock_interruptible(&cam->fileop_mutex))
                continue;
            
            // tady se vykonává práce s hardwarem
            
            // uvolním mutex zařízení
            mutex_unlock(&cam->fileop_mutex);
            set_current_state(TASK_INTERRUPTIBLE);
        }
    
        info("End of rotation thread!");
        return 0;
    }
    
    
když má být vlákno ukončeno (při unloadu modulu):
    if (cam->sensor->private_data){
        kthread_stop((struct task_struct *)cam->sensor->private_data);
    }
Pokud to mám takto, vlákno běží krásně a v pravidelných intervalech se probouzí. Problém nastane, když chci modul unloadnout, například při hibernaci... Čas od času mi tento kód způsobí oops, který sebou s velkým rachotem veme usbcore a další moduly, takže jádro je nutné rebootnout :( 
Netuším kde přesně mám chybu. Odhaduji že asi ve špatném použití schdule_timeoout...? Nebo tam někdo vidíte kritickou část, kterou mám ošetřenu špatně? S vlákny v uživatelském prostoru nemám problém, ale v jádře něco takového píšu prvně... Navíc se to mnohem hůř ladí, než v user módu...
Za jakékoliv nápady předem děkuji. 
            
	...
	stop = 0;
	while((!schedule_timeout(100)) || stop ){
		if (mutex_lock_interruptible(&sd->gspca_dev.usb_lock)){
			stop = 1;
			continue;
		}
		...
Ještě pár dní budu svoji kameru tímto modulem trápit a pokud to ani jednou nespadne, půjde patch do světa...
Každopádně děkuji Lukynovi za čas :)
             3.1.2009 12:45
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
        3.1.2009 12:45
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
        
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.