Devido ao BSP Linux padrão não habilitar a transmissão de cache e manutenção TLB (bit0 de ACTLR de registro é deixado '0') no modo SMP, um problema de coerência de cache pode ser visto.
Para obter uma descrição deste bit, consulte a seção 1.7.3 De transmissão de operações de manutenção no manual de referência técnica ARM A9 MPCore[2]:
Todos os processadores que trabalham no modo SMP no mesmo domínio coerente podem enviar e receber operações de manutenção de TLB e cache. O Manual de referência da arquitetura ARM fornece informações detalhadas sobre operações de transmissão. Um processador Cortex-A9 no cluster A9-MP transmite a operação de manutenção broadcastable quando ele opera no modo SMP (ACTLR). SMP=1) e quando a transmissão de operação de manutenção estiver habilitada (ACTLR. FW=1). Um processador Cortex-A9 pode receber e executar operações de manutenção de transmissão quando ele opera no modo SMP, ACTLR. SMP=1.
É recomendável configurar o ACTLR. FW e ACTLR. SMP para 1. Podemos definir o bit modificando o código linux em proc-v7. Arquivos S abaixo:
#ifdef CONFIG_SMP
ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
ALT_UP(mov r0, nº(1 << 6)) @ forjar para UP
tst r0, nº(1 << 6) @ modo SMP/nAMP habilitado?
orreq r0, r0, n(1 << 6) @ Habilitar o modo SMP/nAMP
orreq r0, r0, r10 @ Habilitar bits SMP específicos da CPU
r0, r0, nº(1) @ Adicionar esta linha habilita o ACTLR[0]
mcreq p15, 0, r0, c1, c0, 1
#endif