int srp_target_alloc(struct srp_target *target, struct device *dev, size_t nr, size_t iu_size) { int err; spin_lock_init(&target->lock); INIT_LIST_HEAD(&target->cmd_queue); target->dev = dev; dev_set_drvdata(target->dev, target); target->srp_iu_size = iu_size; target->rx_ring_size = nr; target->rx_ring = srp_ring_alloc(target->dev, nr, iu_size); if (!target->rx_ring) return -ENOMEM; err = srp_iu_pool_alloc(&target->iu_queue, nr, target->rx_ring); if (err) goto free_ring; return 0; free_ring: srp_ring_free(target->dev, target->rx_ring, nr, iu_size); return -ENOMEM; }
void srp_target_free(struct srp_target *target) { dev_set_drvdata(target->dev, NULL); srp_ring_free(target->dev, target->rx_ring, target->rx_ring_size, target->srp_iu_size); srp_iu_pool_free(&target->iu_queue); }
void srp_target_free(struct srp_target *target) { srp_ring_free(target->dev, target->rx_ring, target->rx_ring_size, target->srp_iu_size); srp_iu_pool_free(&target->iu_queue); }