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:
XLATE_PERSISTENTE
Indica que as estruturas de dados de pré-tradução devem ser persistentes através de chamadas para serviços de pré-tradução.
XLATE_ALLOC
Indica que as estruturas de dados de pré-tradução devem ser alocadas apenas, e nenhuma tradução deve ser realizada.
XLATE_SPARSE
Indica que as informações de pré-tradução serão esparsas, permitindo a coexistência de regiões de pré-tradução válidas (ativas) e de pré-tradução inválidas (inativas).

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.