diff --git a/.bnx2x.metadata b/.bnx2x.metadata
index 179013b..60eca06 100644
--- a/.bnx2x.metadata
+++ b/.bnx2x.metadata
@@ -1 +1 @@
-fc2236052f9f44add30ca2a6b4fbc440e1ee2d6b SOURCES/bnx2x-1.710.51.tar.bz2
+eb3625a4a6c6b6cc94c74777a0d77fcf41e1b855 SOURCES/bnx2x-1.712.30.tar.bz2
diff --git a/.gitignore b/.gitignore
index 4b09395..9723b72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/bnx2x-1.710.51.tar.bz2
+SOURCES/bnx2x-1.712.30.tar.bz2
diff --git a/SOURCES/bnx2x-firmware.files b/SOURCES/bnx2x-firmware.files
index bdcbb4c..0fbcb86 100644
--- a/SOURCES/bnx2x-firmware.files
+++ b/SOURCES/bnx2x-firmware.files
@@ -1,4 +1,4 @@
 %defattr(644,root,root,755)
-/lib/firmware/bnx2x/bnx2x-e1-7.10.51.0.fw
-/lib/firmware/bnx2x/bnx2x-e1h-7.10.51.0.fw
-/lib/firmware/bnx2x/bnx2x-e2-7.10.51.0.fw
+/lib/firmware/bnx2x-e1-7.13.1.0.fw
+/lib/firmware/bnx2x-e1h-7.13.1.0.fw
+/lib/firmware/bnx2x-e2-7.13.1.0.fw
diff --git a/SOURCES/bnx2x.patch b/SOURCES/bnx2x.patch
index 4fc8dca..837d13d 100644
--- a/SOURCES/bnx2x.patch
+++ b/SOURCES/bnx2x.patch
@@ -1,85 +1,120 @@
-diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
-index 86e9451..5097083 100644
---- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
-+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
-@@ -2581,4 +2581,9 @@ void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb);
- #define BNX2X_MAX_PHC_DRIFT 31000000
- #define BNX2X_PTP_TX_TIMEOUT
- 
-+static inline int dup_is_kdump_kernel(void)
-+{
-+	return reset_devices;
-+}
-+
- #endif /* bnx2x.h */
+From 233fd923ea4759062abb3c26493beea638264c72 Mon Sep 17 00:00:00 2001
+From: Petr Oros <poros@redhat.com>
+Date: Wed, 13 Jul 2016 18:33:14 +0200
+Subject: [PATCH] bnx2x: backport for RHEL7.2GA kernel
+
+Signed-off-by: Petr Oros <poros@redhat.com>
+---
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c  | 15 +++------------
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h  |  5 +----
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 10 +++++-----
+ 3 files changed, 9 insertions(+), 21 deletions(-)
+
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
-index 66717c5..bd1fed9 100644
+index 07e88de..860c1fb 100644
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
-@@ -65,7 +65,7 @@ static int bnx2x_calc_num_queues(struct bnx2x *bp)
- 	int nq = bnx2x_num_queues ? : netif_get_num_default_rss_queues();
+@@ -678,7 +678,7 @@ static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
+ static void bnx2x_frag_free(const struct bnx2x_fastpath *fp, void *data)
+ {
+ 	if (fp->rx_frag_size)
+-		skb_free_frag(data);
++		put_page(virt_to_head_page(data));
+ 	else
+ 		kfree(data);
+ }
+@@ -1908,8 +1908,7 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
+ 		bnx2x_napi_disable_cnic(bp);
+ }
  
- 	/* Reduce memory usage in kdump environment by using only one queue */
--	if (is_kdump_kernel())
-+	if (dup_is_kdump_kernel())
- 		nq = 1;
+-u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
+-		       void *accel_priv, select_queue_fallback_t fallback)
++u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
+ {
+ 	struct bnx2x *bp = netdev_priv(dev);
  
- 	nq = clamp(nq, 1, BNX2X_MAX_QUEUES(bp));
-@@ -1647,6 +1647,44 @@ void bnx2x_free_irq(struct bnx2x *bp)
+@@ -1931,7 +1930,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
  	}
+ 
+ 	/* select a non-FCoE queue */
+-	return fallback(dev, skb) % BNX2X_NUM_ETH_QUEUES(bp);
++	return __netdev_pick_tx(dev, skb) % BNX2X_NUM_ETH_QUEUES(bp);
+ }
+ 
+ void bnx2x_set_num_queues(struct bnx2x *bp)
+@@ -4276,14 +4275,6 @@ int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
+ 	return 0;
  }
  
-+/**
-+ * pci_enable_msix_range - configure device's MSI-X capability structure
-+ * @dev: pointer to the pci_dev data structure of MSI-X device function
-+ * @entries: pointer to an array of MSI-X entries
-+ * @minvec: minimum number of MSI-X irqs requested
-+ * @maxvec: maximum number of MSI-X irqs requested
-+ *
-+ * Setup the MSI-X capability structure of device function with a maximum
-+ * possible number of interrupts in the range between @minvec and @maxvec
-+ * upon its software driver call to request for MSI-X mode enabled on its
-+ * hardware device function. It returns a negative errno if an error occurs.
-+ * If it succeeds, it returns the actual number of interrupts allocated and
-+ * indicates the successful configuration of MSI-X capability structure
-+ * with new allocated MSI-X interrupts.
-+ **/
-+static int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
-+			       int minvec, int maxvec)
-+{
-+	int nvec = maxvec;
-+	int rc;
-+
-+	if (maxvec < minvec)
-+		return -ERANGE;
-+
-+	do {
-+		rc = pci_enable_msix(dev, entries, nvec);
-+		if (rc < 0) {
-+			return rc;
-+		} else if (rc > 0) {
-+			if (rc < minvec)
-+				return -ENOSPC;
-+			nvec = rc;
-+		}
-+	} while (rc);
-+
-+	return nvec;
-+}
-+
- int bnx2x_enable_msix(struct bnx2x *bp)
+-int __bnx2x_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
+-		     struct tc_to_netdev *tc)
+-{
+-	if (tc->type != TC_SETUP_MQPRIO)
+-		return -EINVAL;
+-	return bnx2x_setup_tc(dev, tc->tc);
+-}
+-
+ /* called with rtnl_lock */
+ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
  {
- 	int msix_vec = 0, i, rc;
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+index 0e68fad..cabbb1c 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+@@ -486,8 +486,6 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev);
+ 
+ /* setup_tc callback */
+ int bnx2x_setup_tc(struct net_device *dev, u8 num_tc);
+-int __bnx2x_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
+-		     struct tc_to_netdev *tc);
+ 
+ int bnx2x_get_vf_config(struct net_device *dev, int vf,
+ 			struct ifla_vf_info *ivi);
+@@ -495,8 +493,7 @@ int bnx2x_set_vf_mac(struct net_device *dev, int queue, u8 *mac);
+ int bnx2x_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos);
+ 
+ /* select_queue callback */
+-u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
+-		       void *accel_priv, select_queue_fallback_t fallback);
++u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb);
+ 
+ static inline void bnx2x_update_rx_prod(struct bnx2x *bp,
+ 					struct bnx2x_fastpath *fp,
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-index e22c363..491ffe0 100644
+index 3d8261e..440750a 100644
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-@@ -11972,7 +11972,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
- 	bp->disable_tpa = disable_tpa;
- 	bp->disable_tpa |= IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp);
- 	/* Reduce memory usage in kdump environment by disabling TPA */
--	bp->disable_tpa |= is_kdump_kernel();
-+	bp->disable_tpa |= dup_is_kdump_kernel();
+@@ -77,9 +77,9 @@
+ 	__stringify(BCM_5710_FW_MINOR_VERSION) "."	\
+ 	__stringify(BCM_5710_FW_REVISION_VERSION) "."	\
+ 	__stringify(BCM_5710_FW_ENGINEERING_VERSION)
+-#define FW_FILE_NAME_E1		"bnx2x/bnx2x-e1-" FW_FILE_VERSION ".fw"
+-#define FW_FILE_NAME_E1H	"bnx2x/bnx2x-e1h-" FW_FILE_VERSION ".fw"
+-#define FW_FILE_NAME_E2		"bnx2x/bnx2x-e2-" FW_FILE_VERSION ".fw"
++#define FW_FILE_NAME_E1		"bnx2x-e1-" FW_FILE_VERSION ".fw"
++#define FW_FILE_NAME_E1H	"bnx2x-e1h-" FW_FILE_VERSION ".fw"
++#define FW_FILE_NAME_E2		"bnx2x-e2-" FW_FILE_VERSION ".fw"
+ 
+ /* Time in jiffies before concluding the transmitter is hung */
+ #define TX_TIMEOUT		(5*HZ)
+@@ -12859,7 +12859,7 @@ static int bnx2x_validate_addr(struct net_device *dev)
+ }
+ 
+ static int bnx2x_get_phys_port_id(struct net_device *netdev,
+-				  struct netdev_phys_item_id *ppid)
++				  struct netdev_phys_port_id *ppid)
+ {
+ 	struct bnx2x *bp = netdev_priv(netdev);
  
- 	/* Set TPA flags */
- 	if (bp->disable_tpa) {
+@@ -13034,7 +13034,7 @@ static const struct net_device_ops bnx2x_netdev_ops = {
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ 	.ndo_poll_controller	= poll_bnx2x,
+ #endif
+-	.ndo_setup_tc		= __bnx2x_setup_tc,
++	.ndo_setup_tc		= bnx2x_setup_tc,
+ #ifdef CONFIG_BNX2X_SRIOV
+ 	.ndo_set_vf_mac		= bnx2x_set_vf_mac,
+ 	.ndo_set_vf_vlan	= bnx2x_set_vf_vlan,
+-- 
+1.8.3.1
+
diff --git a/SOURCES/kmodtool b/SOURCES/kmodtool
index 5a9fc7e..2b55385 100755
--- a/SOURCES/kmodtool
+++ b/SOURCES/kmodtool
@@ -33,7 +33,7 @@
 #
 #            2010/07/28 - Add fixes for filelists in line with LF standard
 #			- Remove now defunct "framepointer" kernel variant
-#			- Change version to "rhel6-rh2" as a consequence.
+#			- Change version to "rhel7-rh1" as a consequence.
 #
 #            2010/01/10 - Simplified for RHEL6. We are working on upstream
 #                         moving to a newer format and in any case do not
@@ -42,7 +42,7 @@
 shopt -s extglob
 
 myprog="kmodtool"
-myver="rhel6-rh2"
+myver="rhel7-rh1"
 knownvariants=@(debug|kdump)
 kmod_name=
 kver=
diff --git a/SOURCES/symbols.greylist-x86_64 b/SOURCES/symbols.greylist-x86_64
index 015a655..b7eaf71 100644
--- a/SOURCES/symbols.greylist-x86_64
+++ b/SOURCES/symbols.greylist-x86_64
@@ -1,52 +1,47 @@
-alloc_pages_current
 __alloc_workqueue_key
 build_skb
 cancel_work_sync
 capable
-__const_udelay
 crc32c
 crc32_le
-csum_partial
 dcbnl_cee_notify
 dcb_setapp
-delayed_work_timer_fn
-dev_err
-_dev_info
-dma_ops
-down_interruptible
+__dev_kfree_skb_any
 down_timeout
 dql_completed
 dql_reset
 __dynamic_netdev_dbg
+elfcorehdr_addr
 ethtool_op_get_ts_info
 __fentry__
 flush_workqueue
-__free_pages
-__get_page_tail
-kmalloc_caches
-kmalloc_order_trace
-kmem_cache_alloc_trace
+ktime_get_boottime
 ktime_get_real
-__list_add
-local_bh_disable
-local_bh_enable
 mdio_mii_ioctl
-module_layout
-napi_hash_add
+__napi_alloc_skb
+napi_complete_done
+napi_disable
 napi_hash_del
+__napi_schedule_irqoff
 netdev_alloc_frag
 netdev_err
 netdev_info
 __netdev_pick_tx
 netdev_printk
+netdev_rss_key_fill
 netif_get_num_default_rss_queues
+__netif_napi_add
 netif_set_real_num_rx_queues
+ns_to_timespec
+ns_to_timeval
 pci_choose_state
 pci_cleanup_aer_uncorrect_error_status
 pci_disable_pcie_error_reporting
 pci_disable_sriov
 pcie_capability_read_word
 pcie_get_minimum_link
+pci_enable_msi_range
+pci_enable_msix_range
 pci_enable_pcie_error_reporting
 pci_enable_sriov
 pci_find_ext_capability
@@ -54,13 +49,13 @@ pci_get_bus_and_slot
 pci_intx
 pci_ioremap_bar
 pci_is_pcie
+pci_num_vf
 pci_read_config_byte
 pci_read_config_dword
 pci_read_config_word
 pci_read_vpd
 pci_restore_state
 pci_save_state
-pci_set_master
 pci_set_power_state
 pci_vfs_assigned
 pci_vpd_find_info_keyword
@@ -69,31 +64,22 @@ pci_wait_for_pending_transaction
 pci_wake_from_d3
 pci_write_config_dword
 pci_write_config_word
-prandom_bytes
 ptp_clock_index
 ptp_clock_register
 ptp_clock_unregister
-put_page
-pv_irq_ops
-queue_work_on
 release_firmware
 request_firmware
-request_threaded_irq
-reset_devices
 skb_clone_tx_timestamp
+__smp_mb__before_atomic
 __stack_chk_fail
 synchronize_irq
 synchronize_sched
 system_state
-system_wq
 tcp_gro_complete
 timecounter_cyc2time
 timecounter_init
 timecounter_read
-usleep_range
-vfree
 warn_slowpath_fmt
-warn_slowpath_null
 x86_dma_fallback_dev
 zlib_inflate
 zlib_inflateEnd
diff --git a/SPECS/bnx2x.spec b/SPECS/bnx2x.spec
index 8948142..cfe6294 100644
--- a/SPECS/bnx2x.spec
+++ b/SPECS/bnx2x.spec
@@ -1,11 +1,11 @@
 %define kmod_name		bnx2x
-%define kmod_driver_version	1.710.51
-%define kmod_rpm_release	3
-%define kmod_git_hash		7ddc31247e7f0623d933dd476e3aac576eaa8599
-%define kmod_kernel_version	3.10.0-123.el7
-%define kernel_version		3.10.0-123.el7
+%define kmod_driver_version	1.712.30
+%define kmod_rpm_release	1
+%define kmod_git_hash		233fd923ea4759062abb3c26493beea638264c72
+%define kmod_kernel_version	3.10.0-327.el7
+%define kernel_version		3.10.0-327.el7
 %define kmod_kbuild_dir		drivers/net/ethernet/broadcom/bnx2x
-%define kmod_firmware_version	7.10.51
+%define kmod_firmware_version	7.13.1
 
 %{!?dist: %define dist .el7}
 
@@ -118,5 +118,6 @@ fi
 rm -rf $RPM_BUILD_ROOT
 
 %changelog
-* Mon Nov 24 2014 Weiping Pan <panweiping3@gmail.com> 1.710.51 3
+* Wed Jul 13 2016 Petr Oros <poros@redhat.com> 1.712.30 1
 - bnx2x DUP module
+- Resolves: #1347013