abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    dnes 18:33 | Nová verze

    Operační systém MidnightBSD, fork FreeBSD optimalizovaný pro desktop s prostředím Xfce, byl vydán ve verzi 3.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 18:22 | IT novinky

    Na GOG.com běží Spring Sale. Při té příležitosti lze získat zdarma počítačovou hru Neurodeck: Psychological Deckbuilder (ProtonDB).

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Komunita

    Alex Ellis upozornil 15. března, že firma Docker se chystala zrušit bezplatný hosting open-source projektů na Docker Hubu. Po vlně odporu se představitelé firmy omluvili a posléze byl původní záměr odvolán.

    Fluttershy, yay! | Komentářů: 22
    včera 07:00 | IT novinky

    Ve věku 94 let zemřel Gordon Moore, mj. spoluzakladatel společnosti Intel a autor Moorova zákona.

    Ladislav Hagara | Komentářů: 1
    24.3. 17:11 | Nová verze

    Mercurial (Wikipedie), software pro SCM (Source Code Management), byl vydán ve verzi 6.4. Přehled novinek v poznámkách k vydání. Ve dnech 5. až 7. dubna proběhne konference Mercurial Paris.

    Ladislav Hagara | Komentářů: 0
    24.3. 11:55 | IT novinky

    Byly rozdány Ceny Velkého bratra (Big Brother Awards) za rok 2022 pro největší slídily pořádané nevládní organizací Iuridicum Remedium. Dlouhodobý slídil: Microsoft. Firemní slídil: Seznam. Úřední slídil: Nejvyšší správní soud. Výrok Velkého bratra: Marian Jurečka. Pozitivní cena: NoLog.

    Ladislav Hagara | Komentářů: 11
    24.3. 11:11 | Zajímavý projekt

    Byla představena online vzdělávací platforma Ada Computer Science pro učitele, studenty a kohokoli, kdo se zajímá o informatiku. Stojí za ní Raspberry Pi Foundation a Univerzita v Cambridgi.

    Ladislav Hagara | Komentářů: 0
    24.3. 09:11 | Bezpečnostní upozornění

    GitHub má nový RSA SSH klíč. Předchozí soukromý klíč byl krátce vystaven na GitHubu.

    Ladislav Hagara | Komentářů: 0
    24.3. 08:55 | IT novinky

    Společnost Framework Computer představila (YouTube) nové modulární notebooky: Laptop 13 s Intel Core nebo AMD Ryzen a Laptop 16 (YouTube).

    Ladislav Hagara | Komentářů: 0
    23.3. 19:33 | Nová verze

    Bylo vydáno Ubuntu 20.04.6 LTS, tj. šesté opravné vydání Ubuntu 20.04 LTS s kódovým názvem Focal Fossa. Přehled novinek v poznámkách k vydání a v přehledu změn.

    Ladislav Hagara | Komentářů: 4
    Používáte WSL (Windows Subsystem for Linux)?
     (74%)
     (12%)
     (4%)
     (10%)
    Celkem 326 hlasů
     Komentářů: 4, poslední 24.3. 06:42
    Rozcestník


    Dotaz: kthread: jak správně ukončit vlákno?

    Karry avatar 31.12.2008 11:51 Karry | skóre: 10
    kthread: jak správně ukončit vlákno?
    Přečteno: 294×
    Zdravím.

    Potřeboval bych v jaderném driveru nějakým způsobem implementovat vlákno, které by se po určitých časových intervalech probouzelo, dotázalo se hardwaru na jeho stav a podle výsledku vykonalo specifický kód.

    Zatím jsem to napsal zhruba takto:

    vytvoření vlákna a jeho spuštění:
        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.
    unzip; strip; touch; grep; finger; mount; fsck; more; yes; umount; sleep

    Odpovědi

    1.1.2009 09:42 luky
    Rozbalit Rozbalit vše Re: kthread: jak správně ukončit vlákno?
    Chybí mi tam kthread_should_stop() a myslím, že nenulová návratovka schedule_timeout() není důvod k ukončení toho cyklu.

    Při ručním unloadu jen toho jednoho modulu to klekne taky? Z Oopsu není vidět, kde to padne?
    Karry avatar 3.1.2009 01:42 Karry | skóre: 10
    Rozbalit Rozbalit vše Re: kthread: jak správně ukončit vlákno?
    Tak jsem si s tím dneska trochu pohrál a vypadá to už to nepadá. Prakticky jsem jenom při neúspěchu získání zámku k zařízení ukončil celé vlákno...
    	...
    	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 :)
    unzip; strip; touch; grep; finger; mount; fsck; more; yes; umount; sleep
    David Watzke avatar 3.1.2009 12:45 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: kthread: jak správně ukončit vlákno?
    Uff... nebylo by lepší dát do těla toho ifu spíš break a neřešit tu zbytečnou proměnnou stop?
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Karry avatar 3.1.2009 14:52 Karry | skóre: 10
    Rozbalit Rozbalit vše Re: kthread: jak správně ukončit vlákno?
    Jak říkáš :) Takhle to dopadá když programuju ve dvě ráno...
    unzip; strip; touch; grep; finger; mount; fsck; more; yes; umount; sleep

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.