---
name: "pci_create_slot"
section: "9"
platform: "linux"
package: "linux-manual-4.9"
version: "4.9.228-1"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/pci_create_slot"
---

# pci\_create\_slot(9)

create or increment refcount for physical PCI slot

## NAME

pci\_create\_slot - create or increment refcount for physical PCI slot

## SYNOPSIS

**struct pci\_slot \* pci\_create\_slot(struct pci\_bus \*** *parent***, int** *slot\_nr***, const char \*** *name***, struct hotplug\_slot \*** *hotplug***);**

## ARGUMENTS

*parent*

struct pci\_bus of parent bridge

*slot\_nr*

PCI\_SLOT(pci\_dev-\>devfn) or -1 for placeholder

*name*

user visible string presented in /sys/bus/pci/slots/\<name\>

*hotplug*

set if caller is hotplug driver, NULL otherwise

## DESCRIPTION

PCI slots have first class attributes such as address, speed, width, and a struct pci\_slot is used to manage them. This interface will either return a new struct pci\_slot to the caller, or if the pci\_slot already exists, its refcount will be incremented.

Slots are uniquely identified by a *pci\_bus*, *slot\_nr* tuple.

There are known platforms with broken firmware that assign the same name to multiple slots. Workaround these broken platforms by renaming the slots on behalf of the caller. If firmware assigns name N to multiple slots:

The first slot is assigned N The second slot is assigned N-1 The third slot is assigned N-2 etc.

Placeholder slots: In most cases, *pci\_bus*, *slot\_nr* will be sufficient to uniquely identify a slot. There is one notable exception - pSeries (rpaphp), where the *slot\_nr* cannot be determined until a device is actually inserted into the slot. In this scenario, the caller may pass -1 for *slot\_nr*.

The following semantics are imposed when the caller passes *slot\_nr* == -1. First, we no longer check for an existing **struct** pci\_slot, as there may be many slots with *slot\_nr* of -1. The other change in semantics is user-visible, which is the 'address' parameter presented in sysfs will consist solely of a dddd:bb tuple, where dddd is the PCI domain of the **struct** pci\_bus and bb is the bus number. In other words, the devfn of the 'placeholder' slot will not be displayed.

## COPYRIGHT
