Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/mlx5/mlx5_core/mlx5_pagealloc.c
Show First 20 Lines • Show All 204 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
mlx5_insert_fw_page_locked(struct mlx5_core_dev *dev, struct mlx5_fw_page *nfp) | mlx5_insert_fw_page_locked(struct mlx5_core_dev *dev, struct mlx5_fw_page *nfp) | ||||
{ | { | ||||
struct rb_root *root = &dev->priv.page_root; | struct rb_root *root = &dev->priv.page_root; | ||||
struct rb_node **new = &root->rb_node; | struct rb_node **new = &root->rb_node; | ||||
struct rb_node *parent = NULL; | struct rb_node *parent = NULL; | ||||
struct mlx5_fw_page *tfp; | struct mlx5_fw_page *tfp; | ||||
while (*new) { | while (rb_ptr(*new)) { | ||||
parent = *new; | parent = rb_ptr(*new); | ||||
tfp = rb_entry(parent, struct mlx5_fw_page, rb_node); | tfp = rb_entry(parent, struct mlx5_fw_page, rb_node); | ||||
if (tfp->dma_addr < nfp->dma_addr) | if (tfp->dma_addr < nfp->dma_addr) | ||||
new = &parent->rb_left; | new = &parent->rb_left; | ||||
else if (tfp->dma_addr > nfp->dma_addr) | else if (tfp->dma_addr > nfp->dma_addr) | ||||
new = &parent->rb_right; | new = &parent->rb_right; | ||||
else | else | ||||
return (-EEXIST); | return (-EEXIST); | ||||
} | } | ||||
Show All 9 Lines | mlx5_remove_fw_page_locked(struct mlx5_core_dev *dev, bus_addr_t addr) | ||||
struct rb_root *root = &dev->priv.page_root; | struct rb_root *root = &dev->priv.page_root; | ||||
struct rb_node *tmp = root->rb_node; | struct rb_node *tmp = root->rb_node; | ||||
struct mlx5_fw_page *result = NULL; | struct mlx5_fw_page *result = NULL; | ||||
struct mlx5_fw_page *tfp; | struct mlx5_fw_page *tfp; | ||||
while (tmp) { | while (tmp) { | ||||
tfp = rb_entry(tmp, struct mlx5_fw_page, rb_node); | tfp = rb_entry(tmp, struct mlx5_fw_page, rb_node); | ||||
if (tfp->dma_addr < addr) { | if (tfp->dma_addr < addr) { | ||||
tmp = tmp->rb_left; | tmp = rb_ptr(tmp->rb_left); | ||||
} else if (tfp->dma_addr > addr) { | } else if (tfp->dma_addr > addr) { | ||||
tmp = tmp->rb_right; | tmp = rb_ptr(tmp->rb_right); | ||||
} else { | } else { | ||||
rb_erase(&tfp->rb_node, &dev->priv.page_root); | rb_erase(&tfp->rb_node, &dev->priv.page_root); | ||||
result = tfp; | result = tfp; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
return (result); | return (result); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 360 Lines • Show Last 20 Lines |