spin_lock_irqsave, gcc und SMP vs Einprozessormaschinen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
belmont
Beiträge: 17
Registriert: 08.01.2009 19:15:57

spin_lock_irqsave, gcc und SMP vs Einprozessormaschinen

Beitrag von belmont » 04.03.2009 20:11:48

Hallo, ich bin gerade dabei mISDN_v2 (socket branch) deb's zu bauen.

Da ich auch zu Teil an mISDN z.Z. etwas mitarbeite, ist mit beim bauen der deb's eine Frage zu spin_lock_irqsave aufgetreten. Und zwar zu deren
portiertbarkeit in deb's also Binärpakete. Den im Buch "Linux Treiber entwickeln" steht dazu folgendes:

"Glücklicherweise muss sich der Treiberentwickler um die Differenzierung – Interruptsperre auf Einprozessormaschinen, Spinlocks bei SMP – keine Gedanken machen. Denn tatsächlich kann er in Linux Spinlocks scheinbar auch auf Einprozessormaschinen verwenden. Für ihn transparent expandiert der Compiler die zugehörigen Makros automatisch zu einer einfachen Interruptsperre." (1)

Heist dass, wenn ich die deb's auf einer Einprozessormaschine compile, dann sind die Binärpakete auf SMP Maschine nicht zu gebrauchen, da der gcc aus den Spinlocks einfache Interruptsperren macht?

Sollte man also Binärpakete möglichst immer auf einer SMP Maschine bauen, damit diese dann "dual use" sind?

Kristijan

(1) http://ezs.kr.hs-niederrhein.de/Treiber ... chutz.html

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: spin_lock_irqsave, gcc und SMP vs Einprozessormaschinen

Beitrag von Spasswolf » 04.03.2009 20:32:04

Das Makro spin_lock_irqsave ist unterschiedlich definiert, je nachdem ob CONFIG_SMP in der Kernel Konfiguration gesetzt ist oder nicht. Baust du die Pakete gegen einen nicht SMP Kernel (der 486 Debian) wird die Nicht SMP Version der Makros verwendet, baust du sie gegen einen SMP Kernel wird die SMP Version verwendet.
Je nachdem ob CONFIG_SMP gesetzt ist, wird in include/linux/spinlock.h der entsprechende Header eingebunden:

Code: Alles auswählen

/*
 * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
 */
#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
# include <linux/spinlock_api_smp.h>
#else
# include <linux/spinlock_api_up.h>
#endif

Benutzeravatar
belmont
Beiträge: 17
Registriert: 08.01.2009 19:15:57

Re: spin_lock_irqsave, gcc und SMP vs Einprozessormaschinen

Beitrag von belmont » 04.03.2009 20:58:33

Ok danke, verstehe. Das heißt, wenn ich deb's mit Kernel Modulen baue, dann diese mittels der Depend-Zeile in der control Datei an der jeweiligen Kernel
binden, auf welchen diese kompiliert wurden damit es passt.

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Re: spin_lock_irqsave, gcc und SMP vs Einprozessormaschinen

Beitrag von armin » 04.03.2009 21:05:42

Im Normalfall werden Kernelmodule nicht binär ausgeliefert, sonder in einer Form, die es erlaubt, das Modul mit dem module-assistant zu bauen.
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

Antworten