Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}