@@ -1128,9 +1128,10 @@ static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
11281128 qeth_tx_complete_buf (buf , error , budget );
11291129
11301130 for (i = 0 ; i < queue -> max_elements ; ++ i ) {
1131- if (buf -> buffer -> element [i ].addr && buf -> is_header [i ])
1132- kmem_cache_free (qeth_core_header_cache ,
1133- buf -> buffer -> element [i ].addr );
1131+ void * data = phys_to_virt (buf -> buffer -> element [i ].addr );
1132+
1133+ if (data && buf -> is_header [i ])
1134+ kmem_cache_free (qeth_core_header_cache , data );
11341135 buf -> is_header [i ] = 0 ;
11351136 }
11361137
@@ -2641,7 +2642,8 @@ static int qeth_init_input_buffer(struct qeth_card *card,
26412642 buf -> pool_entry = pool_entry ;
26422643 for (i = 0 ; i < QETH_MAX_BUFFER_ELEMENTS (card ); ++ i ) {
26432644 buf -> buffer -> element [i ].length = PAGE_SIZE ;
2644- buf -> buffer -> element [i ].addr = pool_entry -> elements [i ];
2645+ buf -> buffer -> element [i ].addr =
2646+ virt_to_phys (pool_entry -> elements [i ]);
26452647 if (i == QETH_MAX_BUFFER_ELEMENTS (card ) - 1 )
26462648 buf -> buffer -> element [i ].eflags = SBAL_EFLAGS_LAST_ENTRY ;
26472649 else
@@ -3459,9 +3461,8 @@ static void qeth_qdio_cq_handler(struct qeth_card *card, unsigned int qdio_err,
34593461
34603462 while ((e < QDIO_MAX_ELEMENTS_PER_BUFFER ) &&
34613463 buffer -> element [e ].addr ) {
3462- unsigned long phys_aob_addr ;
3464+ unsigned long phys_aob_addr = buffer -> element [ e ]. addr ;
34633465
3464- phys_aob_addr = (unsigned long ) buffer -> element [e ].addr ;
34653466 qeth_qdio_handle_aob (card , phys_aob_addr );
34663467 ++ e ;
34673468 }
@@ -3750,7 +3751,7 @@ static unsigned int __qeth_fill_buffer(struct sk_buff *skb,
37503751 elem_length = min_t (unsigned int , length ,
37513752 PAGE_SIZE - offset_in_page (data ));
37523753
3753- buffer -> element [element ].addr = data ;
3754+ buffer -> element [element ].addr = virt_to_phys ( data ) ;
37543755 buffer -> element [element ].length = elem_length ;
37553756 length -= elem_length ;
37563757 if (is_first_elem ) {
@@ -3780,7 +3781,7 @@ static unsigned int __qeth_fill_buffer(struct sk_buff *skb,
37803781 elem_length = min_t (unsigned int , length ,
37813782 PAGE_SIZE - offset_in_page (data ));
37823783
3783- buffer -> element [element ].addr = data ;
3784+ buffer -> element [element ].addr = virt_to_phys ( data ) ;
37843785 buffer -> element [element ].length = elem_length ;
37853786 buffer -> element [element ].eflags =
37863787 SBAL_EFLAGS_MIDDLE_FRAG ;
@@ -3820,7 +3821,7 @@ static unsigned int qeth_fill_buffer(struct qeth_qdio_out_buffer *buf,
38203821 int element = buf -> next_element_to_fill ;
38213822 is_first_elem = false;
38223823
3823- buffer -> element [element ].addr = hdr ;
3824+ buffer -> element [element ].addr = virt_to_phys ( hdr ) ;
38243825 buffer -> element [element ].length = hd_len ;
38253826 buffer -> element [element ].eflags = SBAL_EFLAGS_FIRST_FRAG ;
38263827 /* remember to free cache-allocated qeth_hdr: */
@@ -5288,7 +5289,7 @@ static int qeth_extract_skb(struct qeth_card *card,
52885289 offset = 0 ;
52895290 }
52905291
5291- hdr = element -> addr + offset ;
5292+ hdr = phys_to_virt ( element -> addr ) + offset ;
52925293 offset += sizeof (* hdr );
52935294 skb = NULL ;
52945295
@@ -5387,7 +5388,7 @@ static int qeth_extract_skb(struct qeth_card *card,
53875388walk_packet :
53885389 while (skb_len ) {
53895390 int data_len = min (skb_len , (int )(element -> length - offset ));
5390- char * data = element -> addr + offset ;
5391+ char * data = phys_to_virt ( element -> addr ) + offset ;
53915392
53925393 skb_len -= data_len ;
53935394 offset += data_len ;
0 commit comments