# US 10,120,736 B2 · Executing a kernel device driver as a user space process

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,120,736 B2
- Document ID: US10120736B2
- Status: Granted
- Kind: B2
- Application number: 14/457,213
- Filed: 2014-08-12
- Published: 2014-11-27
- Granted: 2018-11-06
- Earliest claimed: 2010-11-18
- Assignees: International Business Machines Corporation
- Applicants: International Business Machines Corporation
- Inventors: Michael Adda; Dan Aloni; Avner Braverman
- Web page: https://patentgrep.com/patent/US10120736B2

## CPC

- G06F 9/545: {where tasks reside in different layers, e.g. user- and kernel-space}
- G06F 9/4843: {by program, e.g. task dispatcher, supervisor, operating system}
- G06F 9/541: {via adapters, e.g. between incompatible applications}
- G06F 11/0715: {in a system implementing multitasking (multitasking per se G06F9/46)}
- G06F 11/0793: {Remedial or corrective actions (recovery from an exception in an instruction pipeline G06F9/3861; by retry G06F11/1402; for recovering from a failure of a protocol instance or entity H04L69/40)}
- G06F 11/1402: {Saving, restoring, recovering or retrying}
- G06F 13/102: {where the program performs an interfacing function, e.g. device driver (G06F13/105 takes precedence; contention policies within device drivers G06F9/4881; scheduling within device drivers G06F9/52)}
- G06F 13/24: using interrupt (G06F13/32 takes precedence)
- G06F 13/28: using burst mode transfer, e.g. direct memory access {DMA}, cycle steal (G06F13/32 takes precedence)
- G06F 13/4282: {on a serial bus, e.g. I2C bus, SPI bus (on daisy chain buses G06F13/4247)}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Two or more ports of a same type are identified in a computer. A separate device driver process is initiated for each of the identified ports. A one-to-one correspondence between each of the ports and each of the device driver processes is established.

## Claims

### Claim 1

A method, comprising:
identifying two or more ports of a same type, the two or more ports physically located on separate devices;
initiating a separate device driver process for each of the identified ports, each separate device driver process executing from a user space in lieu of a kernel space; wherein each separate device driver executes from the user space being a kernel extension in lieu of the kernel space by way of a separate emulation layer established for each separate device driver, wherein each emulation layer comprises a respective user space driver framework (UDF) library executing from the user space and a respective UDF kernel module executing from the kernel space receiving and processing kernel application programming interface (API) call functions from each separate device driver process executing from the user space, each respective emulation layer replicating a subset of the kernel API call functions; and wherein each respective UDF library and UDF kernel modules comprised within each separate emulation layer for each separate device driver process execute concurrently; and
establishing a one-to-one correspondence between each of the ports and each of the device driver processes.

### Claim 2 (depends on 1)

The method according to claim 1, wherein the separate device driver processes comprise identical device drivers executing from unique addresses in a memory.

### Claim 3 (depends on 1)

The method according to claim 1, wherein establishing a one-to-one correspondence comprises coupling the separate device driver processes to respective ports.

### Claim 4 (depends on 1)

The method according to claim 1, and comprising:
detecting a failure of one of the device driver processes;
identifying the port associated with the failed device driver process;
re-launching the failed device driver process; and
coupling the re-launched device driver process to the identified port.

### Claim 5

A computer program product, the computer program product comprising:
a non-transitory computer readable storage medium having computer readable program code embodied therewith, the computer readable program code comprising:
computer readable program code configured to identify two or more ports of a same type, the two or more ports physically located on separate devices;
computer readable program code configured to initiate a separate device driver process for each of the identified ports, each separate device driver process executing from a user space in lieu of a kernel space; wherein each separate device driver executes from the user space being a kernel extension in lieu of the kernel space by way of a separate emulation layer established for each separate device driver, wherein each emulation layer comprises a respective user space driver framework (UDF) library executing from the user space and a respective UDF kernel module executing from the kernel space receiving and processing kernel application programming interface (API) call functions from each separate device driver process executing from the user space, each respective emulation layer replicating a subset of the kernel API call functions; and wherein each respective UDF library and UDF kernel modules comprised within each separate emulation layer for each separate device driver process execute concurrently; and
computer readable program code configured to establish a one-to-one correspondence between each of the ports and each of the device driver processes.

### Claim 6 (depends on 5)

The computer program product according to claim 5, wherein the separate device driver processes comprise identical device drivers executing from unique addresses in a memory.

### Claim 7 (depends on 5)

The computer program product according to claim 5, wherein the computer readable program code configured to establish a one-to-one correspondence by coupling the separate device driver processes to respective ports.

### Claim 8 (depends on 5)

The computer program product according to claim 5, and comprising:
computer readable program code configured to detect a failure of one of the device driver processes;
computer readable program code configured to identify the port associated with the failed device driver process;
computer readable program code configured to re-launch the failed device driver process; and
computer readable program code configured to couple the re-launched device driver process to the identified port.
