uIP v0.7.8.1b (May 01, 2013)
=======================================================
   Enhancements
   ------------
   1. Change:  Performance optimization by caching the page size
      Impact:  All

   2. Change:  Fixed a bug in the tx completion interrupt handler
      Impact:  10G only

Signed-off-by: Eddie Wai <eddie....@broadcom.com>
---
 iscsiuio/README                |    9 +--
 iscsiuio/RELEASE.TXT           |   15 ++++-
 iscsiuio/configure             |  124 ++++++++++++++++++++--------------------
 iscsiuio/configure.ac          |    4 +-
 iscsiuio/docs/iscsiuio.8       |    8 +-
 iscsiuio/src/unix/libs/bnx2.c  |   14 ++--
 iscsiuio/src/unix/libs/bnx2x.c |   19 +++---
 iscsiuio/src/unix/nic.c        |    1 +
 iscsiuio/src/unix/nic.h        |    6 ++-
 9 files changed, 108 insertions(+), 92 deletions(-)

diff --git a/iscsiuio/README b/iscsiuio/README
index 1a6386f..e7e5fe4 100644
--- a/iscsiuio/README
+++ b/iscsiuio/README
@@ -1,6 +1,6 @@
 Iscsiuio Userspace Tool
-Version 0.7.6.1g
-Jan 14, 2013
+Version 0.7.8.1b
+May 01, 2013
 ------------------------------------------------------
 
 This tool is to be used in conjunction with the Broadcom NetXtreme II Linux
@@ -189,9 +189,8 @@ To run the daemon in debug mode please pass the parameter  
'-d <debug level>'
 
 where the following debug levels are defined:
 
-PACKET        5 - Print all messages
-DEBUG         4 - Print debug messages
-INFO          3 - Print messages needed to follow the uIP code
+DEBUG         4 - Print all messages
+INFO          3 - Print messages needed to follow the uIP code (default)
 WARN          2 - Print warning messages
 ERROR         1 - Only print critical errors
 
diff --git a/iscsiuio/RELEASE.TXT b/iscsiuio/RELEASE.TXT
index 2fa19bb..de70667 100644
--- a/iscsiuio/RELEASE.TXT
+++ b/iscsiuio/RELEASE.TXT
@@ -1,7 +1,7 @@
                               Release Notes
                         Broadcom uIP Linux Driver
-                            Version 0.7.6.1g
-                               01/14/2013
+                            Version 0.7.8.1b
+                               05/01/2013
 
                           Broadcom Corporation
                          5300 California Avenue,
@@ -10,6 +10,16 @@
                Copyright (c) 2004 - 2013 Broadcom Corporation
                            All rights reserved
 
+uIP v0.7.8.1b (May 01, 2013)
+=======================================================
+   Enhancements
+   ------------
+   1. Change:  Performance optimization by caching the page size
+      Impact:  All
+
+   2. Change:  Fixed a bug in the tx completion interrupt handler
+      Impact:  10G only
+
 
 uIP v0.7.6.1g (Jan 14, 2013)
 =======================================================
@@ -1986,3 +1996,4 @@ uIP v0.5.0b (Nov 24, 2009)
    1. Change: Add Broadcom 10G iSCSI offload support
 
       Impact: Linux
+
diff --git a/iscsiuio/configure b/iscsiuio/configure
index 1852551..2740598 100755
--- a/iscsiuio/configure
+++ b/iscsiuio/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for iscsiuio 0.7.6.1g.
+# Generated by GNU Autoconf 2.59 for iscsiuio 0.7.8.1b.
 #
 # Report bugs to <eddie....@broadcom.com>.
 #
@@ -72,9 +72,9 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-         /^X\/\(\/\/\)$/{ s//\1/; q; }
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
 
 
 # PATH needs CR, and LINENO needs CR and PATH.
@@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='iscsiuio'
 PACKAGE_TARNAME='iscsiuio'
-PACKAGE_VERSION='0.7.6.1g'
-PACKAGE_STRING='iscsiuio 0.7.6.1g'
+PACKAGE_VERSION='0.7.8.1b'
+PACKAGE_STRING='iscsiuio 0.7.8.1b'
 PACKAGE_BUGREPORT='eddie....@broadcom.com'
 
 # Factoring default headers for most tests.
@@ -870,10 +870,10 @@ $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$0" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
   srcdir=$ac_confdir
   if test ! -r $srcdir/$ac_unique_file; then
     srcdir=..
@@ -954,7 +954,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures iscsiuio 0.7.6.1g to adapt to many kinds of systems.
+\`configure' configures iscsiuio 0.7.8.1b to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1020,7 +1020,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of iscsiuio 0.7.6.1g:";;
+     short | recursive ) echo "Configuration of iscsiuio 0.7.8.1b:";;
    esac
   cat <<\_ACEOF
 
@@ -1160,7 +1160,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-iscsiuio configure 0.7.6.1g
+iscsiuio configure 0.7.8.1b
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1174,7 +1174,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by iscsiuio $as_me 0.7.6.1g, which was
+It was created by iscsiuio $as_me 0.7.8.1b, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -11743,7 +11743,7 @@ echo $ECHO_N "checking whether a program can dlopen 
itself... $ECHO_C" >&6
 if test "${lt_cv_dlopen_self+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test "$cross_compiling" = yes; then :
   lt_cv_dlopen_self=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -11843,7 +11843,7 @@ echo $ECHO_N "checking whether a statically linked 
program can dlopen itself...
 if test "${lt_cv_dlopen_self_static+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test "$cross_compiling" = yes; then :
   lt_cv_dlopen_self_static=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -21519,9 +21519,9 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-         /^X\/\(\/\/\)$/{ s//\1/; q; }
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
 
 
 # PATH needs CR, and LINENO needs CR and PATH.
@@ -21705,7 +21705,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by iscsiuio $as_me 0.7.6.1g, which was
+This file was extended by iscsiuio $as_me 0.7.8.1b, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21768,7 +21768,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-iscsiuio config.status 0.7.6.1g
+iscsiuio config.status 0.7.8.1b
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -22113,10 +22113,10 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' 
\| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
   { if $as_mkdir_p; then
     mkdir -p "$ac_dir"
   else
@@ -22132,10 +22132,10 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| 
\
         .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
     done
     test ! -n "$as_dirs" || mkdir $as_dirs
   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" 
>&5
@@ -22470,10 +22470,10 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' 
\| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
       { if $as_mkdir_p; then
     mkdir -p "$ac_dir"
   else
@@ -22489,10 +22489,10 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| 
\
         .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
     done
     test ! -n "$as_dirs" || mkdir $as_dirs
   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" 
>&5
@@ -22524,10 +22524,10 @@ $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X$ac_file |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`/stamp-h$_am_stamp_count
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
 done
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF
@@ -22546,10 +22546,10 @@ $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' 
\| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_dest" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
   { if $as_mkdir_p; then
     mkdir -p "$ac_dir"
   else
@@ -22565,10 +22565,10 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| 
\
         .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
     done
     test ! -n "$as_dirs" || mkdir $as_dirs
   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" 
>&5
@@ -22662,10 +22662,10 @@ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
   else
     continue
   fi
@@ -22695,10 +22695,10 @@ $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         .     : '\(.\)' 2>/dev/null ||
 echo X"$file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
     { if $as_mkdir_p; then
     mkdir -p $dirpart/$fdir
   else
@@ -22714,10 +22714,10 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| 
\
         .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
     done
     test ! -n "$as_dirs" || mkdir $as_dirs
   fi || { { echo "$as_me:$LINENO: error: cannot create directory 
$dirpart/$fdir" >&5
@@ -22762,4 +22762,4 @@ if test "$no_create" != yes; then
   # would make configure fail if this is the last instruction.
   $ac_cs_success || { (exit 1); exit 1; }
 fi
-#
+
diff --git a/iscsiuio/configure.ac b/iscsiuio/configure.ac
index 34f0481..e9a5e32 100644
--- a/iscsiuio/configure.ac
+++ b/iscsiuio/configure.ac
@@ -11,9 +11,9 @@ dnl             Benjamin Li  (be...@broadcom.com)
 dnl
 
 PACKAGE=iscsiuio
-VERSION=0.7.6.1g
+VERSION=0.7.8.1b
 
-AC_INIT(iscsiuio, 0.7.6.1g, eddie....@broadcom.com)
+AC_INIT(iscsiuio, 0.7.8.1b, eddie....@broadcom.com)
 
 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
 AC_CONFIG_HEADER(config.h)
diff --git a/iscsiuio/docs/iscsiuio.8 b/iscsiuio/docs/iscsiuio.8
index 2f577bc..ea21d78 100644
--- a/iscsiuio/docs/iscsiuio.8
+++ b/iscsiuio/docs/iscsiuio.8
@@ -3,9 +3,9 @@
 .\" modify it under the terms of the GNU General Public License as
 .\" published by the Free Software Foundation.
 .\"
-.\" bnx2.4,v 0.7.6.1g
+.\" bnx2.4,v 0.7.8.1b
 .\"
-.TH iscsiuio 8 "01/14/2013" "Broadcom Corporation"
+.TH iscsiuio 8 "05/01/2013" "Broadcom Corporation"
 .\"
 .\" NAME part
 .\"
@@ -81,6 +81,6 @@ Display this help and exit.
 .\" AUTHOR part
 .\"
 .SH AUTHOR
-Eddie Wai \- eddie....@broadcom.com
-.P
 Benjamin Li \- be...@broadcom.com
+.P
+Eddie Wai \- eddie....@broadcom.com
diff --git a/iscsiuio/src/unix/libs/bnx2.c b/iscsiuio/src/unix/libs/bnx2.c
index b72b8ce..91c44e5 100644
--- a/iscsiuio/src/unix/libs/bnx2.c
+++ b/iscsiuio/src/unix/libs/bnx2.c
@@ -576,7 +576,7 @@ static int bnx2_open(nic_t *nic)
 
        bp->sblk_map = mmap(NULL, bp->status_blk_size,
                            PROT_READ | PROT_WRITE, MAP_SHARED,
-                           nic->fd, (off_t) getpagesize());
+                           nic->fd, (off_t) nic->page_size);
        if (bp->sblk_map == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap status block: %s",
                         nic->log_name, strerror(errno));
@@ -602,9 +602,9 @@ static int bnx2_open(nic_t *nic)
                          BNX2_SBLK_EVEN_IDX(bp->status_blk.msi->rx2));
        }
 
-       bp->tx_ring = mmap(NULL, 2 * getpagesize(),
+       bp->tx_ring = mmap(NULL, 2 * nic->page_size,
                           PROT_READ | PROT_WRITE, MAP_SHARED, nic->fd,
-                          (off_t) 2 * getpagesize());
+                          (off_t) 2 * nic->page_size);
        if (bp->tx_ring == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap tx ring: %s",
                         nic->log_name, strerror(errno));
@@ -614,7 +614,7 @@ static int bnx2_open(nic_t *nic)
 
        bp->bufs = mmap(NULL, (bp->rx_ring_size + 1) * bp->rx_buffer_size,
                        PROT_READ | PROT_WRITE,
-                       MAP_SHARED, nic->fd, (off_t) 3 * getpagesize());
+                       MAP_SHARED, nic->fd, (off_t) 3 * nic->page_size);
        if (bp->bufs == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap buffers: %s",
                         nic->log_name, strerror(errno));
@@ -693,7 +693,7 @@ static int bnx2_open(nic_t *nic)
        return 0;
 
 error_bufs:
-       munmap(bp->tx_ring, 2 * getpagesize());
+       munmap(bp->tx_ring, 2 * nic->page_size);
 
 error_tx_ring:
        munmap(bp->status_blk.msi, bp->status_blk_size);
@@ -765,7 +765,7 @@ static int bnx2_uio_close_resources(nic_t *nic, 
NIC_SHUTDOWN_T graceful)
        }
 
        if (bp->tx_ring != NULL) {
-               rc = munmap(bp->tx_ring, 2 * getpagesize());
+               rc = munmap(bp->tx_ring, 2 * nic->page_size);
                if (rc != 0)
                        LOG_WARN(PFX "%s: Couldn't unmap tx_rings",
                                 nic->log_name);
@@ -884,7 +884,7 @@ void bnx2_start_xmit(nic_t *nic, size_t len, u16_t vlan_id)
        uint16_t ring_prod;
        struct tx_bd *txbd;
        struct rx_bd *rxbd;
-       rxbd = (struct rx_bd *)(((__u8 *) bp->tx_ring) + getpagesize());
+       rxbd = (struct rx_bd *)(((__u8 *) bp->tx_ring) + nic->page_size);
 
        if ((rxbd->rx_bd_haddr_hi == 0) && (rxbd->rx_bd_haddr_lo == 0)) {
                LOG_PACKET(PFX "%s: trying to transmit when device is closed",
diff --git a/iscsiuio/src/unix/libs/bnx2x.c b/iscsiuio/src/unix/libs/bnx2x.c
index c6e92cf..36fc48e 100644
--- a/iscsiuio/src/unix/libs/bnx2x.c
+++ b/iscsiuio/src/unix/libs/bnx2x.c
@@ -818,7 +818,7 @@ static int bnx2x_open(nic_t *nic)
 
        bp->status_blk.def = mmap(NULL, bp->status_blk_size,
                                  PROT_READ | PROT_WRITE, MAP_SHARED,
-                                 nic->fd, (off_t) getpagesize());
+                                 nic->fd, (off_t) nic->page_size);
        if (bp->status_blk.def == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap status block: %s",
                         nic->log_name, strerror(errno));
@@ -827,10 +827,10 @@ static int bnx2x_open(nic_t *nic)
                goto open_error;
        }
 
-       bp->tx_ring = mmap(NULL, 4 * getpagesize(),
+       bp->tx_ring = mmap(NULL, 4 * nic->page_size,
                           PROT_READ | PROT_WRITE,
                           MAP_SHARED | MAP_LOCKED,
-                          nic->fd, (off_t) 2 * getpagesize());
+                          nic->fd, (off_t) 2 * nic->page_size);
        if (bp->tx_ring == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap tx ring: %s",
                         nic->log_name, strerror(errno));
@@ -840,12 +840,12 @@ static int bnx2x_open(nic_t *nic)
        }
 
        bp->rx_comp_ring.cqe = (union eth_rx_cqe *)
-           (((__u8 *) bp->tx_ring) + 2 * getpagesize());
+           (((__u8 *) bp->tx_ring) + 2 * nic->page_size);
 
        bp->bufs = mmap(NULL, (bp->rx_ring_size + 1) * bp->rx_buffer_size,
                        PROT_READ | PROT_WRITE,
                        MAP_SHARED | MAP_LOCKED,
-                       nic->fd, (off_t) 3 * getpagesize());
+                       nic->fd, (off_t) 3 * nic->page_size);
        if (bp->bufs == MAP_FAILED) {
                LOG_INFO(PFX "%s: Could not mmap buffers: %s",
                         nic->log_name, strerror(errno));
@@ -937,7 +937,7 @@ static int bnx2x_open(nic_t *nic)
                bp->rx_prod_io = BAR_USTRORM_INTMEM +
                    USTORM_RX_PRODS_OFFSET(bp->port, bp->client_id);
 
-               bp->tx_doorbell = bp->cid * getpagesize() + 0x40;
+               bp->tx_doorbell = bp->cid * nic->page_size + 0x40;
 
                bp->get_rx_cons = bnx2x_get_rx;
                bp->get_tx_cons = bnx2x_get_tx;
@@ -1073,7 +1073,7 @@ SF:
 
 open_error:
        if (bp->tx_ring) {
-               munmap(bp->tx_ring, 4 * getpagesize());
+               munmap(bp->tx_ring, 4 * nic->page_size);
                bp->tx_ring = NULL;
        }
 
@@ -1150,7 +1150,7 @@ static int bnx2x_uio_close_resources(nic_t *nic, 
NIC_SHUTDOWN_T graceful)
        }
 
        if (bp->tx_ring != NULL) {
-               rc = munmap(bp->tx_ring, 4 * getpagesize());
+               rc = munmap(bp->tx_ring, 4 * nic->page_size);
                if (rc != 0)
                        LOG_WARN(PFX "%s: Couldn't unmap tx_rings",
                                 nic->log_name);
@@ -1284,7 +1284,7 @@ void bnx2x_start_xmit(nic_t *nic, size_t len, u16_t 
vlan_id)
        struct eth_tx_start_bd *txbd;
        struct eth_tx_bd *txbd2;
        struct eth_rx_bd *rx_bd;
-       rx_bd = (struct eth_rx_bd *)(((__u8 *) bp->tx_ring) + getpagesize());
+       rx_bd = (struct eth_rx_bd *)(((__u8 *) bp->tx_ring) + nic->page_size);
 
        if ((rx_bd->addr_hi == 0) && (rx_bd->addr_lo == 0)) {
                LOG_PACKET(PFX "%s: trying to transmit when device is closed",
@@ -1539,6 +1539,7 @@ static int bnx2x_clear_tx_intr(nic_t *nic)
                                LOG_ERR(PFX "bnx2x tx lock with prod == cons");
 
                        pthread_mutex_unlock(&nic->xmit_mutex);
+                       return 0;
                }
                return -EAGAIN;
        }
diff --git a/iscsiuio/src/unix/nic.c b/iscsiuio/src/unix/nic.c
index 457797d..7c3f4d5 100644
--- a/iscsiuio/src/unix/nic.c
+++ b/iscsiuio/src/unix/nic.c
@@ -400,6 +400,7 @@ nic_t *nic_init()
        nic->tx_packet_queue = NULL;
        nic->nic_library = NULL;
        nic->pci_id = NULL;
+       nic->page_size = getpagesize();
 
        /* nic_mutex is used to protect nic ops */
        pthread_mutex_init(&nic->nic_mutex, NULL);
diff --git a/iscsiuio/src/unix/nic.h b/iscsiuio/src/unix/nic.h
index 7d2d078..7d1ae28 100644
--- a/iscsiuio/src/unix/nic.h
+++ b/iscsiuio/src/unix/nic.h
@@ -140,7 +140,9 @@ typedef struct nic_interface {
        time_t start_time;
 
        struct uip_stack ustack;
-#define IFACE_NUM_INVALID      -1
+
+#define IFACE_NUM_PRESENT (1<<0)
+#define IFACE_NUM_INVALID -1
        int iface_num;
        int request_type;
 } nic_interface_t;
@@ -247,6 +249,8 @@ typedef struct nic {
 
        uint32_t intr_count;    /* Total UIO interrupt count            */
 
+       int page_size;
+
        /* Held for nic ops manipulation */
        pthread_mutex_t nic_mutex;
 
-- 
1.7.7.4


-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To post to this group, send email to open-iscsi@googlegroups.com.
Visit this group at http://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to