Ayyappan Veeraiyan wrote:
+#define IXGBE_TX_FLAGS_CSUM 0x00000001 +#define IXGBE_TX_FLAGS_VLAN 0x00000002 +#define IXGBE_TX_FLAGS_TSO 0x00000004 +#define IXGBE_TX_FLAGS_IPV4 0x00000008 +#define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000 +#define IXGBE_TX_FLAGS_VLAN_SHIFT 16
defining bits using the form "(1 << n)" is preferred. Makes it easier to read, by eliminating the requirement of the human brain to decode hex into bit numbers.
+ union { + /* To protect race between sender and clean_tx_irq */ + spinlock_t tx_lock; + struct net_device netdev; + };
Embedded a struct net_device into your ring? How can I put this? Wrong, wrong. Wrong, wrong, wrong. Wrong.
+ struct ixgbe_queue_stats stats; + + u32 eims_value; + u32 itr_val; + u16 itr_range; + u16 itr_register; + + char name[IFNAMSIZ + 5];
The interface name should not be stored by your ring structure
+#define IXGBE_DESC_UNUSED(R) \ + ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \ + (R)->next_to_clean - (R)->next_to_use - 1) + +#define IXGBE_RX_DESC_ADV(R, i) \ + (&(((union ixgbe_adv_rx_desc *)((R).desc))[i])) +#define IXGBE_TX_DESC_ADV(R, i) \ + (&(((union ixgbe_adv_tx_desc *)((R).desc))[i])) +#define IXGBE_TX_CTXTDESC_ADV(R, i) \ + (&(((struct ixgbe_adv_tx_context_desc *)((R).desc))[i])) + +#define IXGBE_MAX_JUMBO_FRAME_SIZE 16128 + +/* board specific private data structure */ +struct ixgbe_adapter { + struct timer_list watchdog_timer; + struct vlan_group *vlgrp; + u16 bd_number; + u16 rx_buf_len; + u32 part_num; + u32 link_speed; + unsigned long io_base;
Kill io_base and stop setting netdev->base_addr
+ atomic_t irq_sem; + struct work_struct reset_task; + + /* TX */ + struct ixgbe_ring *tx_ring; /* One per active queue */ + u64 restart_queue; + u64 lsc_int; + u32 txd_cmd; + u64 hw_tso_ctxt; + u64 hw_tso6_ctxt; + u32 tx_timeout_count; + boolean_t detect_tx_hung; + + /* RX */ + struct ixgbe_ring *rx_ring; /* One per active queue */ + u64 hw_csum_tx_good; + u64 hw_csum_rx_error; + u64 hw_csum_rx_good; + u64 non_eop_descs; + int num_tx_queues; + int num_rx_queues; + struct msix_entry *msix_entries; + + u64 rx_hdr_split; + u32 alloc_rx_page_failed; + u32 alloc_rx_buff_failed; + struct { + unsigned int rx_csum_enabled :1; + unsigned int msi_capable :1; + unsigned int msi_enabled :1; + unsigned int msix_capable :1; + unsigned int msix_enabled :1; + unsigned int imir_enabled :1; + unsigned int in_netpoll :1; + } flags;
always avoid bitfields. They generate horrible code, and endian problems abound (though no endian problems are apparent here).
+ u32 max_frame_size; /* Maximum frame size supported */ + u32 eitr; /* Interrupt Throttle Rate */ + + /* OS defined structs */ + struct net_device *netdev; + struct pci_dev *pdev; + struct net_device_stats net_stats; + + /* structs defined in ixgbe_hw.h */ + struct ixgbe_hw hw; + u16 msg_enable; + struct ixgbe_hw_stats stats; + char lsc_name[IFNAMSIZ + 5];
delete lsc_name and use netdev name directly in request_irq() Will review more after you fix these problems. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html