diff options
author | Masakazu Mokuno <mokuno@sm.sony.co.jp> | 2007-07-20 04:39:25 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-07-24 16:28:41 -0400 |
commit | fe6d3a4049ec9d859d75ddfcc6865a0f58178924 (patch) | |
tree | 37d9c39f6ae2408305d9c216a26b8ed237bd2a58 /drivers/net/ps3_gelic_net.c | |
parent | a3093d9b07101f2461f88dfd0a20aaaa8853e976 (diff) |
ps3: reduce allocation size of rx skb buffers
Reduced allocation size for rx skb buffers, from 2308 bytes to
1356 per buffer.
Signed-off-by: Masakazu Mokuno <mokuno@sm.sony.co.jp>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/ps3_gelic_net.c')
-rw-r--r-- | drivers/net/ps3_gelic_net.c | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/drivers/net/ps3_gelic_net.c b/drivers/net/ps3_gelic_net.c index d596df987585..13d1c0a2a25f 100644 --- a/drivers/net/ps3_gelic_net.c +++ b/drivers/net/ps3_gelic_net.c | |||
@@ -917,31 +917,60 @@ static int gelic_net_decode_one_descr(struct gelic_net_card *card) | |||
917 | goto refill; | 917 | goto refill; |
918 | } | 918 | } |
919 | 919 | ||
920 | if ((status != GELIC_NET_DESCR_COMPLETE) && | 920 | if (status == GELIC_NET_DESCR_BUFFER_FULL) { |
921 | (status != GELIC_NET_DESCR_FRAME_END)) { | 921 | /* |
922 | * Buffer full would occur if and only if | ||
923 | * the frame length was longer than the size of this | ||
924 | * descriptor's buffer. If the frame length was equal | ||
925 | * to or shorter than buffer'size, FRAME_END condition | ||
926 | * would occur. | ||
927 | * Anyway this frame was longer than the MTU, | ||
928 | * just drop it. | ||
929 | */ | ||
930 | dev_info(ctodev(card), "overlength frame\n"); | ||
931 | goto refill; | ||
932 | } | ||
933 | /* | ||
934 | * descriptoers any other than FRAME_END here should | ||
935 | * be treated as error. | ||
936 | */ | ||
937 | if (status != GELIC_NET_DESCR_FRAME_END) { | ||
922 | dev_dbg(ctodev(card), "RX descriptor with state %x\n", | 938 | dev_dbg(ctodev(card), "RX descriptor with state %x\n", |
923 | status); | 939 | status); |
924 | goto refill; | 940 | goto refill; |
925 | } | 941 | } |
926 | 942 | ||
927 | /* ok, we've got a packet in descr */ | 943 | /* ok, we've got a packet in descr */ |
928 | gelic_net_pass_skb_up(descr, card); /* 1: skb_up sccess */ | 944 | gelic_net_pass_skb_up(descr, card); |
929 | |||
930 | refill: | 945 | refill: |
931 | descr->next_descr_addr = 0; /* unlink the descr */ | 946 | /* |
947 | * So that always DMAC can see the end | ||
948 | * of the descriptor chain to avoid | ||
949 | * from unwanted DMAC overrun. | ||
950 | */ | ||
951 | descr->next_descr_addr = 0; | ||
932 | 952 | ||
933 | /* change the descriptor state: */ | 953 | /* change the descriptor state: */ |
934 | gelic_net_set_descr_status(descr, GELIC_NET_DESCR_NOT_IN_USE); | 954 | gelic_net_set_descr_status(descr, GELIC_NET_DESCR_NOT_IN_USE); |
935 | 955 | ||
936 | /* refill one desc | 956 | /* |
937 | * FIXME: this can fail, but for now, just leave this | 957 | * this call can fail, but for now, just leave this |
938 | * descriptor without skb | 958 | * decriptor without skb |
939 | */ | 959 | */ |
940 | gelic_net_prepare_rx_descr(card, descr); | 960 | gelic_net_prepare_rx_descr(card, descr); |
961 | |||
941 | chain->head = descr; | 962 | chain->head = descr; |
942 | chain->tail = descr->next; | 963 | chain->tail = descr->next; |
964 | |||
965 | /* | ||
966 | * Set this descriptor the end of the chain. | ||
967 | */ | ||
943 | descr->prev->next_descr_addr = descr->bus_addr; | 968 | descr->prev->next_descr_addr = descr->bus_addr; |
944 | 969 | ||
970 | /* | ||
971 | * If dmac chain was met, DMAC stopped. | ||
972 | * thus re-enable it | ||
973 | */ | ||
945 | if (dmac_chain_ended) { | 974 | if (dmac_chain_ended) { |
946 | card->rx_dma_restart_required = 1; | 975 | card->rx_dma_restart_required = 1; |
947 | dev_dbg(ctodev(card), "reenable rx dma scheduled\n"); | 976 | dev_dbg(ctodev(card), "reenable rx dma scheduled\n"); |