free_page((unsigned long) mtt_entry); 
mthca_free_mailbox(dev, mailbox); 
int mthca_write_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt,		    int start_index, u64 *buffer_list, int list_len){	u64 *mtt_entry;	int err = 0;	u8 status;	int i;	mtt_entry = (u64 *) __get_free_page(GFP_KERNEL);	if (!mtt_entry)		return -ENOMEM;	while (list_len > 0) {		mtt_entry[0] = cpu_to_be64(dev->mr_table.mtt_base +					   mtt->first_seg * MTHCA_MTT_SEG_SIZE +					   start_index * 8);		mtt_entry[1] = 0;		for (i = 0; i < list_len && i < PAGE_SIZE / 8 - 2; ++i)			mtt_entry[i + 2] = cpu_to_be64(buffer_list[i] |						       MTHCA_MTT_FLAG_PRESENT);		/*		 * If we have an odd number of entries to write, add		 * one more dummy entry for firmware efficiency.		 */		if (i & 1)			mtt_entry[i + 2] = 0;		err = mthca_WRITE_MTT(dev, mtt_entry, (i + 1) & ~1, &status);		if (err) {			mthca_warn(dev, "WRITE_MTT failed (%d)\n", err);			goto out;		}		if (status) {			mthca_warn(dev, "WRITE_MTT returned status 0x%02x\n",				   status);			err = -EINVAL;			goto out;		}		list_len    -= i;		start_index += i;		buffer_list += i;	}out:	free_page((unsigned long) mtt_entry);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ed878458eeff9754d66f1b0325df6ebbfcdce668/mthca_mr.c/clean/drivers/infiniband/hw/mthca/mthca_mr.c