mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 10:32:35 +00:00
[SCSI] cxgbi: get rid of gl_skb in cxgbi_ddp_info
Remove gl_skb from cxgbi_ddp_info as it is only used by cxgb3i. Signed-off-by: Karen Xie <kxie@chelsio.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
c343a01cca
commit
b8ce8b59b8
@ -1108,10 +1108,11 @@ static int ddp_set_map(struct cxgbi_sock *csk, struct cxgbi_pagepod_hdr *hdr,
|
|||||||
csk, idx, npods, gl);
|
csk, idx, npods, gl);
|
||||||
|
|
||||||
for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) {
|
for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) {
|
||||||
struct sk_buff *skb = ddp->gl_skb[idx];
|
struct sk_buff *skb = alloc_wr(sizeof(struct ulp_mem_io) +
|
||||||
|
PPOD_SIZE, 0, GFP_ATOMIC);
|
||||||
|
|
||||||
/* hold on to the skb until we clear the ddp mapping */
|
if (!skb)
|
||||||
skb_get(skb);
|
return -ENOMEM;
|
||||||
|
|
||||||
ulp_mem_io_set_hdr(skb, pm_addr);
|
ulp_mem_io_set_hdr(skb, pm_addr);
|
||||||
cxgbi_ddp_ppod_set((struct cxgbi_pagepod *)(skb->head +
|
cxgbi_ddp_ppod_set((struct cxgbi_pagepod *)(skb->head +
|
||||||
@ -1136,56 +1137,20 @@ static void ddp_clear_map(struct cxgbi_hba *chba, unsigned int tag,
|
|||||||
cdev, idx, npods, tag);
|
cdev, idx, npods, tag);
|
||||||
|
|
||||||
for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) {
|
for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) {
|
||||||
struct sk_buff *skb = ddp->gl_skb[idx];
|
struct sk_buff *skb = alloc_wr(sizeof(struct ulp_mem_io) +
|
||||||
|
PPOD_SIZE, 0, GFP_ATOMIC);
|
||||||
|
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
pr_err("tag 0x%x, 0x%x, %d/%u, skb NULL.\n",
|
pr_err("tag 0x%x, 0x%x, %d/%u, skb OOM.\n",
|
||||||
tag, idx, i, npods);
|
tag, idx, i, npods);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ddp->gl_skb[idx] = NULL;
|
|
||||||
memset(skb->head + sizeof(struct ulp_mem_io), 0, PPOD_SIZE);
|
|
||||||
ulp_mem_io_set_hdr(skb, pm_addr);
|
ulp_mem_io_set_hdr(skb, pm_addr);
|
||||||
skb->priority = CPL_PRIORITY_CONTROL;
|
skb->priority = CPL_PRIORITY_CONTROL;
|
||||||
cxgb3_ofld_send(cdev->lldev, skb);
|
cxgb3_ofld_send(cdev->lldev, skb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ddp_free_gl_skb(struct cxgbi_ddp_info *ddp, int idx, int cnt)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
log_debug(1 << CXGBI_DBG_DDP,
|
|
||||||
"ddp 0x%p, idx %d, cnt %d.\n", ddp, idx, cnt);
|
|
||||||
|
|
||||||
for (i = 0; i < cnt; i++, idx++)
|
|
||||||
if (ddp->gl_skb[idx]) {
|
|
||||||
kfree_skb(ddp->gl_skb[idx]);
|
|
||||||
ddp->gl_skb[idx] = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ddp_alloc_gl_skb(struct cxgbi_ddp_info *ddp, int idx,
|
|
||||||
int cnt, gfp_t gfp)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
log_debug(1 << CXGBI_DBG_DDP,
|
|
||||||
"ddp 0x%p, idx %d, cnt %d.\n", ddp, idx, cnt);
|
|
||||||
|
|
||||||
for (i = 0; i < cnt; i++) {
|
|
||||||
struct sk_buff *skb = alloc_wr(sizeof(struct ulp_mem_io) +
|
|
||||||
PPOD_SIZE, 0, gfp);
|
|
||||||
if (skb)
|
|
||||||
ddp->gl_skb[idx + i] = skb;
|
|
||||||
else {
|
|
||||||
ddp_free_gl_skb(ddp, idx, i);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,
|
static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,
|
||||||
unsigned int tid, int pg_idx, bool reply)
|
unsigned int tid, int pg_idx, bool reply)
|
||||||
{
|
{
|
||||||
@ -1316,8 +1281,6 @@ static int cxgb3i_ddp_init(struct cxgbi_device *cdev)
|
|||||||
}
|
}
|
||||||
tdev->ulp_iscsi = ddp;
|
tdev->ulp_iscsi = ddp;
|
||||||
|
|
||||||
cdev->csk_ddp_free_gl_skb = ddp_free_gl_skb;
|
|
||||||
cdev->csk_ddp_alloc_gl_skb = ddp_alloc_gl_skb;
|
|
||||||
cdev->csk_ddp_setup_digest = ddp_setup_conn_digest;
|
cdev->csk_ddp_setup_digest = ddp_setup_conn_digest;
|
||||||
cdev->csk_ddp_setup_pgidx = ddp_setup_conn_pgidx;
|
cdev->csk_ddp_setup_pgidx = ddp_setup_conn_pgidx;
|
||||||
cdev->csk_ddp_set = ddp_set_map;
|
cdev->csk_ddp_set = ddp_set_map;
|
||||||
|
@ -1425,8 +1425,6 @@ static int cxgb4i_ddp_init(struct cxgbi_device *cdev)
|
|||||||
cxgbi_ddp_page_size_factor(pgsz_factor);
|
cxgbi_ddp_page_size_factor(pgsz_factor);
|
||||||
cxgb4_iscsi_init(lldi->ports[0], tagmask, pgsz_factor);
|
cxgb4_iscsi_init(lldi->ports[0], tagmask, pgsz_factor);
|
||||||
|
|
||||||
cdev->csk_ddp_free_gl_skb = NULL;
|
|
||||||
cdev->csk_ddp_alloc_gl_skb = NULL;
|
|
||||||
cdev->csk_ddp_setup_digest = ddp_setup_conn_digest;
|
cdev->csk_ddp_setup_digest = ddp_setup_conn_digest;
|
||||||
cdev->csk_ddp_setup_pgidx = ddp_setup_conn_pgidx;
|
cdev->csk_ddp_setup_pgidx = ddp_setup_conn_pgidx;
|
||||||
cdev->csk_ddp_set = ddp_set_map;
|
cdev->csk_ddp_set = ddp_set_map;
|
||||||
|
@ -1277,12 +1277,6 @@ static int ddp_tag_reserve(struct cxgbi_sock *csk, unsigned int tid,
|
|||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cdev->csk_ddp_alloc_gl_skb) {
|
|
||||||
err = cdev->csk_ddp_alloc_gl_skb(ddp, idx, npods, gfp);
|
|
||||||
if (err < 0)
|
|
||||||
goto unmark_entries;
|
|
||||||
}
|
|
||||||
|
|
||||||
tag = cxgbi_ddp_tag_base(tformat, sw_tag);
|
tag = cxgbi_ddp_tag_base(tformat, sw_tag);
|
||||||
tag |= idx << PPOD_IDX_SHIFT;
|
tag |= idx << PPOD_IDX_SHIFT;
|
||||||
|
|
||||||
@ -1293,11 +1287,8 @@ static int ddp_tag_reserve(struct cxgbi_sock *csk, unsigned int tid,
|
|||||||
hdr.page_offset = htonl(gl->offset);
|
hdr.page_offset = htonl(gl->offset);
|
||||||
|
|
||||||
err = cdev->csk_ddp_set(csk, &hdr, idx, npods, gl);
|
err = cdev->csk_ddp_set(csk, &hdr, idx, npods, gl);
|
||||||
if (err < 0) {
|
if (err < 0)
|
||||||
if (cdev->csk_ddp_free_gl_skb)
|
|
||||||
cdev->csk_ddp_free_gl_skb(ddp, idx, npods);
|
|
||||||
goto unmark_entries;
|
goto unmark_entries;
|
||||||
}
|
|
||||||
|
|
||||||
ddp->idx_last = idx;
|
ddp->idx_last = idx;
|
||||||
log_debug(1 << CXGBI_DBG_DDP,
|
log_debug(1 << CXGBI_DBG_DDP,
|
||||||
@ -1363,8 +1354,6 @@ static void ddp_destroy(struct kref *kref)
|
|||||||
>> PPOD_PAGES_SHIFT;
|
>> PPOD_PAGES_SHIFT;
|
||||||
pr_info("cdev 0x%p, ddp %d + %d.\n", cdev, i, npods);
|
pr_info("cdev 0x%p, ddp %d + %d.\n", cdev, i, npods);
|
||||||
kfree(gl);
|
kfree(gl);
|
||||||
if (cdev->csk_ddp_free_gl_skb)
|
|
||||||
cdev->csk_ddp_free_gl_skb(ddp, i, npods);
|
|
||||||
i += npods;
|
i += npods;
|
||||||
} else
|
} else
|
||||||
i++;
|
i++;
|
||||||
@ -1407,8 +1396,6 @@ int cxgbi_ddp_init(struct cxgbi_device *cdev,
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
ddp->gl_map = (struct cxgbi_gather_list **)(ddp + 1);
|
ddp->gl_map = (struct cxgbi_gather_list **)(ddp + 1);
|
||||||
ddp->gl_skb = (struct sk_buff **)(((char *)ddp->gl_map) +
|
|
||||||
ppmax * sizeof(struct cxgbi_gather_list *));
|
|
||||||
cdev->ddp = ddp;
|
cdev->ddp = ddp;
|
||||||
|
|
||||||
spin_lock_init(&ddp->map_lock);
|
spin_lock_init(&ddp->map_lock);
|
||||||
|
@ -131,7 +131,6 @@ struct cxgbi_ddp_info {
|
|||||||
unsigned int rsvd_tag_mask;
|
unsigned int rsvd_tag_mask;
|
||||||
spinlock_t map_lock;
|
spinlock_t map_lock;
|
||||||
struct cxgbi_gather_list **gl_map;
|
struct cxgbi_gather_list **gl_map;
|
||||||
struct sk_buff **gl_skb;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DDP_PGIDX_MAX 4
|
#define DDP_PGIDX_MAX 4
|
||||||
@ -536,8 +535,6 @@ struct cxgbi_device {
|
|||||||
struct cxgbi_ddp_info *ddp;
|
struct cxgbi_ddp_info *ddp;
|
||||||
|
|
||||||
void (*dev_ddp_cleanup)(struct cxgbi_device *);
|
void (*dev_ddp_cleanup)(struct cxgbi_device *);
|
||||||
void (*csk_ddp_free_gl_skb)(struct cxgbi_ddp_info *, int, int);
|
|
||||||
int (*csk_ddp_alloc_gl_skb)(struct cxgbi_ddp_info *, int, int, gfp_t);
|
|
||||||
int (*csk_ddp_set)(struct cxgbi_sock *, struct cxgbi_pagepod_hdr *,
|
int (*csk_ddp_set)(struct cxgbi_sock *, struct cxgbi_pagepod_hdr *,
|
||||||
unsigned int, unsigned int,
|
unsigned int, unsigned int,
|
||||||
struct cxgbi_gather_list *);
|
struct cxgbi_gather_list *);
|
||||||
|
Loading…
Reference in New Issue
Block a user