/*=========================================================================== Copyright (c) 1998-2000, The Santa Cruz Operation All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: *Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. *Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. *Neither name of The Santa Cruz Operation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ /* memory allocation functions */ #include #include #include "alloc.h" #include "global.h" /* for postfatal() */ static char const rcsid[] = "$Id: alloc.c,v 1.8 2006/07/23 20:59:20 broeker Exp $"; static void *alloctest(void *p); /* let autoconf find out if is available. This test will * succeed more reliably than the defined(__STDC__) one I replaced */ #if STDC_HEADERS # include #else char *calloc(), *malloc(), *realloc(), *strcpy(); #endif /* allocate a string */ char * my_strdup(char *s) { return(strcpy(mymalloc(strlen(s) + 1), s)); } /* version of malloc that only returns if successful */ void * mymalloc(size_t size) { return(alloctest(malloc((unsigned) size))); } /* version of calloc that only returns if successful */ void * mycalloc(size_t nelem, size_t size) { return(alloctest(calloc((unsigned) nelem, (unsigned) size))); } /* version of realloc that only returns if successful */ void * myrealloc(void *p, size_t size) { return(alloctest(realloc(p, (unsigned) size))); } /* check for memory allocation failure */ static void * alloctest(void *p) { if (p == NULL) { postfatal("\n%s: out of storage\n", argv0); /* NOTREACHED */ } return(p); } e='d88d40b01c5c0dad6a1dca3b18267849eef4a2a9'/>
context:
space:
mode:
authorJacob Keller <jacob.e.keller@intel.com>2016-12-02 12:32:59 -0800
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-02-11 20:39:01 -0800
commitd88d40b01c5c0dad6a1dca3b18267849eef4a2a9 (patch)
tree9474820ab5a11a7032a5c6d990d72917a17bfc59
parente6e3fc2bd3ee03117e1ce388c897fc3b2da97d65 (diff)
i40e: allow i40e_update_filter_state to skip broadcast filters
Fix a bug where we modified the mac_filter_hash while outside a lock, when handling addition of broadcast filters. Normally, we add filters to firmware by batching the additions into lists and issuing 1 update for every few filters. Broadcast filters are handled differently, by instead setting the broadcast promiscuous mode flags. In order to make sure the 1<->1 mapping of filters in our addition array lined up with filters in the hlist tmp_add_list, we had to remove the filter and move it back to the main hash. However, we didn't do this under lock, which could cause consistency problems for the list. Fix this by updating i40e_update_filter_state logic so that it knows to avoid broadcast filters. This ensures that we don't have to remove the filter separately, and can put it back using the normal flow. Change-ID: Id288fade80b3e3a9a54b68cc249188cb95147518 Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c