# [HOWTO] Abilitare il local APIC sui DELL INSPIRON/LATITUDE

## mfkr79

If you prefer, here is the english version

Revisioni

Prima versione --> 4 Luglio 2004

Ultimo aggiornamento --> 25 Ottobre 2004, aggiunta la procedura per i kernel 2.6.9 e altre considerazioni finali...

Definizione

APIC è un acronimo che significa Advanced Programmable Interrupt Controller, una versione migliorata dei più semplici controller di interrupt (PIC).

Può gestire interrupt da e per molteplici CPU e, solitamente, ha a disposizione più linee di interrupt di un tipico PIC.

L'APIC non deve essere confuso con l'ACPI, cioé Advanced Configuration and Power Interface, uno standard aperto per la configurazione e la gestione delle risorse energetiche.

Perchè abilitare l'APIC ?

L'APIC è importante non solo in sistemi multi-processore, ma può esserlo anche in quelli a singola CPU, sia per risolvere conflitti nell'assegnazione delle risorse sia perché è necessario per abilitare le caratteristiche proprie delle specifiche PCI. 

Dato che alcuni utenti sospettano che parte dei loro problemi con i portatili DELL Inspiron/Latitude possano dipendere dalla mancata abilitazione del local APIC,

ho pensato di illustrare come abilitarne il supporto nel kernel, essendo nel mio piccolo riuscito nell'impresa.

Requisiti & Diagnosi

La procedura è stata concepita e sperimentata con successo su un Pc DELL Inspiron 8500 in combinazione con i kernel linux-2.6.7-gentoo-r8 e linux-2.6.7-love5.

Riguardo al kernel, ragionevolmente credo siano adatti allo scopo tutti quelli della serie 2.6, indipendentemente dal patchset applicato. 

Onestamente non posso affermare con certezza che il problema dell'abilitazione del local APIC riguardi TUTTI i modelli INSPIRON/LATITUDE...

Fra i modelli Inspiron, quelli afflitti dal problema dovrebbero essere gli 8200, 8500 e i 51x0; vale a dire quelli equipaggiati con CPU Pentium4, mobile Pentium4 e mobile Pentium4-M.

Tutta la serie di processori Pentium4 è dotata di local APIC, quindi è possibile forzarne l'uso nel kernel.

Per quanto riguarda i Pentium-M (Centrino), in base ai test fatti da altri utenti, pare che i portatili funzionino bene forzando l'abilitazione dell'APIC.

In merito ai vari Pentium3, sembra proprio che siano i modelli che montano tali CPU la causa della disabilitazione forzata del local APIC sugli INSPIRON/LATITUDE, questo perchè è l'unico modo per aggirare un bug nel BIOS.

In particolare 

Inspiron 8600 : ha il Pentium-M, sembra funzionare con l'APIC

Inspiron 8500 : ha il mobile Pentium4-M, il mio funziona bene con il local APIC abilitato

Inspiron 8200 : ha il mobile Pentium4-M, probabilmente ha dei problemi con l'APIC abilitato

Inspiron 51x0 : alcuni hanno il Pentium4, altri il mobile Pentium4, i primi modelli non avevano l'HyperThreading, su un 5150 col mobile Pentium4 (NO HT) sembra che il comportamento del pc con l'APIC abilitato sia nettamente migliore

Inspiron xx0m : tutti dovrebbero avere il Pentium-M, attendo informazioni da chi volesse provare...

Il brand Latitude è dedicato all'utenza business, e, per quanto ne so io, ha caratteristiche tecniche identiche ai corrispettivi modelli Inspiron, quindi valgono le stesse considerazioni fatte sopra.

Latitude D600 : ha il Pentium-M, funziona

Latitude C640 : ha il mobile Pentium4-M, probabilmente ha dei problemi con l'APIC abilitato

Latitude X200 : ha il Pentium3, sembra ok con l'apic

Se possedete un Inspiron e avete abilitato in "Processor type and features" l'opzione "Local APIC support on uniprocessors" probabilmente nell'output del vostro dmesg è presente una riga come questa

```
Dell Inspiron with broken BIOS detected. Refusing to enable the local APIC.
```

o se possedete un Latitude e avete abilitato in "Processor type and features" l'opzione "Local APIC support on uniprocessors" probabilmente nell'output del vostro dmesg è presente una riga come questa

```
Dell Latitude with broken BIOS detected. Refusing to enable the local APIC.
```

allora vuol dire che sul vostro portatile il kernel non ha abilitato l'APIC.

Si tratta di una misura precauzionale, dato che i primi modelli avevano difficoltà nel funzionare con l'APIC abilitato.

Essendosi succedute sul mercato diverse generazioni di Inspiron/Latitude, sarebbe interessante verificare se anche quelle recenti sono afflitte dagli stessi problemi, "costringendo" il kernel ad abilitarlo.

Vediamo come fare...

---EDIT---

A partire dai kernel 2.6.9 sulla serie Inspiron/Latitude non appare più il messaggio di cui sopra,

inoltre tutta la procedura per abilitare l'APIC descritta nella parte che segue non è più necessaria  :Razz: 

Bastano pochi e semplici passaggi:

Abilitare Local e, facoltativamente IO APIC

```
Processor type and features  --->

[*] Local APIC support on uniprocessors

[*]   IO-APIC support on uniprocessors
```

compilare il kernel e riavviare il sistema 

Se appare qualcosa di simile nel dmesg

```
...

No local APIC, or hardware disabled
```

allora è necessario un ulteriore accorgimento, vale a dire passare al bootloader i seguenti  parametri

```
apic=debug lapic
```

e ovviamente riavviare

Ora dovrebbe esserci qualcosa di simile nel dmesg

```
Local APIC disabled by BIOS -- reenabling.

Found and enabled local APIC!

mapped APIC to ffffd000 (fee00000)

...

```

---/EDIT---

Istruzioni

[ Lascierò comunque disponibile questa parte, per quelli che si volessero divertire con le versioni precedenti al kernel 2.6.9   :Cool:  ]

  Individuare la directory contenente i sorgenti del kernel su cui vogliamo abilitare l'APIC, tipicamente qualcosa del tipo /usr/src/"nome kernel"

 Posizionarsi nella directory /usr/src/"nome kernel"/arch/i386/kernel

 Aprire con un editor di testi il file "dmi_scan.c"

 Rintracciare le righe di codice che riguardano il proprio modello di portatile e disabilitarle commentandole con /* */ ...così:

/*

la parte di codice da disabilitare

*/

Per il DELL Inspiron:

```
{ local_apic_kills_bios, "Dell Inspiron", {

         MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),

         MATCH(DMI_PRODUCT_NAME, "Inspiron"),

         NO_MATCH, NO_MATCH

         } },

```

Per il DELL Latitude:

```
{ local_apic_kills_bios, "Dell Latitude", {

         MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),

         MATCH(DMI_PRODUCT_NAME, "Latitude"),

         NO_MATCH, NO_MATCH

         } },

```

 Salvare il file "dmi_scan.c" e compilare il kernel così modificato, avendo cura di selezionare (NON come moduli) nel sottomenu "Processor type and features" le opzioni:

"Local APIC support on uniprocessors"

"IO-APIC support on uniprocessors"

"/dev/cpu/microcode - Intel IA32 CPU microcode support"

"/dev/cpu/*/msr - Model-specific register support"

"/dev/cpu/*/cpuid - CPU information support"

 Riavviare il Pc con il kernel appena ricompilato, e controllare l'output del dmesg.

Se trovate una riga simile a "No local APIC, or hardware disabled" passate al punto successivo;

se invece il local APIC risulta abilitato, la procedura termina qui, se volete, passate al punto (12)

 E' necessaria un'ulteriore modifica ai sorgenti del kernel.

Posizionarsi nuovamente nella directory /usr/src/"nome kernel"/arch/i386/kernel

 Aprire con un editor di testi il file "apic.c"

 Rintracciare la parte di codice indicata sotto e modificarla come indicato

```
goto no_apic;

case X86_VENDOR_INTEL:

   if (boot_cpu_data.x86 == 6 ||

      (boot_cpu_data.x86 == 15 && (cpu_has_apic ||enable_local_apic > 0)) ||     

      (boot_cpu_data.x86 == 5 && cpu_has_apic))

         break;

   goto no_apic;

default:

   goto no_apic;

}

```

sostituire la riga, commentandola usando /* codice */

```
(boot_cpu_data.x86 == 15 && (cpu_has_apic || enable_local_apic > 0)) ||

```

con la riga seguente

```
(boot_cpu_data.x86 == 15 || enable_local_apic > 0) ||

```

 Salvare il file "apic.c" e ricompilare il kernel così modificato, avendo cura di selezionare (NON come moduli) nel sottomenu "Processor type and features" le stesse opzioni del punto (5)

 Riavviare il Pc con il kernel appena ricompilato, e controllare l'output del dmesg

Ora dovreste leggere qualcosa tipo

```
Local APIC disabled by BIOS -- reenabling.

Found and enabled local APIC!

 ...

Using local APIC timer interrupts.

calibrating APIC timer ...

..... CPU clock speed is xxxx MHz.

..... host bus clock speed is xxx MHz.

```

 Fra le flag della CPU ora dovrebbe comparire anche "apic", per controllarlo, da riga di comando, dare

```
cat /proc/cpuinfo | grep flags
```

io ottengo

```
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid
```

Sono benvenuti commenti, suggerimenti, critiche e sopratutto impressioni sul funzionamento del pc dopo l'abilitazione dell'APIC.

E' doveroso citare il fatto che la creazione di questo HowTo non sarebbe stata possibile senza l'ausilio di Google...  

Spero che qualcuno lo trovi utile, ho visto che diversi utenti hanno segnalato problemi con  l'APIC dei DELL, questo HowTo potrebbe aiutarli.

Vi ricordo che si tratta comunque di modifiche delicate, che operano su parametri a basso livello, non ritenetemi responsabile se seguendo questa procedura arrecherete danni permanenti e irreparabili al vostro portatile, a voi stessi, ai vostri cari e a tutto il vicinato...  :Smile: 

Ciao e alla prossima

P.S. Ah, dimenticavo, è il mio primo post, saluto tutti i membri del forum e li ringrazio. Uso Gentoo da Settembre 2003 su diversi computer con soddisfazione. Leggendo i post, specie quelli della sezione italiana, ho imparato molto.

Grazie a tutti

Considerazioni finali

Dopo vari giorni di test con l'APIC abilitato posso dire che il mio sistema è rock solid e le prestazioni invariate, l'assegnazione degli IRQ non è cambiata di una virgola,

permane l'affollamento sugli IRQ7 & 11   :Crying or Very sad:  ...

L'unico inconveniente, che a me da molto fastidio, consiste nel fatto che la fase di spegnimento non è completata del tutto, tutti i servizi vengono arrestati correttamente, le partizioni smontate, infine compare la scritta "power down", ma se non si preme il tasto power per i canonici 5 sec, il Pc non si spegne. 

IMHO, sull' 8500,

a meno che non si riesca ad usare l' IO APIC (ammettendo che sia presente) per l'IRQ routing invece del PIC, come mostrato dal dmesg

```
ACPI: Using PIC for interrupt routing
```

li gioco non vale la candela, il solo local APIC non apporta alcun miglioramento, introducendo anzi il suddetto problema allo spegnimento

Altri modelli, come il 5150, invece sembrano beneficiarneLast edited by mfkr79 on Mon Oct 25, 2004 10:12 pm; edited 19 times in total

----------

## fedeliallalinea

Purtroppo non posso provare il tuo howto comunque complimenti per il lavoro fatto  :Very Happy: 

----------

## silian87

complimeti!! idem, anche io non posso provarlo. Essendo il tuo primo topic: doppi complimenti!! Benvenuto!   :Very Happy: 

----------

## mfkr79

Grazie grazie,

da una veloce ricerca sul forum ho notato dei topic dove vengono segnalati problemi con l'Apic, è corretto invitare alla lettura di questo howto, o è meglio copiare ed incollarne una sintesi sui topic in questione?

----------

## fedeliallalinea

Meglio se gli dai il link a questo post... e' inutile replicare parte di questo post

----------

## HunterD

Io ho un inspiron 8600 ( pentium M ) al boot non ho problemi di bios però nelle flag del processore non vedo apic... è grave ? devo preoccuparmi di abilitarlo ? Sicuramente non l'avrò compilato nel kernel...

----------

## pirassic

anch'io ho un inspiron 8600 con pentium M. mi potete dire come si comporta a livello di wireless lan e di batteria? sapevo che linux ancora non aveva supporto per la piattaforma centrino..

----------

## mfkr79

@ HunterD: prova ad abilitarlo nel kernel e a guardare cosa cambia nell'output del dmesg al riavvio...sarebbe meglio averlo abilitato e funzionante a meno che non crei problemi di stabilità o malfunzionamento

@ pirassic: per la wlan del centrino dovrebbero essere disponibili dei driver x linux scritti dalla Intel stessa, per la batteria credo tu indenda la durata...dovrebbe essere tutto ok, a patto di abilitare nel kernel l'ACPI (da non confondere con l'APIC) e il supporto al risparmio energetico della cpu tramite frequency throttling (cpufreq)

----------

## MonsterMord

APIC, questo sconosciuto...

mi studio subito il tuo lavoro, grazie mille  :Wink: 

----------

## mfkr79

Sul topic in inglese sto cercando di raccogliere le impressioni degli utenti sulle differenze di funzionamento/stabilità/prestazioni rispetto ai kernel con APIC disabilitato

Chi volesse può postare le proprie direttamente lì... se l'inglese non vi piace o non lo "masticate" non c'é problema, postate qui

Ciao, e fatemi sapere se a voi funge

----------

## MonsterMord

Nel file dmi_scan.c è scritto:

```
...

        /* Machines which have problems handling enabled local APICs */

        { local_apic_kills_bios, "Dell Inspiron", {

                        MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),

                        MATCH(DMI_PRODUCT_NAME, "Inspiron"),

                        NO_MATCH, NO_MATCH

                        } },

....

```

La tua procedura mi sembra si limiti a togliere il controllo che disabilita l'APIC sul nostro portatile ma non risolve il problema:

Machines which have problems handling enabled local APICs

Hai idea di quali possano essere questi problemi?

Tu ne stai avendo?

E' sicuro togliere le protezioni che qualcun'altro ha messo?

Che versione di BIOS hai? Io la A05.

Hai idea se qualcuno ci sta lavorando sopra o ci dobbiamo improvvisare kernel hacker?

----------

## mfkr79

 *MonsterMord wrote:*   

> La tua procedura mi sembra si limiti a togliere il controllo che disabilita l'APIC sul nostro portatile ma non risolve il problema:
> 
> Machines which have problems handling enabled local APICs

 

Hai ragione, ma stai dando per scontato che TUTTI i modelli abbiano problemi nella gestione dell'APIC. Sto cercando, con l'aiuto di chi volesse provare la procedura, di capire se effettivamente è così, e leggendo in giro non solo l'unico interessato...

 *Quote:*   

> Hai idea di quali possano essere questi problemi?
> 
> Tu ne stai avendo?
> 
> E' sicuro togliere le protezioni che qualcun'altro ha messo?

 

Sul mio portatile l'APIC è Attivo da 3 giorni circa, ti traduco il mio post di impressioni che accompagna la versione inglese di questo howto:

"In due giorni nessun blocco, il sistema sembra rock solid, tutti i servizi funzionano come al solito... Ho giocato con TuxRacer, UT2003, RtCW, rippato CD & DVD vari, navigato e scritto questo howto senza alcun problema apparente  

A me il sistema non si impalla staccando il cavo dell'alimentatore (problema avuto da altri)

Nessun miglioramento prestazionale, anzi noto 4-5 fps in meno giocando a TuxRacer.

La reattività del sistema sembra la stessa... 

L'unico inconveniente, che a me da molto fastidio, consiste nel fatto che la fase di spegnimento non è completata del tutto, tutti i servizi vengono arrestati correttamente, le partizioni smontate, infine compare la scritta "power down", ma se non si preme il tasto power per i canonici 5 sec, il Pc non si spegne. Sto indagando, vi terrò informati..."

L'aspetto chiave IMHO è capire se, abilitando il local APIC, il sistema rimane stabile e contemporaneamente migliora la gestione di IRQ e risorse varie 

 *Quote:*   

> Che versione di BIOS hai? Io la A05.

 

Anche io, purtroppo è l'ultima revisione, datata ottobre 2003, se non sbaglio...

E' anche discretamente bacata, per esempio la DSDT (Differentiated System Description Table) del BIOS A05  presenta diversi errori che influiscono negativamente sul funzionamento dell'ACPI (non dell'APIC)...

Io passo al kernel una DSDT ottimizzata e con gli errori più gravi corretti, che sostituisce quella bacata del BIOS, e ho notato che il portatile è molto più tiepido, specie nella zona scheda video (fra i tasti "power" F7 e F9, per intenderci)

Se ti interessa come fare, guarda qui, è una procedura universale, non l'ho creata io, vai tranquillo  :Wink: 

 *Quote:*   

> Hai idea se qualcuno ci sta lavorando sopra o ci dobbiamo improvvisare kernel hacker?

 

Le modifiche al sorgente del kernel da me proposte non sono del tutto campate in aria, sono ispirate a delle modifiche già provate da qualcuno altro ai tempi dei tree di sviluppo (il 2.5), io le ho semplicemente adattate alle differenze del codice attuale (non sono un kernel hacker, nè un programmatore, conosco un pò di Java/Javascript, non è la prima volta che metto mano ai sorgenti in C di linux, finora danni irreparabili non ne ho fatti)

Secondo me non si corre il rischio di danneggiare il portatile, al massimo si potrà ottenere un oops... in quel caso, reset, riavvio e annullamento delle modifiche al sorgente...

Sarebbe mia intenzione raccogliere un piccolo campione di esperienze e, in caso di risultati incoraggianti su qualche modello (magari il nostro 8500), sottoporre l'esperimento a qualcuno più competente (magari uno sviluppatore del kernel) per lavorarci su, se vuole...

Comunque IMHO, se c'è qualcuno che deve lavorare costui è DELL (o i suoi tecnici che dir si voglia), dopo aver speso più di 2000 euro, gradirei avere un BIOS meno bacato, dato che la tastiera decente sembra un'utopia   :Crying or Very sad: 

Ciao

----------

## MonsterMord

 *mfkr79 wrote:*   

> Secondo me non si corre il rischio di danneggiare il portatile

 

Ne devo essere sicuro, mi è scaduta la garanzia una settimana fa  :Very Happy: 

Ora provo come funziona con APIC attivo, magari potremmo scambiarci un po' di info su come abbiamo settato la macchina in privato, non penso che la cosa interessi tutto il forum.

scrivimi un messaggio privato così ci scambiamo le e-mail.

 *Quote:*   

>  *Quote:*   Hai idea se qualcuno ci sta lavorando sopra o ci dobbiamo improvvisare kernel hacker? 
> 
> Le modifiche al sorgente del kernel da me proposte non sono del tutto campate in aria

 

Non voleva essere una accusa, solo un grido di dolore per non vedere risolti questi problemi a quasi due anni di uscita di questo modello   :Crying or Very sad:  .

----------

## X-Drum

sul mio portatile non ho problemi con l'APIC, ma è stao ugualmente interessante leggere il tuo how-to, complimenti molto carino

----------

## Fuzzo

Semplicemente meraviglioso!

Io e il mio DELL 5150 ringraziamo!  :Very Happy: 

Mi sembra perfino che il sistema non vada più in pausa-caffè occasionale!  :Very Happy: 

Questa guida dovrebbe essere una FAQ  :Smile: 

Grazie!

----------

## X-Drum

concordo per la maggior parte dei laptop questo discorso è vitale...

----------

## mfkr79

@ X-Drum : grazie per i complimenti

@ Fuzzo : hai provato a staccare il cavo di alimentazione col pc acceso o a spegnere del tutto il pc (halt o init 0 che dir si voglia); te lo chiedo perchè in queste situazioni, con local APIC abilitato, altri modelli di Inspiron/Latitude presentano problemi, e tu sei il primo con un 5150 che posta le proprie impressioni...

Se possibile posteresti la versione di kernel e di BIOS in uso e se hai l'HyperThreading funzionante, grazie mille

----------

## .:deadhead:.

 *mfkr79 wrote:*   

> Dopo vari giorni di test con l'APIC abilitato posso dire che il mio sistema è rock solid, l'assegnazione degli IRQ non è cambiata di una virgola, permane l'affollamento sugli IRQ7 & 11   ... il sitema e più tiepido, ma dovrebbe dipendere più dalla DSDT modificata che dall'Apic

 Probabile  :Mr. Green: 

 *mfkr79 wrote:*   

> L'unico inconveniente, che a me da molto fastidio, consiste nel fatto che la fase di spegnimento non è completata del tutto, tutti i servizi vengono arrestati correttamente, le partizioni smontate, infine compare la scritta "power down", ma se non si preme il tasto power per i canonici 5 sec, il Pc non si spegne. Sto indagando, vi terrò informati...

 Anche a me! E se in effetti non cambia proprio nisba... beh mi ricompilo il nuovo kernel gentoo-2.6.7-r11 e vada via l'orghen...Ciò nonostante,che emozione spippolare un po' con il kernel  :Wink:  complimenti davvero...

----------

## mfkr79

@ .:deadhead:. 

Potresti dirmi su che modello di portatile hai provato ?

----------

## Fuzzo

 *mfkr79 wrote:*   

> @ X-Drum : grazie per i complimenti
> 
> @ Fuzzo : hai provato a staccare il cavo di alimentazione col pc acceso o a spegnere del tutto il pc (halt o init 0 che dir si voglia); te lo chiedo perchè in queste situazioni, con local APIC abilitato, altri modelli di Inspiron/Latitude presentano problemi, e tu sei il primo con un 5150 che posta le proprie impressioni...
> 
> Se possibile posteresti la versione di kernel e di BIOS in uso e se hai l'HyperThreading funzionante, grazie mille

 

Ciao: nessun problema a postare le mie impressioni!

Innanzitutto una premessa, il kernel è il gentoo-dev-sources versione 2.6.7-r11, ho provato solo con questo  :Smile: 

Ma passiamo alle risposte:

1. Non ricordo di avere spento il pc con poweroff oggi (ho appena fatto una brevissima prova) se è questo che intendi, ho solo provato a riavviare (sono ancora con MS), senza nessun problema! Farò sapere...

2. Il mio portatile è un Dell Inspiron 5150 con P4 3.06 GHz SENZA HT!

3. Il BIOS è la versione A34 (credo sia l'ultimo)  :Very Happy: 

Se può essere d'aiuto:

- Per installare Gentoo 2004.1 ho usato un Universal CD e non c'era verso di riuscire a far funzionare la scheda di rete Broadcom 4400 integrata nel notebook senza aggiungere noapic al boot;

- La brevissima prova che ho fatto, ha mostrato che la scheda di rete funziona su l'IRQ 17 (con noapic va all'11), funziona il suono e il mouse UBS senza nessun problema;

- Ho provato ad avviare emacs (uno dei programmi che quando si avviavano causavano un freeze di  30 sec. abbondanti) e in circa un secondo e mezzo / due si è avviato!

- L'APIC si è abilitato immediatamente dopo aver solo commentato il file .c descritto nella guida, non è stato necessario ricorrere al modo 2.

----------

## .:deadhead:.

 *mfkr79 wrote:*   

> @ .:deadhead:. Potresti dirmi su che modello di portatile hai provato ?

 Ah già  :Razz:  inspiron 8600, bios version... quando riavvio te la dico  :Mr. Green: 

----------

## Fuzzo

Provato: nessun problema allo spegnimento!  :Smile: 

----------

## Fuzzo

Per pura curiosita' ho provato ad avviare il portatile con il LiveCD 2004.1 (kernel 2.4.22) e confermo le difficolta' di questo kernel nella gestione dell'APIC (almeno sul mio Dell5150).

Seguendo questo how-to su un kernel 2.6 invece, tutto funziona a meraviglia!  :Very Happy: 

----------

## MonsterMord

UP

https://forums.gentoo.org/viewtopic.php?t=194312

----------

