]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[ipoib] Fix REMAC cache discarder
authorMichael Brown <mcb30@ipxe.org>
Mon, 1 Jun 2015 17:02:55 +0000 (18:02 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 1 Jun 2015 17:02:55 +0000 (18:02 +0100)
Originally-fixed-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/ipoib.c

index 369ebe43a4f3a22b2287821eb499e1c9e6339d5a..7250f8415fe6917f801b1ebc16c5301620c75a51 100644 (file)
@@ -100,6 +100,8 @@ struct errortab ipoib_errors[] __errortab = {
        __einfo_errortab ( EINFO_EINPROGRESS_JOINING ),
 };
 
+static struct net_device_operations ipoib_operations;
+
 /****************************************************************************
  *
  * IPoIB REMAC cache
@@ -206,14 +208,20 @@ static void ipoib_flush_remac ( struct ipoib_device *ipoib ) {
  * @ret discarded      Number of cached items discarded
  */
 static unsigned int ipoib_discard_remac ( void ) {
-       struct ib_device *ibdev;
+       struct net_device *netdev;
        struct ipoib_device *ipoib;
        struct ipoib_peer *peer;
        unsigned int discarded = 0;
 
        /* Try to discard one cache entry for each IPoIB device */
-       for_each_ibdev ( ibdev ) {
-               ipoib = ib_get_ownerdata ( ibdev );
+       for_each_netdev ( netdev ) {
+
+               /* Skip non-IPoIB devices */
+               if ( netdev->op != &ipoib_operations )
+                       continue;
+               ipoib = netdev->priv;
+
+               /* Discard least recently used cache entry (if any) */
                list_for_each_entry_reverse ( peer, &ipoib->peers, list ) {
                        list_del ( &peer->list );
                        free ( peer );