Deleted Added
sdiff udiff text old ( 210311 ) new ( 215974 )
full compact
1/*************************************************************************
2Copyright (c) 2003-2007 Cavium Networks (support@cavium.com). All rights
3reserved.
4
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are
8met:

--- 14 unchanged lines hidden (view full) ---

23This Software, including technical data, may be subject to U.S. export control laws, including the U.S. Export Administration Act and its associated regulations, and may be subject to export or import regulations in other countries.
24
25TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
26AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
27
28*************************************************************************/
29
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD: head/sys/mips/cavium/octe/ethernet-mem.c 215974 2010-11-28 05:57:24Z jmallett $");
32
33#include <sys/param.h>
34#include <sys/systm.h>
35#include <sys/bus.h>
36#include <sys/endian.h>
37#include <sys/kernel.h>
38#include <sys/mbuf.h>
39#include <sys/socket.h>

--- 6 unchanged lines hidden (view full) ---

46
47/**
48 * Fill the supplied hardware pool with mbufs
49 *
50 * @param pool Pool to allocate an mbuf for
51 * @param size Size of the buffer needed for the pool
52 * @param elements Number of buffers to allocate
53 */
54int cvm_oct_mem_fill_fpa(int pool, int size, int elements)
55{
56 int freed = elements;
57 while (freed) {
58 KASSERT(size <= MCLBYTES - 128, ("mbuf clusters are too small"));
59
60 struct mbuf *m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
61 if (__predict_false(m == NULL)) {
62 printf("Failed to allocate mbuf for hardware pool %d\n", pool);

--- 11 unchanged lines hidden (view full) ---

74
75/**
76 * Free the supplied hardware pool of mbufs
77 *
78 * @param pool Pool to allocate an mbuf for
79 * @param size Size of the buffer needed for the pool
80 * @param elements Number of buffers to allocate
81 */
82void cvm_oct_mem_empty_fpa(int pool, int size, int elements)
83{
84 char *memory;
85
86 do {
87 memory = cvmx_fpa_alloc(pool);
88 if (memory) {
89 struct mbuf *m = *(struct mbuf **)(memory - sizeof(void *));
90 elements--;
91 m_freem(m);
92 }
93 } while (memory);
94
95 if (elements < 0)
96 printf("Warning: Freeing of pool %u had too many mbufs (%d)\n", pool, elements);
97 else if (elements > 0)
98 printf("Warning: Freeing of pool %u is missing %d mbufs\n", pool, elements);
99}