xmemin Kernel Service

Purpose

Performs a cross-memory move by copying data from the specified address space to kernel global memory.

Syntax

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h>

int xmemin (uaddr, kaddr, count, dp)
caddr_t * uaddr;
caddr_t * kaddr;
int  count;
struct xmem * dp;

Parameters

Item Description
uaddr Specifies the address in memory specified by a cross-memory descriptor.
kaddr Specifies the address in kernel memory.
count Specifies the number of bytes to copy.
dp Specifies the cross-memory descriptor.

Description

The xmemin kernel service performs a cross-memory move. A cross-memory move occurs when data is moved to or from an address space other than the address space that the program is executing in. The xmemin kernel service copies data from the specified address space to kernel global memory.

The xmemin kernel service is provided so that kernel processes and interrupt handlers can safely access a buffer within a user process. Calling the xmattach kernel service prepares the user buffer for the cross-memory move.

The xmemin kernel service differs from the copyin and copyout kernel services in that it is used to access a user buffer when not executing under the user process. In contrast, the copyin and copyout kernel services are used only to access a user buffer while executing under the user process.

Execution Environment

The xmemin kernel service can be called from either the process or interrupt environment.

Return Values

Item Description
XMEM_SUCC Indicates successful completion.
XMEM_FAIL Indicates one of the following errors:
  • The user does not have the appropriate access authority for the user buffer.
  • The user buffer is located in an address range that is not valid.
  • The segment containing the user buffer has been deleted.
  • The cross-memory descriptor is not valid.
  • A paging I/O error occurred while the user buffer was being accessed.

    If the user buffer is not in memory, the xmemin kernel service also returns an XMEM_FAIL error when executing on an interrupt level.