mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
cnic: Fix big endian bug
The chip's page tables did not set up properly on big endian machines, causing EEH errors on PPC machines. Reported-by: Breno Leitao <leitao@linux.vnet.ibm.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7cc2edb834
commit
5138826b52
@ -699,13 +699,13 @@ static void cnic_free_dma(struct cnic_dev *dev, struct cnic_dma *dma)
|
||||
static void cnic_setup_page_tbl(struct cnic_dev *dev, struct cnic_dma *dma)
|
||||
{
|
||||
int i;
|
||||
u32 *page_table = dma->pgtbl;
|
||||
__le32 *page_table = (__le32 *) dma->pgtbl;
|
||||
|
||||
for (i = 0; i < dma->num_pages; i++) {
|
||||
/* Each entry needs to be in big endian format. */
|
||||
*page_table = (u32) ((u64) dma->pg_map_arr[i] >> 32);
|
||||
*page_table = cpu_to_le32((u64) dma->pg_map_arr[i] >> 32);
|
||||
page_table++;
|
||||
*page_table = (u32) dma->pg_map_arr[i];
|
||||
*page_table = cpu_to_le32(dma->pg_map_arr[i] & 0xffffffff);
|
||||
page_table++;
|
||||
}
|
||||
}
|
||||
@ -713,13 +713,13 @@ static void cnic_setup_page_tbl(struct cnic_dev *dev, struct cnic_dma *dma)
|
||||
static void cnic_setup_page_tbl_le(struct cnic_dev *dev, struct cnic_dma *dma)
|
||||
{
|
||||
int i;
|
||||
u32 *page_table = dma->pgtbl;
|
||||
__le32 *page_table = (__le32 *) dma->pgtbl;
|
||||
|
||||
for (i = 0; i < dma->num_pages; i++) {
|
||||
/* Each entry needs to be in little endian format. */
|
||||
*page_table = dma->pg_map_arr[i] & 0xffffffff;
|
||||
*page_table = cpu_to_le32(dma->pg_map_arr[i] & 0xffffffff);
|
||||
page_table++;
|
||||
*page_table = (u32) ((u64) dma->pg_map_arr[i] >> 32);
|
||||
*page_table = cpu_to_le32((u64) dma->pg_map_arr[i] >> 32);
|
||||
page_table++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user