[CASSINI]: Revert 'dont touch page_count'.

This reverts changeset fa4f0774d7c6cccb4d1fda76b91dd8eddcb2dd6a
([CASSINI]: dont touch page_count) because it breaks the driver.

The local page counting added by this changeset did not account
for the asynchronous page count changes done by kfree_skb()
and friends.

The change adds extra atomics and on top of it all appears to be
totally unnecessary as well.

Signed-off-by: David S. Miller <davem@davemloft.net>
Acked-by: Nick Piggin <npiggin@suse.de>

+4 -32
+4 -32
drivers/net/cassini.c
··· 336 cas_disable_irq(cp, i); 337 } 338 339 - static inline void cas_buffer_init(cas_page_t *cp) 340 - { 341 - struct page *page = cp->buffer; 342 - atomic_set((atomic_t *)&page->lru.next, 1); 343 - } 344 - 345 - static inline int cas_buffer_count(cas_page_t *cp) 346 - { 347 - struct page *page = cp->buffer; 348 - return atomic_read((atomic_t *)&page->lru.next); 349 - } 350 - 351 - static inline void cas_buffer_inc(cas_page_t *cp) 352 - { 353 - struct page *page = cp->buffer; 354 - atomic_inc((atomic_t *)&page->lru.next); 355 - } 356 - 357 - static inline void cas_buffer_dec(cas_page_t *cp) 358 - { 359 - struct page *page = cp->buffer; 360 - atomic_dec((atomic_t *)&page->lru.next); 361 - } 362 - 363 static void cas_enable_irq(struct cas *cp, const int ring) 364 { 365 if (ring == 0) { /* all but TX_DONE */ ··· 473 { 474 pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size, 475 PCI_DMA_FROMDEVICE); 476 - cas_buffer_dec(page); 477 __free_pages(page->buffer, cp->page_order); 478 kfree(page); 479 return 0; ··· 502 page->buffer = alloc_pages(flags, cp->page_order); 503 if (!page->buffer) 504 goto page_err; 505 - cas_buffer_init(page); 506 page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0, 507 cp->page_size, PCI_DMA_FROMDEVICE); 508 return page; ··· 580 list_for_each_safe(elem, tmp, &list) { 581 cas_page_t *page = list_entry(elem, cas_page_t, list); 582 583 - if (cas_buffer_count(page) > 1) 584 continue; 585 586 list_del(elem); ··· 1348 cas_page_t *page = cp->rx_pages[1][index]; 1349 cas_page_t *new; 1350 1351 - if (cas_buffer_count(page) == 1) 1352 return page; 1353 1354 new = cas_page_dequeue(cp); ··· 1368 cas_page_t **page1 = cp->rx_pages[1]; 1369 1370 /* swap if buffer is in use */ 1371 - if (cas_buffer_count(page0[index]) > 1) { 1372 cas_page_t *new = cas_page_spare(cp, index); 1373 if (new) { 1374 page1[index] = page0[index]; ··· 2040 skb->len += hlen - swivel; 2041 2042 get_page(page->buffer); 2043 - cas_buffer_inc(page); 2044 frag->page = page->buffer; 2045 frag->page_offset = off; 2046 frag->size = hlen - swivel; ··· 2064 frag++; 2065 2066 get_page(page->buffer); 2067 - cas_buffer_inc(page); 2068 frag->page = page->buffer; 2069 frag->page_offset = 0; 2070 frag->size = hlen; ··· 2227 released = 0; 2228 while (entry != last) { 2229 /* make a new buffer if it's still in use */ 2230 - if (cas_buffer_count(page[entry]) > 1) { 2231 cas_page_t *new = cas_page_dequeue(cp); 2232 if (!new) { 2233 /* let the timer know that we need to
··· 336 cas_disable_irq(cp, i); 337 } 338 339 static void cas_enable_irq(struct cas *cp, const int ring) 340 { 341 if (ring == 0) { /* all but TX_DONE */ ··· 497 { 498 pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size, 499 PCI_DMA_FROMDEVICE); 500 __free_pages(page->buffer, cp->page_order); 501 kfree(page); 502 return 0; ··· 527 page->buffer = alloc_pages(flags, cp->page_order); 528 if (!page->buffer) 529 goto page_err; 530 page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0, 531 cp->page_size, PCI_DMA_FROMDEVICE); 532 return page; ··· 606 list_for_each_safe(elem, tmp, &list) { 607 cas_page_t *page = list_entry(elem, cas_page_t, list); 608 609 + if (page_count(page->buffer) > 1) 610 continue; 611 612 list_del(elem); ··· 1374 cas_page_t *page = cp->rx_pages[1][index]; 1375 cas_page_t *new; 1376 1377 + if (page_count(page->buffer) == 1) 1378 return page; 1379 1380 new = cas_page_dequeue(cp); ··· 1394 cas_page_t **page1 = cp->rx_pages[1]; 1395 1396 /* swap if buffer is in use */ 1397 + if (page_count(page0[index]->buffer) > 1) { 1398 cas_page_t *new = cas_page_spare(cp, index); 1399 if (new) { 1400 page1[index] = page0[index]; ··· 2066 skb->len += hlen - swivel; 2067 2068 get_page(page->buffer); 2069 frag->page = page->buffer; 2070 frag->page_offset = off; 2071 frag->size = hlen - swivel; ··· 2091 frag++; 2092 2093 get_page(page->buffer); 2094 frag->page = page->buffer; 2095 frag->page_offset = 0; 2096 frag->size = hlen; ··· 2255 released = 0; 2256 while (entry != last) { 2257 /* make a new buffer if it's still in use */ 2258 + if (page_count(page[entry]->buffer) > 1) { 2259 cas_page_t *new = cas_page_dequeue(cp); 2260 if (!new) { 2261 /* let the timer know that we need to