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