|
@@ -64,6 +64,14 @@ enum {
|
|
|
#define GUID_TBL_BLK_NUM_ENTRIES 8
|
|
|
#define GUID_TBL_BLK_SIZE (GUID_TBL_ENTRY_SIZE * GUID_TBL_BLK_NUM_ENTRIES)
|
|
|
|
|
|
+/* Counters should be saturate once they reach their maximum value */
|
|
|
+#define ASSIGN_32BIT_COUNTER(counter, value) do {\
|
|
|
+ if ((value) > U32_MAX) \
|
|
|
+ counter = cpu_to_be32(U32_MAX); \
|
|
|
+ else \
|
|
|
+ counter = cpu_to_be32(value); \
|
|
|
+} while (0)
|
|
|
+
|
|
|
struct mlx4_mad_rcv_buf {
|
|
|
struct ib_grh grh;
|
|
|
u8 payload[256];
|
|
@@ -806,10 +814,14 @@ static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
|
|
|
static void edit_counter(struct mlx4_counter *cnt,
|
|
|
struct ib_pma_portcounters *pma_cnt)
|
|
|
{
|
|
|
- pma_cnt->port_xmit_data = cpu_to_be32((be64_to_cpu(cnt->tx_bytes)>>2));
|
|
|
- pma_cnt->port_rcv_data = cpu_to_be32((be64_to_cpu(cnt->rx_bytes)>>2));
|
|
|
- pma_cnt->port_xmit_packets = cpu_to_be32(be64_to_cpu(cnt->tx_frames));
|
|
|
- pma_cnt->port_rcv_packets = cpu_to_be32(be64_to_cpu(cnt->rx_frames));
|
|
|
+ ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_data,
|
|
|
+ (be64_to_cpu(cnt->tx_bytes) >> 2));
|
|
|
+ ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_data,
|
|
|
+ (be64_to_cpu(cnt->rx_bytes) >> 2));
|
|
|
+ ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_packets,
|
|
|
+ be64_to_cpu(cnt->tx_frames));
|
|
|
+ ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_packets,
|
|
|
+ be64_to_cpu(cnt->rx_frames));
|
|
|
}
|
|
|
|
|
|
static int iboe_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
|