|
|
struct list_head {
|
struct list_head {
|
struct list_head *next, *prev;
|
struct list_head *next, *prev;
|
};
|
};
|
struct ib_fmr {
|
struct ib_fmr {
|
int *device;
|
int *device;
|
struct list_head list;
|
struct list_head list;
|
};
|
};
|
static inline
|
static inline
|
struct mthca_fmr *to_mfmr(struct ib_fmr *ibmr)
|
struct mthca_fmr *to_mfmr(struct ib_fmr *ibmr)
|
{
|
{
|
const struct ib_fmr *__mptr = (ibmr);
|
const struct ib_fmr *__mptr = (ibmr);
|
return (struct mthca_fmr *)( (char *)__mptr );
|
return (struct mthca_fmr *)( (char *)__mptr );
|
}
|
}
|
void mthca_unmap_fmr(struct list_head *fmr_list)
|
void mthca_unmap_fmr(struct list_head *fmr_list)
|
{
|
{
|
struct ib_fmr *fmr;
|
struct ib_fmr *fmr;
|
if (mthca_is_memfree())
|
if (mthca_is_memfree())
|
{
|
{
|
for (fmr =
|
for (fmr =
|
({ const struct list_head *__mptr = ((fmr_list)->next); (struct ib_fmr *)(
|
({ const struct list_head *__mptr = ((fmr_list)->next); (struct ib_fmr *)(
|
(char *)__mptr - 8 );});
|
(char *)__mptr - 8 );});
|
&fmr->list != (fmr_list);
|
&fmr->list != (fmr_list);
|
fmr = ({ const struct list_head *__mptr = (fmr->list.next); (struct ib_fmr
|
fmr = ({ const struct list_head *__mptr = (fmr->list.next); (struct ib_fmr
|
*)( (char *)__mptr - 8);})
|
*)( (char *)__mptr - 8);})
|
)
|
)
|
mthca_arbel_fmr_unmap(to_mfmr(fmr));
|
mthca_arbel_fmr_unmap(to_mfmr(fmr));
|
}
|
}
|
else
|
else
|
for (fmr =
|
for (fmr =
|
({ const struct list_head *__mptr = ((fmr_list)->next); (struct ib_fmr *)(
|
({ const struct list_head *__mptr = ((fmr_list)->next); (struct ib_fmr *)(
|
(char *)__mptr - 8);});
|
(char *)__mptr - 8);});
|
&fmr->list != (fmr_list);
|
&fmr->list != (fmr_list);
|
fmr = ({ const struct list_head *__mptr = (fmr->list.next); (struct ib_fmr
|
fmr = ({ const struct list_head *__mptr = (fmr->list.next); (struct ib_fmr
|
*)( (char *)__mptr - 8);})
|
*)( (char *)__mptr - 8);})
|
)
|
)
|
mthca_tavor_fmr_unmap(to_mfmr(fmr));
|
mthca_tavor_fmr_unmap(to_mfmr(fmr));
|
}
|
}
|
|
|