serviço do kernel xlate_create
Propósito
Cria estruturas de dados de pré-tradução.
Sintaxe
int xlate_create (dp, baddr, count, flags)
struct xmem*dp;
caddr_t baddr;
int count;
uint flags;
Descrição
O serviço kernel xlate_create cria estruturas de dados de pré-tradução capazes de pré-traduzir todas as páginas do buffer virtual indicado pelo parâmetro baddr para comprimento de contagem em uma lista de números de páginas físicas, anexado ao descritor de memória cruzada apontado por dp.
Se a sinalização XLATE_ALLOC for definida, apenas as estruturas de dados são criadas e nenhuma pré-tradução é feita. Se a sinalização não for definida, além das estruturas de dados que estão sendo criadas, cada página do buffer é traduzida e as permissões de acesso verificadas, exigindo acesso de leitura a cada página. A sinalização XLATE_ALLOC é útil quando o buffer será pintado e utilizado posteriormente, por meio dos serviços kernel xlate_pin e xlate_unpin .
A sinalização XLATE_SPARSE pode ser usada para indicar que apenas porções selecionadas de uma região pré-traduzida podem ser válidas (pintadas e pré-traduzidas) em qualquer momento. A sinalização XLATE_SPARSE pode ser usada em conjunto com a sinalização XLATE_ALLOC para pré-alocar as estruturas de dados de pré-tradução para uma região de endereço que será gerenciada dinamicamente.
O serviço kernel xlate_create é principalmente para uso quando os buffers de memória serão reutilizados para I/O. O uso deste serviço para criar uma pré-tradução para o buffer de memória evita a tradução de página e o checkoverhead de verificação de acesso para todos os futuros DMAs envolvendo o buffer de memória até que o serviço kernel xlate_remover seja chamado.
Parâmetros
| Item | Descrição |
|---|---|
| DP | Aponta para o descritor de memória cruzada. |
| baddr | Aponta para o buffer virtual. |
| count | Especifica o comprimento do buffer virtual. |
| sinalizadores | Especifica a operação. Os valores válidos são os seguintes:
|
Valores De Retorno
| Item | Descrição |
|---|---|
| ENOMEM | Não é possível alocar memória |
| XMEM_FAIL | Sem tradução física, ou Sem Acesso a uma Página |
| XMEM_SUCC | Pré-tradução bem-sucedida criada |
Ambiente de Execução
O serviço kernel xlate_create só pode ser chamado a partir do ambiente do processo. O buffer inteiro deve ser fixado (a menos que o sinalizador XLATE_ALLOC esteja configurado), e o descritor de memória cruzada válido.