From owner-svn-src-projects@FreeBSD.ORG Mon Oct 4 15:48:03 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81137106566B; Mon, 4 Oct 2010 15:48:03 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 70C6E8FC16; Mon, 4 Oct 2010 15:48:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o94Fm3NT018844; Mon, 4 Oct 2010 15:48:03 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o94Fm3EM018842; Mon, 4 Oct 2010 15:48:03 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010041548.o94Fm3EM018842@svn.freebsd.org> From: Attilio Rao Date: Mon, 4 Oct 2010 15:48:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213405 - projects/sv/usr.sbin/netdumpsrv X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Oct 2010 15:48:03 -0000 Author: attilio Date: Mon Oct 4 15:48:03 2010 New Revision: 213405 URL: http://svn.freebsd.org/changeset/base/213405 Log: Increase the timeout value to 10 mins. Reported by: pluknet Modified: projects/sv/usr.sbin/netdumpsrv/netdumpsrv.c Modified: projects/sv/usr.sbin/netdumpsrv/netdumpsrv.c ============================================================================== --- projects/sv/usr.sbin/netdumpsrv/netdumpsrv.c Mon Oct 4 15:39:53 2010 (r213404) +++ projects/sv/usr.sbin/netdumpsrv/netdumpsrv.c Mon Oct 4 15:48:03 2010 (r213405) @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); #include #define MAX_DUMPS 256 /* Dumps per IP before to be cleaned out. */ -#define CLIENT_TIMEOUT 120 /* Clients timeout (secs). */ +#define CLIENT_TIMEOUT 600 /* Clients timeout (secs). */ #define CLIENT_TPASS 10 /* Clients timeout pass (secs). */ #define PFLAGS_ABIND 0x01 @@ -370,9 +370,14 @@ timeout_clients(void) last_timeout_check = now; /* Traverse the list looking for stale clients. */ - SLIST_FOREACH_SAFE(client, &clients, iter, tmp) - if (client->last_msg + CLIENT_TIMEOUT < now) + SLIST_FOREACH_SAFE(client, &clients, iter, tmp) { + if (client->last_msg + CLIENT_TIMEOUT < now) { + LOGINFO("Timingout with such values: %jd + %jd < %jd\n", + (intmax_t)client->last_msg, + (intmax_t)CLIENT_TIMEOUT, (intmax_t)now); handle_timeout(client); + } + } } static void From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 07:18:28 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1B868106567A; Tue, 5 Oct 2010 07:18:28 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E36358FC08; Tue, 5 Oct 2010 07:18:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o957IRZL044190; Tue, 5 Oct 2010 07:18:27 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o957IRK8044185; Tue, 5 Oct 2010 07:18:27 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201010050718.o957IRK8044185@svn.freebsd.org> From: Jeff Roberson Date: Tue, 5 Oct 2010 07:18:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213444 - in projects/ofed/head/sys: net ofed/include/linux X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 07:18:28 -0000 Author: jeff Date: Tue Oct 5 07:18:27 2010 New Revision: 213444 URL: http://svn.freebsd.org/changeset/base/213444 Log: - Add interface and arp header types for infiniband. - Increase the size of the lla address to 20 bytes for ib. Possibly this should be ifdef'd to prevent bloat on non-ib platforms. Sponsored by: Isilon Systems, iX Systems, and Panasas Modified: projects/ofed/head/sys/net/if_arp.h projects/ofed/head/sys/net/if_llatbl.h projects/ofed/head/sys/net/if_types.h projects/ofed/head/sys/ofed/include/linux/if_arp.h Modified: projects/ofed/head/sys/net/if_arp.h ============================================================================== --- projects/ofed/head/sys/net/if_arp.h Tue Oct 5 06:44:47 2010 (r213443) +++ projects/ofed/head/sys/net/if_arp.h Tue Oct 5 07:18:27 2010 (r213444) @@ -50,6 +50,7 @@ struct arphdr { #define ARPHRD_ARCNET 7 /* arcnet hardware format */ #define ARPHRD_FRELAY 15 /* frame relay hardware format */ #define ARPHRD_IEEE1394 24 /* firewire hardware format */ +#define ARPHRD_INFINIBAND 32 /* infiniband hardware format */ u_short ar_pro; /* format of protocol address */ u_char ar_hln; /* length of hardware address */ u_char ar_pln; /* length of protocol address */ Modified: projects/ofed/head/sys/net/if_llatbl.h ============================================================================== --- projects/ofed/head/sys/net/if_llatbl.h Tue Oct 5 06:44:47 2010 (r213443) +++ projects/ofed/head/sys/net/if_llatbl.h Tue Oct 5 07:18:27 2010 (r213444) @@ -71,6 +71,7 @@ struct llentry { union { uint64_t mac_aligned; uint16_t mac16[3]; + uint8_t mac8[20]; /* IB needs 20 bytes. */ } ll_addr; /* XXX af-private? */ Modified: projects/ofed/head/sys/net/if_types.h ============================================================================== --- projects/ofed/head/sys/net/if_types.h Tue Oct 5 06:44:47 2010 (r213443) +++ projects/ofed/head/sys/net/if_types.h Tue Oct 5 07:18:27 2010 (r213444) @@ -238,6 +238,7 @@ #define IFT_ATMVCIENDPT 0xc2 /* ATM VCI End Point */ #define IFT_OPTICALCHANNEL 0xc3 /* Optical Channel */ #define IFT_OPTICALTRANSPORT 0xc4 /* Optical Transport */ +#define IFT_INFINIBAND 0xc7 /* Infiniband */ #define IFT_BRIDGE 0xd1 /* Transparent bridge interface */ #define IFT_STF 0xd7 /* 6to4 interface */ Modified: projects/ofed/head/sys/ofed/include/linux/if_arp.h ============================================================================== --- projects/ofed/head/sys/ofed/include/linux/if_arp.h Tue Oct 5 06:44:47 2010 (r213443) +++ projects/ofed/head/sys/ofed/include/linux/if_arp.h Tue Oct 5 07:18:27 2010 (r213444) @@ -29,5 +29,4 @@ #define _LINUX_IF_ARP_H_ #include #include -#define ARPHRD_INFINIBAND 32 #endif /* _LINUX_IF_ARP_H_ */ From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 07:19:02 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 39A1B106566C; Tue, 5 Oct 2010 07:19:02 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 282518FC14; Tue, 5 Oct 2010 07:19:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o957J2VX044238; Tue, 5 Oct 2010 07:19:02 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o957J27A044236; Tue, 5 Oct 2010 07:19:02 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201010050719.o957J27A044236@svn.freebsd.org> From: Jeff Roberson Date: Tue, 5 Oct 2010 07:19:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213445 - projects/ofed/head/sys/conf X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 07:19:02 -0000 Author: jeff Date: Tue Oct 5 07:19:01 2010 New Revision: 213445 URL: http://svn.freebsd.org/changeset/base/213445 Log: - Add config file entries for ipoib, with some entries disabled for now. Sponsored by: Isilon Systems, iX Systems, and Panasas Modified: projects/ofed/head/sys/conf/files Modified: projects/ofed/head/sys/conf/files ============================================================================== --- projects/ofed/head/sys/conf/files Tue Oct 5 07:18:27 2010 (r213444) +++ projects/ofed/head/sys/conf/files Tue Oct 5 07:19:01 2010 (r213445) @@ -2746,6 +2746,28 @@ ofed/drivers/infiniband/core/verbs.c op no-depend \ compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/core/" +#ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c optional ipoib \ +# no-depend \ +# compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +#ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c optional ipoib \ +# no-depend \ +# compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c optional ipoib \ + no-depend \ + compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c optional ipoib \ + no-depend \ + compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c optional ipoib \ + no-depend \ + compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c optional ipoib \ + no-depend \ + compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" +#ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c optional ipoib \ +# no-depend \ +# compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/ipoib/" + ofed/drivers/infiniband/hw/mlx4/ah.c optional mlx4 \ no-depend obj-prefix "mlx4ib_" \ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/" From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 07:19:37 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 78CDC106566C; Tue, 5 Oct 2010 07:19:37 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 678378FC14; Tue, 5 Oct 2010 07:19:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o957JbSd044297; Tue, 5 Oct 2010 07:19:37 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o957Jbtr044295; Tue, 5 Oct 2010 07:19:37 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201010050719.o957Jbtr044295@svn.freebsd.org> From: Jeff Roberson Date: Tue, 5 Oct 2010 07:19:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213446 - projects/ofed/head/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 07:19:37 -0000 Author: jeff Date: Tue Oct 5 07:19:37 2010 New Revision: 213446 URL: http://svn.freebsd.org/changeset/base/213446 Log: - Support IB arp headers in the generic arp code. Sponsored by: Isilon Systems, iX Systems, and Panasas Modified: projects/ofed/head/sys/netinet/if_ether.c Modified: projects/ofed/head/sys/netinet/if_ether.c ============================================================================== --- projects/ofed/head/sys/netinet/if_ether.c Tue Oct 5 07:19:01 2010 (r213445) +++ projects/ofed/head/sys/netinet/if_ether.c Tue Oct 5 07:19:37 2010 (r213446) @@ -423,7 +423,8 @@ arpintr(struct mbuf *m) if (ntohs(ar->ar_hrd) != ARPHRD_ETHER && ntohs(ar->ar_hrd) != ARPHRD_IEEE802 && ntohs(ar->ar_hrd) != ARPHRD_ARCNET && - ntohs(ar->ar_hrd) != ARPHRD_IEEE1394) { + ntohs(ar->ar_hrd) != ARPHRD_IEEE1394 && + ntohs(ar->ar_hrd) != ARPHRD_INFINIBAND) { log(LOG_ERR, "arp: unknown hardware address format (0x%2D)\n", (unsigned char *)&ar->ar_hrd, ""); m_freem(m); From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 07:21:15 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3F8FF1065675; Tue, 5 Oct 2010 07:21:15 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2CC6F8FC2A; Tue, 5 Oct 2010 07:21:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o957LFvj044391; Tue, 5 Oct 2010 07:21:15 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o957LFko044387; Tue, 5 Oct 2010 07:21:15 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201010050721.o957LFko044387@svn.freebsd.org> From: Jeff Roberson Date: Tue, 5 Oct 2010 07:21:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213447 - projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 07:21:15 -0000 Author: jeff Date: Tue Oct 5 07:21:14 2010 New Revision: 213447 URL: http://svn.freebsd.org/changeset/base/213447 Log: - Checkpoint initial ipoib porting. ARP and IP work. Multicast, RC, and vlan support currently disabled. Sponsored by: Isilon Systems, iX Systems, and Panasas Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h Tue Oct 5 07:19:37 2010 (r213446) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h Tue Oct 5 07:21:14 2010 (r213447) @@ -35,25 +35,65 @@ #ifndef _IPOIB_H #define _IPOIB_H +#include "opt_inet.h" +#include "opt_inet6.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(INET) || defined(INET6) +#include +#include +#include +#include +#include +#include +#endif +#ifdef INET6 +#include +#endif + +#include + #include -#include -#include + #include #include -#include #include -#include - #include #include #include #include -#include /* constants */ +#define INFINIBAND_ALEN 20 /* Octets in IPoIB HW addr */ +#define MAX_MB_FRAGS (8192 / MCLBYTES) + +#define CONFIG_INFINIBAND_IPOIB_DEBUG + enum ipoib_flush_level { IPOIB_FLUSH_LIGHT, IPOIB_FLUSH_NORMAL, @@ -62,7 +102,7 @@ enum ipoib_flush_level { enum { IPOIB_ENCAP_LEN = 4, - + IPOIB_HEADER_LEN = IPOIB_ENCAP_LEN + INFINIBAND_ALEN, IPOIB_UD_HEAD_SIZE = IB_GRH_BYTES + IPOIB_ENCAP_LEN, IPOIB_UD_RX_SG = 2, /* max buffer needed for 4K mtu */ @@ -117,6 +157,7 @@ enum { /* structs */ struct ipoib_header { + u8 hwaddr[INFINIBAND_ALEN]; __be16 proto; u16 reserved; }; @@ -140,25 +181,23 @@ struct ipoib_mcast { unsigned long flags; unsigned char logcount; - struct list_head neigh_list; - - struct sk_buff_head pkt_queue; + struct ifqueue pkt_queue; - struct net_device *dev; + struct ifnet *dev; }; struct ipoib_rx_buf { - struct sk_buff *skb; + struct mbuf *mb; u64 mapping[IPOIB_UD_RX_SG]; }; struct ipoib_tx_buf { - struct sk_buff *skb; - u64 mapping[MAX_SKB_FRAGS + 1]; + struct mbuf *mb; + u64 mapping[MAX_MB_FRAGS]; }; struct ipoib_cm_tx_buf { - struct sk_buff *skb; + struct mbuf *mb; u64 mapping; }; @@ -207,7 +246,7 @@ struct ipoib_cm_rx { struct ib_qp *qp; struct ipoib_cm_rx_buf *rx_ring; struct list_head list; - struct net_device *dev; + struct ifnet *dev; unsigned long jiffies; enum ipoib_cm_state state; int recv_count; @@ -217,8 +256,7 @@ struct ipoib_cm_tx { struct ib_cm_id *id; struct ib_qp *qp; struct list_head list; - struct net_device *dev; - struct ipoib_neigh *neigh; + struct ifnet *dev; struct ipoib_path *path; struct ipoib_cm_tx_buf *tx_ring; unsigned tx_head; @@ -228,7 +266,7 @@ struct ipoib_cm_tx { }; struct ipoib_cm_rx_buf { - struct sk_buff *skb; + struct mbuf *mb; u64 mapping[IPOIB_CM_RX_SG]; }; @@ -243,10 +281,10 @@ struct ipoib_cm_dev_priv { struct list_head rx_reap_list; /* state: FLUSH, drain done */ struct work_struct start_task; struct work_struct reap_task; - struct work_struct skb_task; + struct work_struct mb_task; struct work_struct rx_reap_task; struct delayed_work stale_task; - struct sk_buff_head skb_queue; + struct ifqueue mb_queue; struct list_head start_list; struct list_head reap_list; struct ib_wc ibwc[IPOIB_NUM_WC]; @@ -262,11 +300,6 @@ struct ipoib_ethtool_st { u16 max_coalesced_frames; }; -struct ipoib_lro { - struct net_lro_mgr lro_mgr; - struct net_lro_desc lro_desc[IPOIB_MAX_LRO_DESCRIPTORS]; -}; - /* * Device private locking: network stack tx_lock protects members used * in TX fast path, lock protects everything else. lock nests inside @@ -275,9 +308,9 @@ struct ipoib_lro { struct ipoib_dev_priv { spinlock_t lock; - struct net_device *dev; + struct ifnet *dev; - struct napi_struct napi; + u8 broadcastaddr[INFINIBAND_ALEN]; unsigned long flags; @@ -322,7 +355,7 @@ struct ipoib_dev_priv { struct ipoib_tx_buf *tx_ring; unsigned tx_head; unsigned tx_tail; - struct ib_sge tx_sge[MAX_SKB_FRAGS + 1]; + struct ib_sge tx_sge[MAX_MB_FRAGS]; struct ib_send_wr tx_wr; unsigned tx_outstanding; struct ib_wc send_wc[MAX_SEND_CQE]; @@ -336,7 +369,7 @@ struct ipoib_dev_priv { struct ib_event_handler event_handler; - struct net_device *parent; + struct ifnet *parent; struct list_head child_intfs; struct list_head list; @@ -352,12 +385,10 @@ struct ipoib_dev_priv { int hca_caps; struct ipoib_ethtool_st ethtool; struct timer_list poll_timer; - - struct ipoib_lro lro; }; struct ipoib_ah { - struct net_device *dev; + struct ifnet *dev; struct ib_ah *ah; struct list_head list; struct kref ref; @@ -365,69 +396,36 @@ struct ipoib_ah { }; struct ipoib_path { - struct net_device *dev; - struct ib_sa_path_rec pathrec; + struct ifnet *dev; + struct rb_node rb_node; + struct list_head list; +#ifdef CONFIG_INFINIBAND_IPOIB_CM + struct ipoib_cm_tx *cm; +#endif struct ipoib_ah *ah; - struct sk_buff_head queue; - - struct list_head neigh_list; + struct ib_sa_path_rec pathrec; + struct ifqueue queue; int query_id; struct ib_sa_query *query; struct completion done; - struct rb_node rb_node; - struct list_head list; int valid; }; -struct ipoib_neigh { - struct ipoib_ah *ah; -#ifdef CONFIG_INFINIBAND_IPOIB_CM - struct ipoib_cm_tx *cm; -#endif - union ib_gid dgid; - struct sk_buff_head queue; - - struct neighbour *neighbour; - struct net_device *dev; - - struct list_head list; -}; - #define IPOIB_UD_MTU(ib_mtu) (ib_mtu - IPOIB_ENCAP_LEN) #define IPOIB_UD_BUF_SIZE(ib_mtu) (ib_mtu + IB_GRH_BYTES) -static inline int ipoib_ud_need_sg(unsigned int ib_mtu) -{ - return IPOIB_UD_BUF_SIZE(ib_mtu) > PAGE_SIZE; -} - -/* - * We stash a pointer to our private neighbour information after our - * hardware address in neigh->ha. The ALIGN() expression here makes - * sure that this pointer is stored aligned so that an unaligned - * load is not needed to dereference it. - */ -static inline struct ipoib_neigh **to_ipoib_neigh(struct neighbour *neigh) -{ - return (void*) neigh + ALIGN(offsetof(struct neighbour, ha) + - INFINIBAND_ALEN, sizeof(void *)); -} - -struct ipoib_neigh *ipoib_neigh_alloc(struct neighbour *neigh, - struct net_device *dev); -void ipoib_neigh_free(struct net_device *dev, struct ipoib_neigh *neigh); +#define IPOIB_IS_MULTICAST(addr) ((addr)[4] == 0xff) extern struct workqueue_struct *ipoib_workqueue; /* functions */ -int ipoib_poll(struct napi_struct *napi, int budget); void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr); void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr); -struct ipoib_ah *ipoib_create_ah(struct net_device *dev, +struct ipoib_ah *ipoib_create_ah(struct ifnet *dev, struct ib_pd *pd, struct ib_ah_attr *attr); void ipoib_free_ah(struct kref *kref); static inline void ipoib_put_ah(struct ipoib_ah *ah) @@ -435,46 +433,46 @@ static inline void ipoib_put_ah(struct i kref_put(&ah->ref, ipoib_free_ah); } -int ipoib_open(struct net_device *dev); -int ipoib_add_pkey_attr(struct net_device *dev); -int ipoib_add_umcast_attr(struct net_device *dev); +int ipoib_open(struct ifnet *dev); +int ipoib_add_pkey_attr(struct ifnet *dev); +int ipoib_add_umcast_attr(struct ifnet *dev); -void ipoib_send(struct net_device *dev, struct sk_buff *skb, +void ipoib_send(struct ifnet *dev, struct mbuf *mb, struct ipoib_ah *address, u32 qpn); void ipoib_reap_ah(struct work_struct *work); -void ipoib_mark_paths_invalid(struct net_device *dev); -void ipoib_flush_paths(struct net_device *dev); +void ipoib_mark_paths_invalid(struct ifnet *dev); +void ipoib_flush_paths(struct ifnet *dev); struct ipoib_dev_priv *ipoib_intf_alloc(const char *format); -int ipoib_ib_dev_init(struct net_device *dev, struct ib_device *ca, int port); +int ipoib_ib_dev_init(struct ifnet *dev, struct ib_device *ca, int port); void ipoib_ib_dev_flush_light(struct work_struct *work); void ipoib_ib_dev_flush_normal(struct work_struct *work); void ipoib_ib_dev_flush_heavy(struct work_struct *work); void ipoib_pkey_event(struct work_struct *work); -void ipoib_ib_dev_cleanup(struct net_device *dev); +void ipoib_ib_dev_cleanup(struct ifnet *dev); -int ipoib_ib_dev_open(struct net_device *dev); -int ipoib_ib_dev_up(struct net_device *dev); -int ipoib_ib_dev_down(struct net_device *dev, int flush); -int ipoib_ib_dev_stop(struct net_device *dev, int flush); +int ipoib_ib_dev_open(struct ifnet *dev); +int ipoib_ib_dev_up(struct ifnet *dev); +int ipoib_ib_dev_down(struct ifnet *dev, int flush); +int ipoib_ib_dev_stop(struct ifnet *dev, int flush); -int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port); -void ipoib_dev_cleanup(struct net_device *dev); +int ipoib_dev_init(struct ifnet *dev, struct ib_device *ca, int port); +void ipoib_dev_cleanup(struct ifnet *dev); void ipoib_mcast_join_task(struct work_struct *work); void ipoib_mcast_carrier_on_task(struct work_struct *work); -void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb); +void ipoib_mcast_send(struct ifnet *dev, void *mgid, struct mbuf *mb); void ipoib_mcast_restart_task(struct work_struct *work); -int ipoib_mcast_start_thread(struct net_device *dev); -int ipoib_mcast_stop_thread(struct net_device *dev, int flush); +int ipoib_mcast_start_thread(struct ifnet *dev); +int ipoib_mcast_stop_thread(struct ifnet *dev, int flush); -void ipoib_mcast_dev_down(struct net_device *dev); -void ipoib_mcast_dev_flush(struct net_device *dev); +void ipoib_mcast_dev_down(struct ifnet *dev); +void ipoib_mcast_dev_flush(struct ifnet *dev); #ifdef CONFIG_INFINIBAND_IPOIB_DEBUG -struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev); +struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct ifnet *dev); int ipoib_mcast_iter_next(struct ipoib_mcast_iter *iter); void ipoib_mcast_iter_read(struct ipoib_mcast_iter *iter, union ib_gid *gid, @@ -483,30 +481,30 @@ void ipoib_mcast_iter_read(struct ipoib_ unsigned int *complete, unsigned int *send_only); -struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev); +struct ipoib_path_iter *ipoib_path_iter_init(struct ifnet *dev); int ipoib_path_iter_next(struct ipoib_path_iter *iter); void ipoib_path_iter_read(struct ipoib_path_iter *iter, struct ipoib_path *path); #endif -int ipoib_mcast_attach(struct net_device *dev, u16 mlid, +int ipoib_mcast_attach(struct ifnet *dev, u16 mlid, union ib_gid *mgid, int set_qkey); -int ipoib_init_qp(struct net_device *dev); -int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca); -void ipoib_transport_dev_cleanup(struct net_device *dev); +int ipoib_init_qp(struct ifnet *dev); +int ipoib_transport_dev_init(struct ifnet *dev, struct ib_device *ca); +void ipoib_transport_dev_cleanup(struct ifnet *dev); void ipoib_event(struct ib_event_handler *handler, struct ib_event *record); -int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey); -int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey); +int ipoib_vlan_add(struct ifnet *pdev, unsigned short pkey); +int ipoib_vlan_delete(struct ifnet *pdev, unsigned short pkey); void ipoib_pkey_poll(struct work_struct *work); -int ipoib_pkey_dev_delay_open(struct net_device *dev); -void ipoib_drain_cq(struct net_device *dev); +int ipoib_pkey_dev_delay_open(struct ifnet *dev); +void ipoib_drain_cq(struct ifnet *dev); -void ipoib_set_ethtool_ops(struct net_device *dev); +void ipoib_set_ethtool_ops(struct ifnet *dev); int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca); #ifdef CONFIG_INFINIBAND_IPOIB_CM @@ -519,135 +517,133 @@ int ipoib_set_dev_features(struct ipoib_ extern int ipoib_max_conn_qp; -static inline int ipoib_cm_admin_enabled(struct net_device *dev) +static inline int ipoib_cm_admin_enabled(struct ifnet *dev) { - struct ipoib_dev_priv *priv = netdev_priv(dev); - return IPOIB_CM_SUPPORTED(dev->dev_addr) && + struct ipoib_dev_priv *priv = dev->if_softc; + return IPOIB_CM_SUPPORTED(IF_LLADDR(dev)) && test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags); } -static inline int ipoib_cm_enabled(struct net_device *dev, struct neighbour *n) +static inline int ipoib_cm_enabled(struct ifnet *dev, struct llentry *n) { - struct ipoib_dev_priv *priv = netdev_priv(dev); - return IPOIB_CM_SUPPORTED(n->ha) && + struct ipoib_dev_priv *priv = dev->if_softc; + return IPOIB_CM_SUPPORTED(rt_key(n)->sa_data) && test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags); } -static inline int ipoib_cm_up(struct ipoib_neigh *neigh) +static inline int ipoib_cm_up(struct ipoib_path *path) { - return test_bit(IPOIB_FLAG_OPER_UP, &neigh->cm->flags); + return test_bit(IPOIB_FLAG_OPER_UP, &path->cm->flags); } -static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh) +static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_path *path) { - return neigh->cm; + return path->cm; } -static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx) +static inline void ipoib_cm_set(struct ipoib_path *path, struct ipoib_cm_tx *tx) { - neigh->cm = tx; + path->cm = tx; } -static inline int ipoib_cm_has_srq(struct net_device *dev) +static inline int ipoib_cm_has_srq(struct ifnet *dev) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; return !!priv->cm.srq; } -static inline unsigned int ipoib_cm_max_mtu(struct net_device *dev) +static inline unsigned int ipoib_cm_max_mtu(struct ifnet *dev) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; return priv->cm.max_cm_mtu; } -void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx); -int ipoib_cm_dev_open(struct net_device *dev); -void ipoib_cm_dev_stop(struct net_device *dev); -int ipoib_cm_dev_init(struct net_device *dev); -int ipoib_cm_add_mode_attr(struct net_device *dev); -void ipoib_cm_dev_cleanup(struct net_device *dev); -struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path, - struct ipoib_neigh *neigh); +void ipoib_cm_send(struct ifnet *dev, struct mbuf *mb, struct ipoib_cm_tx *tx); +int ipoib_cm_dev_open(struct ifnet *dev); +void ipoib_cm_dev_stop(struct ifnet *dev); +int ipoib_cm_dev_init(struct ifnet *dev); +int ipoib_cm_add_mode_attr(struct ifnet *dev); +void ipoib_cm_dev_cleanup(struct ifnet *dev); +struct ipoib_cm_tx *ipoib_cm_create_tx(struct ifnet *dev, struct ipoib_path *path); void ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx); -void ipoib_cm_skb_too_long(struct net_device *dev, struct sk_buff *skb, +void ipoib_cm_mb_too_long(struct ifnet *dev, struct mbuf *mb, unsigned int mtu); -void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc); -void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc); +void ipoib_cm_handle_rx_wc(struct ifnet *dev, struct ib_wc *wc); +void ipoib_cm_handle_tx_wc(struct ifnet *dev, struct ib_wc *wc); #else struct ipoib_cm_tx; #define ipoib_max_conn_qp 0 -static inline int ipoib_cm_admin_enabled(struct net_device *dev) +static inline int ipoib_cm_admin_enabled(struct ifnet *dev) { return 0; } -static inline int ipoib_cm_enabled(struct net_device *dev, struct neighbour *n) +static inline int ipoib_cm_enabled(struct ifnet *dev, struct llentry *n) { return 0; } -static inline int ipoib_cm_up(struct ipoib_neigh *neigh) +static inline int ipoib_cm_up(struct ipoib_path *path) { return 0; } -static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh) +static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_path *path) { return NULL; } -static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx) +static inline void ipoib_cm_set(struct ipoib_path *path, struct ipoib_cm_tx *tx) { } -static inline int ipoib_cm_has_srq(struct net_device *dev) +static inline int ipoib_cm_has_srq(struct ifnet *dev) { return 0; } -static inline unsigned int ipoib_cm_max_mtu(struct net_device *dev) +static inline unsigned int ipoib_cm_max_mtu(struct ifnet *dev) { return 0; } static inline -void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx) +void ipoib_cm_send(struct ifnet *dev, struct mbuf *mb, struct ipoib_cm_tx *tx) { return; } static inline -int ipoib_cm_dev_open(struct net_device *dev) +int ipoib_cm_dev_open(struct ifnet *dev) { return 0; } static inline -void ipoib_cm_dev_stop(struct net_device *dev) +void ipoib_cm_dev_stop(struct ifnet *dev) { return; } static inline -int ipoib_cm_dev_init(struct net_device *dev) +int ipoib_cm_dev_init(struct ifnet *dev) { return -ENOSYS; } static inline -void ipoib_cm_dev_cleanup(struct net_device *dev) +void ipoib_cm_dev_cleanup(struct ifnet *dev) { return; } static inline -struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path, - struct ipoib_neigh *neigh) +struct ipoib_cm_tx *ipoib_cm_create_tx(struct ifnet *dev, struct ipoib_path *path) { return NULL; } @@ -659,40 +655,40 @@ void ipoib_cm_destroy_tx(struct ipoib_cm } static inline -int ipoib_cm_add_mode_attr(struct net_device *dev) +int ipoib_cm_add_mode_attr(struct ifnet *dev) { return 0; } -static inline void ipoib_cm_skb_too_long(struct net_device *dev, struct sk_buff *skb, +static inline void ipoib_cm_mb_too_long(struct ifnet *dev, struct mbuf *mb, unsigned int mtu) { - dev_kfree_skb_any(skb); + m_free(mb); } -static inline void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) +static inline void ipoib_cm_handle_rx_wc(struct ifnet *dev, struct ib_wc *wc) { } -static inline void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc) +static inline void ipoib_cm_handle_tx_wc(struct ifnet *dev, struct ib_wc *wc) { } #endif #ifdef CONFIG_INFINIBAND_IPOIB_DEBUG -void ipoib_create_debug_files(struct net_device *dev); -void ipoib_delete_debug_files(struct net_device *dev); +void ipoib_create_debug_files(struct ifnet *dev); +void ipoib_delete_debug_files(struct ifnet *dev); int ipoib_register_debugfs(void); void ipoib_unregister_debugfs(void); #else -static inline void ipoib_create_debug_files(struct net_device *dev) { } -static inline void ipoib_delete_debug_files(struct net_device *dev) { } +static inline void ipoib_create_debug_files(struct ifnet *dev) { } +static inline void ipoib_delete_debug_files(struct ifnet *dev) { } static inline int ipoib_register_debugfs(void) { return 0; } static inline void ipoib_unregister_debugfs(void) { } #endif #define ipoib_printk(level, priv, format, arg...) \ - printk(level "%s: " format, ((struct ipoib_dev_priv *) priv)->dev->name , ## arg) + printk(level "%s: " format, if_name(((struct ipoib_dev_priv *) priv)->dev), ## arg) #define ipoib_warn(priv, format, arg...) \ ipoib_printk(KERN_WARNING, priv, format , ## arg) @@ -734,4 +730,30 @@ extern int ipoib_debug_level; #define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff) +static inline long +test_and_clear_bit(long bit, long *var) +{ + long val; + + bit = 1 << bit; + do { + val = *(volatile long *)var; + } while (atomic_cmpset_long(var, val, val & ~bit) == 0); + + return !!(val & bit); +} + +static inline long +test_and_set_bit(long bit, long *var) +{ + long val; + + bit = 1 << bit; + do { + val = *(volatile long *)var; + } while (atomic_cmpset_long(var, val, val | bit) == 0); + + return !!(val & bit); +} + #endif /* _IPOIB_H */ Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c Tue Oct 5 07:19:37 2010 (r213446) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c Tue Oct 5 07:21:14 2010 (r213447) @@ -30,16 +30,13 @@ * SOFTWARE. */ +#include "ipoib.h" + #include #include -#include -#include -#include #include #include -#include "ipoib.h" - int ipoib_max_conn_qp = 128; module_param_named(max_nonsrq_conn_qp, ipoib_max_conn_qp, int, 0444); @@ -87,9 +84,9 @@ static void ipoib_cm_dma_unmap_rx(struct ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE); } -static int ipoib_cm_post_receive_srq(struct net_device *dev, int id) +static int ipoib_cm_post_receive_srq(struct ifnet *dev, int id) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ib_recv_wr *bad_wr; int i, ret; @@ -103,19 +100,19 @@ static int ipoib_cm_post_receive_srq(str ipoib_warn(priv, "post srq failed for buf %d (%d)\n", id, ret); ipoib_cm_dma_unmap_rx(priv, priv->cm.num_frags - 1, priv->cm.srq_ring[id].mapping); - dev_kfree_skb_any(priv->cm.srq_ring[id].skb); - priv->cm.srq_ring[id].skb = NULL; + m_free(priv->cm.srq_ring[id].mb); + priv->cm.srq_ring[id].mb = NULL; } return ret; } -static int ipoib_cm_post_receive_nonsrq(struct net_device *dev, +static int ipoib_cm_post_receive_nonsrq(struct ifnet *dev, struct ipoib_cm_rx *rx, struct ib_recv_wr *wr, struct ib_sge *sge, int id) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ib_recv_wr *bad_wr; int i, ret; @@ -129,36 +126,36 @@ static int ipoib_cm_post_receive_nonsrq( ipoib_warn(priv, "post recv failed for buf %d (%d)\n", id, ret); ipoib_cm_dma_unmap_rx(priv, IPOIB_CM_RX_SG - 1, rx->rx_ring[id].mapping); - dev_kfree_skb_any(rx->rx_ring[id].skb); - rx->rx_ring[id].skb = NULL; + m_free(rx->rx_ring[id].mb); + rx->rx_ring[id].mb = NULL; } return ret; } -static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev, +static struct mbuf *ipoib_cm_alloc_rx_mb(struct ifnet *dev, struct ipoib_cm_rx_buf *rx_ring, int id, int frags, u64 mapping[IPOIB_CM_RX_SG]) { - struct ipoib_dev_priv *priv = netdev_priv(dev); - struct sk_buff *skb; + struct ipoib_dev_priv *priv = dev->if_softc; + struct mbuf *mb; int i; - skb = dev_alloc_skb(IPOIB_CM_HEAD_SIZE + 12); - if (unlikely(!skb)) + mb = dev_alloc_mb(IPOIB_CM_HEAD_SIZE + 12); + if (unlikely(!mb)) return NULL; /* * IPoIB adds a 4 byte header. So we need 12 more bytes to align the * IP header to a multiple of 16. */ - skb_reserve(skb, 12); + mb_reserve(mb, 12); - mapping[0] = ib_dma_map_single(priv->ca, skb->data, IPOIB_CM_HEAD_SIZE, - DMA_FROM_DEVICE); + mapping[0] = ib_dma_map_single(priv->ca, mtod(mb, void *), + IPOIB_CM_HEAD_SIZE, DMA_FROM_DEVICE); if (unlikely(ib_dma_mapping_error(priv->ca, mapping[0]))) { - dev_kfree_skb_any(skb); + m_free(mb); return NULL; } @@ -167,16 +164,16 @@ static struct sk_buff *ipoib_cm_alloc_rx if (!page) goto partial_error; - skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE); + mb_fill_page_desc(mb, i, page, 0, PAGE_SIZE); - mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page, + mapping[i + 1] = ib_dma_map_page(priv->ca, mb_shinfo(mb)->frags[i].page, 0, PAGE_SIZE, DMA_FROM_DEVICE); if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1]))) goto partial_error; } - rx_ring[id].skb = skb; - return skb; + rx_ring[id].mb = mb; + return mb; partial_error: @@ -185,21 +182,21 @@ partial_error: for (; i > 0; --i) ib_dma_unmap_single(priv->ca, mapping[i], PAGE_SIZE, DMA_FROM_DEVICE); - dev_kfree_skb_any(skb); + m_free(mb); return NULL; } -static void ipoib_cm_free_rx_ring(struct net_device *dev, +static void ipoib_cm_free_rx_ring(struct ifnet *dev, struct ipoib_cm_rx_buf *rx_ring) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; int i; for (i = 0; i < ipoib_recvq_size; ++i) - if (rx_ring[i].skb) { + if (rx_ring[i].mb) { ipoib_cm_dma_unmap_rx(priv, IPOIB_CM_RX_SG - 1, rx_ring[i].mapping); - dev_kfree_skb_any(rx_ring[i].skb); + m_free(rx_ring[i].mb); } vfree(rx_ring); @@ -230,7 +227,7 @@ static void ipoib_cm_start_rx_drain(stru static void ipoib_cm_rx_event_handler(struct ib_event *event, void *ctx) { struct ipoib_cm_rx *p = ctx; - struct ipoib_dev_priv *priv = netdev_priv(p->dev); + struct ipoib_dev_priv *priv = p->dev->if_softc; unsigned long flags; if (event->event != IB_EVENT_QP_LAST_WQE_REACHED) @@ -243,10 +240,10 @@ static void ipoib_cm_rx_event_handler(st spin_unlock_irqrestore(&priv->lock, flags); } -static struct ib_qp *ipoib_cm_create_rx_qp(struct net_device *dev, +static struct ib_qp *ipoib_cm_create_rx_qp(struct ifnet *dev, struct ipoib_cm_rx *p) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ib_qp_init_attr attr = { .event_handler = ipoib_cm_rx_event_handler, .send_cq = priv->recv_cq, /* For drain WR */ @@ -267,11 +264,11 @@ static struct ib_qp *ipoib_cm_create_rx_ return ib_create_qp(priv->pd, &attr); } -static int ipoib_cm_modify_rx_qp(struct net_device *dev, +static int ipoib_cm_modify_rx_qp(struct ifnet *dev, struct ib_cm_id *cm_id, struct ib_qp *qp, unsigned psn) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ib_qp_attr qp_attr; int qp_attr_mask, ret; @@ -322,11 +319,11 @@ static int ipoib_cm_modify_rx_qp(struct return 0; } -static void ipoib_cm_init_rx_wr(struct net_device *dev, +static void ipoib_cm_init_rx_wr(struct ifnet *dev, struct ib_recv_wr *wr, struct ib_sge *sge) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; int i; for (i = 0; i < priv->cm.num_frags; ++i) @@ -341,10 +338,10 @@ static void ipoib_cm_init_rx_wr(struct n wr->num_sge = priv->cm.num_frags; } -static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_id, +static int ipoib_cm_nonsrq_init_rx(struct ifnet *dev, struct ib_cm_id *cm_id, struct ipoib_cm_rx *rx) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct { struct ib_recv_wr wr; struct ib_sge sge[IPOIB_CM_RX_SG]; @@ -382,7 +379,7 @@ static int ipoib_cm_nonsrq_init_rx(struc spin_unlock_irq(&priv->lock); for (i = 0; i < ipoib_recvq_size; ++i) { - if (!ipoib_cm_alloc_rx_skb(dev, rx->rx_ring, i, IPOIB_CM_RX_SG - 1, + if (!ipoib_cm_alloc_rx_mb(dev, rx->rx_ring, i, IPOIB_CM_RX_SG - 1, rx->rx_ring[i].mapping)) { ipoib_warn(priv, "failed to allocate receive buffer %d\n", i); ret = -ENOMEM; @@ -415,11 +412,11 @@ err_free: return ret; } -static int ipoib_cm_send_rep(struct net_device *dev, struct ib_cm_id *cm_id, +static int ipoib_cm_send_rep(struct ifnet *dev, struct ib_cm_id *cm_id, struct ib_qp *qp, struct ib_cm_req_event_param *req, unsigned psn) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ipoib_cm_data data = {}; struct ib_cm_rep_param rep = {}; @@ -438,8 +435,8 @@ static int ipoib_cm_send_rep(struct net_ static int ipoib_cm_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event) { - struct net_device *dev = cm_id->context; - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ifnet *dev = cm_id->context; + struct ipoib_dev_priv *priv = dev->if_softc; struct ipoib_cm_rx *p; unsigned psn; int ret; @@ -512,7 +509,7 @@ static int ipoib_cm_rx_handler(struct ib /* Fall through */ case IB_CM_REJ_RECEIVED: p = cm_id->context; - priv = netdev_priv(p->dev); + priv = p->dev->if_softc; if (ib_modify_qp(p->qp, &ipoib_cm_err_attr, IB_QP_STATE)) ipoib_warn(priv, "unable to move qp to error state\n"); /* Fall through */ @@ -520,51 +517,51 @@ static int ipoib_cm_rx_handler(struct ib return 0; } } -/* Adjust length of skb with fragments to match received data */ -static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space, - unsigned int length, struct sk_buff *toskb) +/* Adjust length of mb with fragments to match received data */ +static void mb_put_frags(struct mbuf *mb, unsigned int hdr_space, + unsigned int length, struct mbuf *tomb) { int i, num_frags; unsigned int size; - /* put header into skb */ + /* put header into mb */ size = min(length, hdr_space); - skb->tail += size; - skb->len += size; + mb->tail += size; + mb->len += size; length -= size; - num_frags = skb_shinfo(skb)->nr_frags; + num_frags = mb_shinfo(mb)->nr_frags; for (i = 0; i < num_frags; i++) { - skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; + mb_frag_t *frag = &mb_shinfo(mb)->frags[i]; if (length == 0) { /* don't need this page */ - skb_fill_page_desc(toskb, i, frag->page, 0, PAGE_SIZE); - --skb_shinfo(skb)->nr_frags; + mb_fill_page_desc(tomb, i, frag->page, 0, PAGE_SIZE); + --mb_shinfo(mb)->nr_frags; } else { size = min(length, (unsigned) PAGE_SIZE); frag->size = size; - skb->data_len += size; - skb->truesize += size; - skb->len += size; + mb->data_len += size; + mb->truesize += size; + mb->len += size; length -= size; } } } -void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) +void ipoib_cm_handle_rx_wc(struct ifnet *dev, struct ib_wc *wc) { - struct ipoib_dev_priv *priv = netdev_priv(dev); + struct ipoib_dev_priv *priv = dev->if_softc; struct ipoib_cm_rx_buf *rx_ring; unsigned int wr_id = wc->wr_id & ~(IPOIB_OP_CM | IPOIB_OP_RECV); - struct sk_buff *skb, *newskb; + struct mbuf *mb, *newmb; struct ipoib_cm_rx *p; unsigned long flags; u64 mapping[IPOIB_CM_RX_SG]; int frags; int has_srq; - struct sk_buff *small_skb; + struct mbuf *small_mb; ipoib_dbg_data(priv, "cm recv completion: id %d, status: %d\n", wr_id, wc->status); @@ -587,13 +584,13 @@ void ipoib_cm_handle_rx_wc(struct net_de has_srq = ipoib_cm_has_srq(dev); rx_ring = has_srq ? priv->cm.srq_ring : p->rx_ring; - skb = rx_ring[wr_id].skb; + mb = rx_ring[wr_id].mb; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 09:19:59 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7192C1065694; Tue, 5 Oct 2010 09:19:59 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5FF758FC26; Tue, 5 Oct 2010 09:19:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o959JxlI048145; Tue, 5 Oct 2010 09:19:59 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o959Jxl1048141; Tue, 5 Oct 2010 09:19:59 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <201010050919.o959Jxl1048141@svn.freebsd.org> From: Peter Holm Date: Tue, 5 Oct 2010 09:19:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213449 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 09:19:59 -0000 Author: pho Date: Tue Oct 5 09:19:59 2010 New Revision: 213449 URL: http://svn.freebsd.org/changeset/base/213449 Log: Added new SUJ test scenarios. Added: projects/stress2/misc/suj2.sh (contents, props changed) projects/stress2/misc/suj3.sh (contents, props changed) projects/stress2/misc/suj4.sh (contents, props changed) projects/stress2/misc/suj5.sh (contents, props changed) Added: projects/stress2/misc/suj2.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/suj2.sh Tue Oct 5 09:19:59 2010 (r213449) @@ -0,0 +1,81 @@ +#!/bin/sh + +# +# Copyright (c) 2010 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD: projects/stress2/misc/rename4.sh 199143 2009-11-10 16:51:15Z pho $ +# + +# Page fault on SUJ enabled FS +# Fix: http://docs.freebsd.org/cgi/mid.cgi?20100823211257.GI2396 + +# Tets scenario by Mateusz Guzik mjguzik gmail com + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +. ../default.cfg + +odir=`pwd` + +cd /tmp +sed '1,/^EOF/d' < $odir/$0 > rename5.c +cc -o rename5 -Wall -Wextra -O2 rename5.c +rm -f rename5.c + +mount | grep "$mntpoint" | grep -q /dev/md && umount -f $mntpoint +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart +mdconfig -a -t swap -s 1g -u $mdstart +bsdlabel -w md$mdstart auto +newfs -U md${mdstart}$part > /dev/null +tunefs -j enable /dev/md${mdstart}$part +mount /dev/md${mdstart}$part $mntpoint +cd $mntpoint + +rm -rf foo bar + +/tmp/rename5 + +cd / +while mount | grep "$mntpoint" | grep -q /dev/md; do + umount $mntpoint || sleep 1 +done +mdconfig -d -u $mdstart +rm -rf foo bar /tmp/rename5 +exit +EOF +#include +#include + +int +main(void) +{ + + mkdir("foo", 00700); + mkdir("bar", 00700); + + rename("foo", "bar"); + + return (0); +} Added: projects/stress2/misc/suj3.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/suj3.sh Tue Oct 5 09:19:59 2010 (r213449) @@ -0,0 +1,57 @@ +#!/bin/sh + +# +# Copyright (c) 2010 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD: projects/stress2/misc/suj.sh 210724 2010-08-01 10:33:03Z pho $ +# + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +# Sectorsize != 512 test + +. ../default.cfg + +mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart +mdconfig -a -t swap -s 1g -u $mdstart +bsdlabel -w md$mdstart auto +newfs -U -S 1024 md${mdstart}$part > /dev/null +tunefs -j enable /dev/md${mdstart}$part +mount /dev/md${mdstart}$part $mntpoint +chmod 777 $mntpoint + +export RUNDIR=$mntpoint/stressX +export runRUNTIME=20m +set `df -ik /mnt | tail -1 | awk '{print $4,$7}'` +export KBLOCKS=$(($1 / 2)) +export INODES=$(($2 / 2)) + +su $testuser -c "cd ..; ./run.sh rw.cfg" + +while mount | grep $mntpoint | grep -q /dev/md; do + umount $mntpoint || sleep 1 +done +mdconfig -d -u $mdstart Added: projects/stress2/misc/suj4.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/suj4.sh Tue Oct 5 09:19:59 2010 (r213449) @@ -0,0 +1,59 @@ +#!/bin/sh + +# +# Copyright (c) 2010 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD: projects/stress2/misc/suj.sh 210724 2010-08-01 10:33:03Z pho $ +# + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +# "panic: worklist_remove: 0xca821840 jnewblk(0x109) not on list" seen + +. ../default.cfg + +mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart +mdconfig -a -t swap -s 1g -u $mdstart +bsdlabel -w md$mdstart auto +newfs -U md${mdstart}$part > /dev/null +tunefs -j enable /dev/md${mdstart}$part +mount /dev/md${mdstart}$part $mntpoint +chmod 777 $mntpoint + +export RUNDIR=$mntpoint/stressX +export runRUNTIME=1h +set `df -ik /mnt | tail -1 | awk '{print $4,$7}'` +export KBLOCKS=$(($1 / 2)) +export INODES=$(($2 / 2)) +export rwINCARNATIONS=10 +export rwHOG=1 + +su $testuser -c "cd ..; ./run.sh rw.cfg" + +while mount | grep $mntpoint | grep -q /dev/md; do + umount $mntpoint || sleep 1 +done +mdconfig -d -u $mdstart Added: projects/stress2/misc/suj5.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/suj5.sh Tue Oct 5 09:19:59 2010 (r213449) @@ -0,0 +1,186 @@ +#!/bin/sh + +# +# Copyright (c) 2010 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD: projects/stress2/misc/suj.sh 210724 2010-08-01 10:33:03Z pho $ +# + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +# Deadlock seen + +. ../default.cfg + +here=`pwd` +cd /tmp +sed '1,/^EOF/d' < $here/$0 > suj5.c +cc -o suj5 -Wall -O2 suj5.c +rm -f suj5.c +cd $here + +mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart +mdconfig -a -t swap -s 1g -u $mdstart +bsdlabel -w md$mdstart auto +newfs -U md${mdstart}$part > /dev/null +tunefs -j enable /dev/md${mdstart}$part +mount /dev/md${mdstart}$part $mntpoint +chmod 777 $mntpoint + +su $testuser -c "cd $mntpoint; /tmp/suj5" + +while mount | grep $mntpoint | grep -q /dev/md; do + umount $mntpoint || sleep 1 +done +mdconfig -d -u $mdstart +rm -f /tmp/suj5 +exit +EOF +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PARALLEL 10 + +static int +random_int(int mi, int ma) +{ + return (arc4random() % (ma - mi + 1) + mi); +} + +static int64_t +df(void) +{ + char path[MAXPATHLEN+1]; + struct statfs buf; + + if (getcwd(path, sizeof(path)) == NULL) + err(1, "getcwd()"); + + if (statfs(path, &buf) < 0) + err(1, "statfs(%s)", path); + printf("Free space on %s: %jd Mb\n", path, buf.f_bavail * buf.f_bsize / 1024 / 1024); + return (buf.f_bavail * buf.f_bsize); +} + +static void +test(int size) +{ + int buf[1024], index, to; +#ifdef TEST + int i; +#endif + int fd; + char file[128]; + + + sprintf(file,"p%05d", getpid()); + if ((fd = creat(file, 0660)) == -1) + err(1, "creat(%s)", file); + + to = sizeof(buf); + index = 0; + while (index < size) { + if (index + to > size) + to = size - index; +#ifdef TEST + for (i = 0; i < to; i++) + buf[i] = index + i; +#endif + index += to; + if (write(fd, buf, to) != to) + err(1, "write(%s), %s:%d", file, __FILE__, __LINE__); + } + if (close(fd) == -1) + err(1, "close(%s), %s:%d", file, __FILE__, __LINE__); + + if ((fd = open(file, O_RDONLY)) == -1) + err(1, "open(%s), %s:%d", file, __FILE__, __LINE__); + + index = 0; + while (index < size) { + if (index + to > size) + to = size - index; + if (read(fd, buf, to) != to) + err(1, "rw read. %s.%d", __FILE__, __LINE__); +#ifdef TEST + for (i = 0; i < to; i++) { + if (buf[i] != index + i) { + fprintf(stderr, + "%s, pid %d: expected %d @ %d, got %d\n", + getprogname(), getpid(), index+i, index+i, + buf[i]); + exit(EXIT_FAILURE); + } + } +#endif + index += to; + } + if (close(fd) == -1) + err(1, "close(%s), %s:%d", file, __FILE__, __LINE__); + if (unlink(file) == -1) + err(1, "unlink(%s), %s:%d", file, __FILE__, __LINE__); + exit(0); +} + +int +main() +{ + int i, j, pct; + int size; /* in k */ + int64_t bl; + + bl = df(); + if (bl > (int64_t)INT_MAX * PARALLEL) + bl = (int64_t)INT_MAX * PARALLEL; + size = bl / PARALLEL / 1024; + + pct = random_int(1, 50); + size = size / 100 * pct + 1; + if (random_int(1, 100) <= 50) + size = 34 * 1024; /* Known good deadlock value */ + printf("Max file size: %d Mb\n", size / 1024); + + for (i = 0; i < 100; i++) { + for (j = 0; j < PARALLEL; j++) { + if (fork() == 0) { + arc4random_stir(); + test(random_int(1, size) * 1024); + } + } + for (j = 0; j < PARALLEL; j++) + wait(NULL); + } + + + return (0); +} From owner-svn-src-projects@FreeBSD.ORG Tue Oct 5 09:20:46 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F7FE106566C; Tue, 5 Oct 2010 09:20:46 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6F9128FC15; Tue, 5 Oct 2010 09:20:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o959KknS048209; Tue, 5 Oct 2010 09:20:46 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o959Kkse048207; Tue, 5 Oct 2010 09:20:46 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <201010050920.o959Kkse048207@svn.freebsd.org> From: Peter Holm Date: Tue, 5 Oct 2010 09:20:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213450 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 09:20:46 -0000 Author: pho Date: Tue Oct 5 09:20:46 2010 New Revision: 213450 URL: http://svn.freebsd.org/changeset/base/213450 Log: Bring this scenario in line with the other SUJ tests. Modified: projects/stress2/misc/suj.sh Modified: projects/stress2/misc/suj.sh ============================================================================== --- projects/stress2/misc/suj.sh Tue Oct 5 09:19:59 2010 (r213449) +++ projects/stress2/misc/suj.sh Tue Oct 5 09:20:46 2010 (r213450) @@ -34,16 +34,18 @@ . ../default.cfg -mount | grep $mntpoint | grep -q /dev/md && umount $mntpoint +mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart mdconfig -a -t swap -s 1g -u $mdstart bsdlabel -w md$mdstart auto newfs -U md${mdstart}$part > /dev/null tunefs -j enable /dev/md${mdstart}$part mount /dev/md${mdstart}$part $mntpoint +chmod 777 $mntpoint export RUNDIR=$mntpoint/stressX export runRUNTIME=20m -(cd ..; ./run.sh rw.cfg) +su $testuser -c "cd ..; ./run.sh rw.cfg" while mount | grep $mntpoint | grep -q /dev/md; do umount $mntpoint || sleep 1 From owner-svn-src-projects@FreeBSD.ORG Thu Oct 7 15:04:16 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5E078106567A; Thu, 7 Oct 2010 15:04:16 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4D19E8FC13; Thu, 7 Oct 2010 15:04:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o97F4G1K044609; Thu, 7 Oct 2010 15:04:16 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o97F4G93044607; Thu, 7 Oct 2010 15:04:16 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010071504.o97F4G93044607@svn.freebsd.org> From: Attilio Rao Date: Thu, 7 Oct 2010 15:04:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213516 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Oct 2010 15:04:16 -0000 Author: attilio Date: Thu Oct 7 15:04:16 2010 New Revision: 213516 URL: http://svn.freebsd.org/changeset/base/213516 Log: Fix a reversed use of arguments in bcopy(). Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Thu Oct 7 13:13:02 2010 (r213515) +++ projects/sv/sys/netinet/netdump_client.c Thu Oct 7 15:04:16 2010 (r213516) @@ -972,7 +972,7 @@ nd_handle_arp(struct mbuf **mb) m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); m->m_pkthdr.len = m->m_len; - bcopy(dst.octet, ar_tha(ah), ETHER_ADDR_LEN); + bcopy(ar_tha(ah), dst.octet, ETHER_ADDR_LEN); netdump_ether_output(m, ifp, dst, ETHERTYPE_ARP); *mb = NULL; /* Don't m_free upon return */ } From owner-svn-src-projects@FreeBSD.ORG Thu Oct 7 15:17:16 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A0DD3106566C; Thu, 7 Oct 2010 15:17:16 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 837D98FC1B; Thu, 7 Oct 2010 15:17:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o97FHGua044891; Thu, 7 Oct 2010 15:17:16 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o97FHGkh044889; Thu, 7 Oct 2010 15:17:16 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010071517.o97FHGkh044889@svn.freebsd.org> From: Attilio Rao Date: Thu, 7 Oct 2010 15:17:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213517 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Oct 2010 15:17:16 -0000 Author: attilio Date: Thu Oct 7 15:17:16 2010 New Revision: 213517 URL: http://svn.freebsd.org/changeset/base/213517 Log: Remove bcopy usage and use memcpy when possible. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Thu Oct 7 15:04:16 2010 (r213516) +++ projects/sv/sys/netinet/netdump_client.c Thu Oct 7 15:17:16 2010 (r213517) @@ -379,8 +379,8 @@ netdump_ether_output(struct mbuf *m, str return ENOBUFS; } eh = mtod(m, struct ether_header *); - bcopy(IF_LLADDR(ifp), eh->ether_shost, ETHER_ADDR_LEN); - bcopy(dst.octet, eh->ether_dhost, ETHER_ADDR_LEN); + memcpy(eh->ether_shost, IF_LLADDR(ifp), ETHER_ADDR_LEN); + memcpy(eh->ether_dhost, dst.octet, ETHER_ADDR_LEN); eh->ether_type = htons(etype); if (((ifp->if_flags & (IFF_MONITOR|IFF_UP)) != IFF_UP) || @@ -495,7 +495,7 @@ netdump_send_arp() ah->ar_hln = ETHER_ADDR_LEN; ah->ar_pln = sizeof(struct in_addr); ah->ar_op = htons(ARPOP_REQUEST); - bcopy(IF_LLADDR(nd_nic), ar_sha(ah), ETHER_ADDR_LEN); + memcpy(ar_sha(ah), IF_LLADDR(nd_nic), ETHER_ADDR_LEN); ((struct in_addr *)ar_spa(ah))->s_addr = nd_client.s_addr; bzero(ar_tha(ah), ETHER_ADDR_LEN); ((struct in_addr *)ar_tpa(ah))->s_addr = nd_gw.s_addr; @@ -904,8 +904,8 @@ nd_handle_arp(struct mbuf **mb) ah = mtod(m, struct arphdr *); op = ntohs(ah->ar_op); - bcopy(ar_spa(ah), &isaddr, sizeof(isaddr)); - bcopy(ar_tpa(ah), &itaddr, sizeof(itaddr)); + memcpy(&isaddr, ar_spa(ah), sizeof(isaddr)); + memcpy(&itaddr, ar_tpa(ah), sizeof(itaddr)); enaddr = (uint8_t *)IF_LLADDR(ifp); myaddr = nd_client; @@ -943,7 +943,7 @@ nd_handle_arp(struct mbuf **mb) "%s (not netdump server)\n", buf); return; } - bcopy(ar_sha(ah), nd_gw_mac.octet, + memcpy(nd_gw_mac.octet, ar_sha(ah), min(ah->ar_hln, ETHER_ADDR_LEN)); have_server_mac = 1; NETDDEBUG("\nnd_handle_arp: Got server MAC address %6D\n", @@ -962,17 +962,17 @@ nd_handle_arp(struct mbuf **mb) return; } - bcopy(ar_sha(ah), ar_tha(ah), ah->ar_hln); - bcopy(enaddr, ar_sha(ah), ah->ar_hln); - bcopy(ar_spa(ah), ar_tpa(ah), ah->ar_pln); - bcopy(&itaddr, ar_spa(ah), ah->ar_pln); + memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln); + memcpy(ar_sha(ah), enaddr, ah->ar_hln); + memcpy(ar_tpa(ah), ar_spa(ah), ah->ar_pln); + memcpy(ar_spa(ah), &itaddr, ah->ar_pln); ah->ar_op = htons(ARPOP_REPLY); ah->ar_pro = htons(ETHERTYPE_IP); /* let's be sure! */ m->m_flags &= ~(M_BCAST|M_MCAST); /* never reply by broadcast */ m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); m->m_pkthdr.len = m->m_len; - bcopy(ar_tha(ah), dst.octet, ETHER_ADDR_LEN); + memcpy(dst.octet, ar_tha(ah), ETHER_ADDR_LEN); netdump_ether_output(m, ifp, dst, ETHERTYPE_ARP); *mb = NULL; /* Don't m_free upon return */ } @@ -1114,7 +1114,7 @@ netdump_dumper(void *priv, void *virtual else if (offset > 0) offset -= sizeof(struct kerneldumpheader); - bcopy(virtual, buf, length); + memcpy(buf, virtual, length); err=netdump_send(msgtype, offset, buf, length); if (err) { dump_failed=1; From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 10:42:17 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 153C91065670; Fri, 8 Oct 2010 10:42:17 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 035E08FC16; Fri, 8 Oct 2010 10:42:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98AgGXY090761; Fri, 8 Oct 2010 10:42:16 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98AgGFV090759; Fri, 8 Oct 2010 10:42:16 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081042.o98AgGFV090759@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 10:42:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213569 - projects/sv/sys/dev/ixgbe X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 10:42:17 -0000 Author: attilio Date: Fri Oct 8 10:42:16 2010 New Revision: 213569 URL: http://svn.freebsd.org/changeset/base/213569 Log: Add the support for polling on ixgbe. It is mostly modelled on what ixgb already does. Small questions: - does the IFF_DRV_RUNNING check might be kept unlocked? I can't find an uniform locking pattern for it looking around and it seems mostly unlocked. - reading IXGBE_EICR and _LSC should be unlocked? It seems functions do this way. - In case ixgbe_rxeof() returns 'more' should we schedule the taskqueue? ixgb polling doesn't do that, so I'd like to hear more opinion in return. Modified: projects/sv/sys/dev/ixgbe/ixgbe.c Modified: projects/sv/sys/dev/ixgbe/ixgbe.c ============================================================================== --- projects/sv/sys/dev/ixgbe/ixgbe.c Fri Oct 8 10:27:52 2010 (r213568) +++ projects/sv/sys/dev/ixgbe/ixgbe.c Fri Oct 8 10:42:16 2010 (r213569) @@ -141,7 +141,7 @@ static void ixgbe_enable_intr(struct static void ixgbe_disable_intr(struct adapter *); static void ixgbe_update_stats_counters(struct adapter *); static bool ixgbe_txeof(struct tx_ring *); -static bool ixgbe_rxeof(struct ix_queue *, int); +static bool ixgbe_rxeof(struct ix_queue *, int, int *); static void ixgbe_rx_checksum(u32, struct mbuf *, u32); static void ixgbe_set_promisc(struct adapter *); static void ixgbe_disable_promisc(struct adapter *); @@ -195,6 +195,10 @@ static void ixgbe_atr(struct tx_ring *, static void ixgbe_reinit_fdir(void *, int); #endif +#ifdef DEVICE_POLLING +static poll_handler_t ixgbe_poll; +#endif + /********************************************************************* * FreeBSD Device Interface Entry Points *********************************************************************/ @@ -675,6 +679,11 @@ ixgbe_detach(device_t dev) return (EBUSY); } +#ifdef DEVICE_POLLING + if ((adapter->ifp->if_capenable & IFCAP_POLLING) != 0) + ether_poll_deregister(adapter->ifp); +#endif + IXGBE_CORE_LOCK(adapter); ixgbe_stop(adapter); IXGBE_CORE_UNLOCK(adapter); @@ -979,6 +988,25 @@ ixgbe_ioctl(struct ifnet * ifp, u_long c { int mask = ifr->ifr_reqcap ^ ifp->if_capenable; IOCTL_DEBUGOUT("ioctl: SIOCSIFCAP (Set Capabilities)"); +#ifdef DEVICE_POLLING + if ((mask & IFCAP_POLLING) != 0) { + if ((ifr->ifr_reqcap & IFCAP_POLLING) != 0) { + error = ether_poll_register(ixgbe_poll, ifp); + if (error != 0) + return (error); + IXGBE_CORE_LOCK(adapter); + ixgbe_disable_intr(adapter); + ifp->if_capenable |= IFCAP_POLLING; + IXGBE_CORE_UNLOCK(adapter); + } else { + error = ether_poll_deregister(ifp); + IXGBE_CORE_LOCK(adapter); + ixgbe_enable_intr(adapter); + ifp->if_capenable &= ~IFCAP_POLLING; + IXGBE_CORE_UNLOCK(adapter); + } + } +#endif /* !DEVICE_POLLING */ if (mask & IFCAP_HWCSUM) ifp->if_capenable ^= IFCAP_HWCSUM; if (mask & IFCAP_TSO4) @@ -1199,8 +1227,13 @@ ixgbe_init_locked(struct adapter *adapte /* Config/Enable Link */ ixgbe_config_link(adapter); - /* And now turn on interrupts */ - ixgbe_enable_intr(adapter); +#ifdef DEVICE_POLLING + /* Disable interrupts if polling is on, enable otherwise. */ + if ((ifp->if_capenable & IFCAP_POLLING) != 0) + ixgbe_disable_intr(adapter); + else +#endif + ixgbe_enable_intr(adapter); /* Now inform the stack we're ready */ ifp->if_drv_flags |= IFF_DRV_RUNNING; @@ -1294,7 +1327,7 @@ ixgbe_handle_que(void *context, int pend bool more; if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - more = ixgbe_rxeof(que, adapter->rx_process_limit); + more = ixgbe_rxeof(que, adapter->rx_process_limit, NULL); IXGBE_TX_LOCK(txr); ixgbe_txeof(txr); #if __FreeBSD_version >= 800000 @@ -1333,6 +1366,10 @@ ixgbe_legacy_irq(void *arg) bool more_tx, more_rx; u32 reg_eicr, loop = MAX_LOOP; +#ifdef DEVICE_POLLING + if ((adapter->ifp->if_capenable & IFCAP_POLLING) != 0) + return; +#endif reg_eicr = IXGBE_READ_REG(hw, IXGBE_EICR); @@ -1342,7 +1379,7 @@ ixgbe_legacy_irq(void *arg) return; } - more_rx = ixgbe_rxeof(que, adapter->rx_process_limit); + more_rx = ixgbe_rxeof(que, adapter->rx_process_limit, NULL); IXGBE_TX_LOCK(txr); do { @@ -1387,13 +1424,13 @@ ixgbe_msix_que(void *arg) ++que->irqs; - more_rx = ixgbe_rxeof(que, adapter->rx_process_limit); + more_rx = ixgbe_rxeof(que, adapter->rx_process_limit, NULL); IXGBE_TX_LOCK(txr); more_tx = ixgbe_txeof(txr); IXGBE_TX_UNLOCK(txr); - more_rx = ixgbe_rxeof(que, adapter->rx_process_limit); + more_rx = ixgbe_rxeof(que, adapter->rx_process_limit, NULL); /* Do AIM now? */ @@ -2417,6 +2454,9 @@ ixgbe_setup_interface(device_t dev, stru ifp->if_capabilities |= IFCAP_JUMBO_MTU | IFCAP_LRO; ifp->if_capenable = ifp->if_capabilities; +#ifdef DEVICE_POLLING + ifp->if_capabilities |= IFCAP_POLLING; +#endif /* * Specify the media types supported by this adapter and register @@ -3262,6 +3302,52 @@ ixgbe_atr(struct tx_ring *txr, struct mb } #endif +#ifdef DEVICE_POLLING +static int +ixgbe_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) +{ + struct adapter *adapter; + struct tx_ring *txr; + struct ix_queue *que; + struct ixgbe_hw *hw; + u32 loop, reg_eicr; + int rx_npkts; + bool more_tx; + + adapter = ifp->if_softc; + txr = adapter->tx_rings; + que = adapter->queues; + hw = &adapter->hw; + loop = MAX_LOOP; + rx_npkts = 0; + + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + return (rx_npkts); + + if (cmd == POLL_AND_CHECK_STATUS) { + reg_eicr = IXGBE_READ_REG(hw, IXGBE_EICR); + + /* Link status change */ + if ((reg_eicr & IXGBE_EICR_LSC) != 0) + taskqueue_enqueue(adapter->tq, &adapter->link_task); + } + ixgbe_rxeof(que, count, &rx_npkts); + IXGBE_TX_LOCK(txr); + do { + more_tx = ixgbe_txeof(txr); + } while (loop-- && more_tx); +#if __FreeBSD_version >= 800000 + if (!drbr_empty(ifp, txr->br)) + ixgbe_mq_start_locked(ifp, txr, NULL); +#else + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + ixgbe_start_locked(txr, ifp); +#endif + IXGBE_TX_UNLOCK(txr); + return (rx_npkts); +} +#endif + /********************************************************************** * * Examine each tx_buffer in the used queue. If the hardware is done @@ -4062,14 +4148,14 @@ ixgbe_rx_discard(struct rx_ring *rxr, in * Return TRUE for more work, FALSE for all clean. *********************************************************************/ static bool -ixgbe_rxeof(struct ix_queue *que, int count) +ixgbe_rxeof(struct ix_queue *que, int count, int *rx_npktsp) { struct adapter *adapter = que->adapter; struct rx_ring *rxr = que->rxr; struct ifnet *ifp = adapter->ifp; struct lro_ctrl *lro = &rxr->lro; struct lro_entry *queued; - int i, nextp, processed = 0; + int i, nextp, processed = 0, rx_npkts = 0; u32 staterr = 0; union ixgbe_adv_rx_desc *cur; struct ixgbe_rx_buf *rbuf, *nbuf; @@ -4273,8 +4359,10 @@ next_desc: i = 0; /* Now send to the stack or do LRO */ - if (sendmp != NULL) + if (sendmp != NULL) { ixgbe_rx_input(rxr, ifp, sendmp, ptype); + rx_npkts++; + } /* Every 8 descriptors we go to refresh mbufs */ if (processed == 8) { @@ -4307,9 +4395,13 @@ next_desc: */ if ((staterr & IXGBE_RXD_STAT_DD) != 0) { ixgbe_rearm_queues(adapter, (u64)(1 << que->msix)); + if (rx_npktsp != NULL) + *rx_npktsp = rx_npkts; return (TRUE); } + if (rx_npktsp != NULL) + *rx_npktsp = rx_npkts; return (FALSE); } From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 11:16:48 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6D59D106566B; Fri, 8 Oct 2010 11:16:48 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5C0788FC17; Fri, 8 Oct 2010 11:16:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98BGm3Q091575; Fri, 8 Oct 2010 11:16:48 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98BGmrs091572; Fri, 8 Oct 2010 11:16:48 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081116.o98BGmrs091572@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 11:16:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213570 - projects/sv/sys/dev/ixgb X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 11:16:48 -0000 Author: attilio Date: Fri Oct 8 11:16:48 2010 New Revision: 213570 URL: http://svn.freebsd.org/changeset/base/213570 Log: Add netdump support for ixgb(4) interface. Modified: projects/sv/sys/dev/ixgb/if_ixgb.c projects/sv/sys/dev/ixgb/if_ixgb.h Modified: projects/sv/sys/dev/ixgb/if_ixgb.c ============================================================================== --- projects/sv/sys/dev/ixgb/if_ixgb.c Fri Oct 8 10:42:16 2010 (r213569) +++ projects/sv/sys/dev/ixgb/if_ixgb.c Fri Oct 8 11:16:48 2010 (r213570) @@ -35,10 +35,24 @@ POSSIBILITY OF SUCH DAMAGE. #ifdef HAVE_KERNEL_OPTION_HEADERS #include "opt_device_polling.h" +#include "opt_netdump.h" #endif #include +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) + +#define IXGB_LOCK_COND(adapter, locking) do { \ + if ((locking) != 0) \ + IXGB_LOCK(adapter); \ +} while (0) +#define IXGB_UNLOCK_COND(adapter, locking) do { \ + if ((locking) != 0) \ + IXGB_UNLOCK(adapter); \ +} while (0) + +#endif + /********************************************************************* * Set this to one to display debug statistics *********************************************************************/ @@ -145,14 +159,32 @@ static int ixgb_dma_malloc(struct adapter *, bus_size_t, struct ixgb_dma_alloc *, int); static void ixgb_dma_free(struct adapter *, struct ixgb_dma_alloc *); -#ifdef DEVICE_POLLING +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) +static int _ixgb_poll_generic(struct ifnet *ifp, enum poll_cmd cmd, + int count, int locking); static poll_handler_t ixgb_poll; #endif +#ifdef NETDUMP_CLIENT +static poll_handler_t ixgb_poll_unlocked; +static ndumplock_handler_t ixgb_ndump_disable_intr; +static ndumplock_handler_t ixgb_ndump_enable_intr; +#endif /********************************************************************* * FreeBSD Device Interface Entry Points *********************************************************************/ +#ifdef NETDUMP_CLIENT + +static struct netdump_methods ixgb_ndump_methods = { + .ne_poll_locked = ixgb_poll, + .ne_poll_unlocked = ixgb_poll_unlocked, + .ne_disable_intr = ixgb_ndump_disable_intr, + .ne_enable_intr = ixgb_ndump_enable_intr +}; + +#endif + static device_method_t ixgb_methods[] = { /* Device interface */ DEVMETHOD(device_probe, ixgb_probe), @@ -750,7 +782,7 @@ ixgb_init(void *arg) return; } -#ifdef DEVICE_POLLING +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) static int ixgb_poll_locked(struct ifnet * ifp, enum poll_cmd cmd, int count) { @@ -776,18 +808,57 @@ ixgb_poll_locked(struct ifnet * ifp, enu } static int -ixgb_poll(struct ifnet * ifp, enum poll_cmd cmd, int count) +_ixgb_poll_generic(struct ifnet * ifp, enum poll_cmd cmd, int count, + int locking) { struct adapter *adapter = ifp->if_softc; int rx_npkts = 0; - IXGB_LOCK(adapter); + IXGB_LOCK_COND(adapter, locking); if (ifp->if_drv_flags & IFF_DRV_RUNNING) rx_npkts = ixgb_poll_locked(ifp, cmd, count); - IXGB_UNLOCK(adapter); + IXGB_UNLOCK_COND(adapter, locking); return (rx_npkts); } -#endif /* DEVICE_POLLING */ + +static int +ixgb_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) +{ + + return (_ixgb_poll_generic(ifp, cmd, count, 1)); +} +#endif /* !DEVICE_POLLING && !NETDUMP_CLIENT */ + +#ifdef NETDUMP_CLIENT +static int +ixgb_poll_unlocked(struct ifnet *ifp, enum poll_cmd cmd, int count) +{ + + return (_ixgb_poll_generic(ifp, cmd, count, 0)); +} + +static void +ixgb_ndump_disable_intr(struct ifnet *ifp) +{ + struct adapter *adapter; + + adapter = ifp->if_softc; + IXGB_LOCK(adapter); + ixgb_disable_intr(adapter); + IXGB_UNLOCK(adapter); +} + +static void +ixgb_ndump_enable_intr(struct ifnet *ifp) +{ + struct adapter *adapter; + + adapter = ifp->if_softc; + IXGB_LOCK(adapter); + ixgb_enable_intr(adapter); + IXGB_UNLOCK(adapter); +} +#endif /* !NETDUMP_CLIENT */ /********************************************************************* * @@ -1362,6 +1433,9 @@ ixgb_setup_interface(device_t dev, struc ifp->if_ioctl = ixgb_ioctl; ifp->if_start = ixgb_start; ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 1; +#ifdef NETDUMP_CLIENT + ifp->if_ndumpfuncs = &ixgb_ndump_methods; +#endif #if __FreeBSD_version < 500000 ether_ifattach(ifp, ETHER_BPF_SUPPORTED); Modified: projects/sv/sys/dev/ixgb/if_ixgb.h ============================================================================== --- projects/sv/sys/dev/ixgb/if_ixgb.h Fri Oct 8 10:42:16 2010 (r213569) +++ projects/sv/sys/dev/ixgb/if_ixgb.h Fri Oct 8 11:16:48 2010 (r213570) @@ -60,6 +60,9 @@ POSSIBILITY OF SUCH DAMAGE. #include #include #include +#ifdef NETDUMP_CLIENT +#include +#endif #include #include From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 12:39:06 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 54B51106566B; Fri, 8 Oct 2010 12:39:06 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 438D78FC14; Fri, 8 Oct 2010 12:39:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98Cd642093455; Fri, 8 Oct 2010 12:39:06 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98Cd6XN093452; Fri, 8 Oct 2010 12:39:06 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081239.o98Cd6XN093452@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 12:39:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213571 - projects/sv/sys/dev/ixgbe X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 12:39:06 -0000 Author: attilio Date: Fri Oct 8 12:39:05 2010 New Revision: 213571 URL: http://svn.freebsd.org/changeset/base/213571 Log: Add netdump support for ixgbe(4) driver. Modified: projects/sv/sys/dev/ixgbe/ixgbe.c projects/sv/sys/dev/ixgbe/ixgbe.h Modified: projects/sv/sys/dev/ixgbe/ixgbe.c ============================================================================== --- projects/sv/sys/dev/ixgbe/ixgbe.c Fri Oct 8 11:16:48 2010 (r213570) +++ projects/sv/sys/dev/ixgbe/ixgbe.c Fri Oct 8 12:39:05 2010 (r213571) @@ -34,10 +34,24 @@ #ifdef HAVE_KERNEL_OPTION_HEADERS #include "opt_device_polling.h" +#include "opt_netdump.h" #endif #include "ixgbe.h" +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) + +#define IXGBE_TX_LOCK_COND(txr, locking) do { \ + if ((locking) != 0) \ + IXGBE_TX_LOCK(txr); \ +} while (0) +#define IXGBE_TX_UNLOCK_COND(txr, locking) do { \ + if ((locking) != 0) \ + IXGBE_TX_UNLOCK(txr); \ +} while (0) + +#endif + /********************************************************************* * Set this to one to display debug statistics *********************************************************************/ @@ -195,14 +209,32 @@ static void ixgbe_atr(struct tx_ring *, static void ixgbe_reinit_fdir(void *, int); #endif -#ifdef DEVICE_POLLING +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) +static int _ixgbe_poll_generic(struct ifnet *ifp, enum poll_cmd cmd, + int count, int locking); static poll_handler_t ixgbe_poll; #endif +#ifdef NETDUMP_CLIENT +static poll_handler_t ixgbe_poll_unlocked; +static ndumplock_handler_t ixgbe_ndump_disable_intr; +static ndumplock_handler_t ixgbe_ndump_enable_intr; +#endif /********************************************************************* * FreeBSD Device Interface Entry Points *********************************************************************/ +#ifdef NETDUMP_CLIENT + +static struct netdump_methods ixgbe_ndump_methods = { + .ne_poll_locked = ixgbe_poll, + .ne_poll_unlocked = ixgbe_poll_unlocked, + .ne_disable_intr = ixgbe_ndump_disable_intr, + .ne_enable_intr = ixgbe_ndump_enable_intr +}; + +#endif + static device_method_t ixgbe_methods[] = { /* Device interface */ DEVMETHOD(device_probe, ixgbe_probe), @@ -2438,6 +2470,9 @@ ixgbe_setup_interface(device_t dev, stru ifp->if_qflush = ixgbe_qflush; #endif ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 2; +#ifdef NETDUMP_CLIENT + ifp->if_ndumpfuncs = &ixgbe_ndump_methods; +#endif ether_ifattach(ifp, adapter->hw.mac.addr); @@ -3302,9 +3337,10 @@ ixgbe_atr(struct tx_ring *txr, struct mb } #endif -#ifdef DEVICE_POLLING +#if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) static int -ixgbe_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) +_ixgbe_poll_generic(struct ifnet *ifp, enum poll_cmd cmd, int count, + int locking) { struct adapter *adapter; struct tx_ring *txr; @@ -3332,7 +3368,7 @@ ixgbe_poll(struct ifnet *ifp, enum poll_ taskqueue_enqueue(adapter->tq, &adapter->link_task); } ixgbe_rxeof(que, count, &rx_npkts); - IXGBE_TX_LOCK(txr); + IXGBE_TX_LOCK_COND(txr, locking); do { more_tx = ixgbe_txeof(txr); } while (loop-- && more_tx); @@ -3343,10 +3379,48 @@ ixgbe_poll(struct ifnet *ifp, enum poll_ if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) ixgbe_start_locked(txr, ifp); #endif - IXGBE_TX_UNLOCK(txr); + IXGBE_TX_UNLOCK_COND(txr, locking); return (rx_npkts); } -#endif + +static int +ixgbe_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) +{ + + return (_ixgbe_poll_generic(ifp, cmd, count, 1)); +} +#endif /* !DEVICE_POLLING && !NETDUMP_CLIENT */ + +#ifdef NETDUMP_CLIENT +static int +ixgbe_poll_unlocked(struct ifnet *ifp, enum poll_cmd cmd, int count) +{ + + return (_ixgbe_poll_generic(ifp, cmd, count, 0)); +} + +static void +ixgbe_ndump_disable_intr(struct ifnet *ifp) +{ + struct adapter *adapter; + + adapter = ifp->if_softc; + IXGBE_CORE_LOCK(adapter); + ixgbe_disable_intr(adapter); + IXGBE_CORE_UNLOCK(adapter); +} + +static void +ixgbe_ndump_enable_intr(struct ifnet *ifp) +{ + struct adapter *adapter; + + adapter = ifp->if_softc; + IXGBE_CORE_LOCK(adapter); + ixgbe_enable_intr(adapter); + IXGBE_CORE_UNLOCK(adapter); +} +#endif /* !NETDUMP_CLIENT */ /********************************************************************** * Modified: projects/sv/sys/dev/ixgbe/ixgbe.h ============================================================================== --- projects/sv/sys/dev/ixgbe/ixgbe.h Fri Oct 8 11:16:48 2010 (r213570) +++ projects/sv/sys/dev/ixgbe/ixgbe.h Fri Oct 8 12:39:05 2010 (r213571) @@ -66,6 +66,9 @@ #include #include #include +#ifdef NETDUMP_CLIENT +#include +#endif #include #include #include From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 15:10:31 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DEF64106566C; Fri, 8 Oct 2010 15:10:30 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CF65F8FC19; Fri, 8 Oct 2010 15:10:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98FAU5c097745; Fri, 8 Oct 2010 15:10:30 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98FAUZW097743; Fri, 8 Oct 2010 15:10:30 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081510.o98FAUZW097743@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 15:10:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213581 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 15:10:31 -0000 Author: attilio Date: Fri Oct 8 15:10:30 2010 New Revision: 213581 URL: http://svn.freebsd.org/changeset/base/213581 Log: Add tunables that can set up netdump earlier than userland. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Fri Oct 8 15:05:39 2010 (r213580) +++ projects/sv/sys/netinet/netdump_client.c Fri Oct 8 15:10:30 2010 (r213581) @@ -141,6 +141,12 @@ static int nd_polls=10000; /* Times to p * assuming packetloss occurred: 5s by default */ static int nd_retries=10; /* Times to retransmit lost packets */ +/* Tunables storages. */ +static char nd_server_tun[INET_ADDRSTRLEN]; +static char nd_client_tun[INET_ADDRSTRLEN]; +static char nd_gw_tun[INET_ADDRSTRLEN]; +static char nd_nic_tun[IFNAMSIZ]; + /* * [netdump_supported_nic] * @@ -312,12 +318,16 @@ SYSCTL_INT(_net_dump, OID_AUTO, retries, "times to retransmit lost packets"); SYSCTL_INT(_net_dump, OID_AUTO, enable, CTLTYPE_INT|CTLFLAG_RW, &nd_enable, 0, "enable network dump"); -TUNABLE_INT("net.dump.enable", &nd_enable); #ifdef NETDUMP_CLIENT_DEBUG SYSCTL_NODE(_debug, OID_AUTO, netdump, CTLFLAG_RW, NULL, "Netdump debugging"); SYSCTL_PROC(_debug_netdump, OID_AUTO, crash, CTLTYPE_INT|CTLFLAG_RW, 0, sizeof(int), sysctl_force_crash, "I", "force crashing"); #endif +TUNABLE_STR("net.dump.server", nd_server_tun, sizeof(nd_server_tun)); +TUNABLE_STR("net.dump.client", nd_client_tun, sizeof(nd_client_tun)); +TUNABLE_STR("net.dump.gateway", nd_gw_tun, sizeof(nd_gw_tun)); +TUNABLE_STR("net.dump.nic", nd_nic_tun, sizeof(nd_nic_tun)); +TUNABLE_INT("net.dump.enable", &nd_enable); /*- * Network specific primitives. @@ -1264,33 +1274,30 @@ static void netdump_config_defaults() { struct ifnet *ifn; - struct ifaddr *ifa; + int found; nd_nic = NULL; + nd_server.s_addr = INADDR_ANY; nd_client.s_addr = INADDR_ANY; + nd_gw.s_addr = INADDR_ANY; - /* Default the nic to the first available interface */ - if ((ifn = TAILQ_FIRST(&ifnet)) != NULL) do { - if ((ifn->if_flags & IFF_UP) == 0) - continue; - - if (netdump_supported_nic(ifn) && - (nd_nic == NULL || nd_nic->if_dunit < ifn->if_dunit)) - nd_nic = ifn; - - } while ((ifn = TAILQ_NEXT(ifn, if_link)) != NULL && nd_nic == NULL); - - if (nd_nic == NULL) - return; - - /* Default the client to the first IP on nd_nic */ - if ((ifa = TAILQ_FIRST(&nd_nic->if_addrhead)) != NULL) do { - if (ifa->ifa_addr->sa_family != AF_INET) { - continue; + if (nd_server_tun[0] != '\0') + inet_aton(nd_server_tun, &nd_server); + if (nd_client_tun[0] != '\0') + inet_aton(nd_client_tun, &nd_client); + if (nd_gw_tun[0] != '\0') + inet_aton(nd_gw_tun, &nd_gw); + if (nd_nic_tun[0] != '\0') { + found = 0; + TAILQ_FOREACH(ifn, &ifnet, if_link) { + if (!strcmp(ifn->if_xname, nd_nic_tun)) { + found = 1; + break; + } } - nd_client = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; - } while ((ifa = TAILQ_NEXT(ifa, ifa_link)) != NULL && - nd_client.s_addr == INADDR_ANY); + if (found != 0 && netdump_supported_nic(ifn)) + nd_nic = ifn; + } } static int @@ -1298,13 +1305,13 @@ netdump_modevent(module_t mod, int type, { switch (type) { case MOD_LOAD: + netdump_config_defaults(); + /* PRI_FIRST happens before the networks are disabled */ nd_tag = EVENTHANDLER_REGISTER(shutdown_pre_sync, netdump_trigger, NULL, SHUTDOWN_PRI_FIRST); - netdump_config_defaults(); - #ifdef NETDUMP_CLIENT_DEBUG if (!nd_nic) printf("netdump: Warning: No default interface " From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 15:59:02 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6A2D6106566B; Fri, 8 Oct 2010 15:59:02 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5B9258FC15; Fri, 8 Oct 2010 15:59:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98Fx2Yo098894; Fri, 8 Oct 2010 15:59:02 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98Fx22F098892; Fri, 8 Oct 2010 15:59:02 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081559.o98Fx22F098892@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 15:59:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213583 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 15:59:02 -0000 Author: attilio Date: Fri Oct 8 15:59:02 2010 New Revision: 213583 URL: http://svn.freebsd.org/changeset/base/213583 Log: - Lock properly ifnet list for scanning - virtualize the ifnet list Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Fri Oct 8 15:20:20 2010 (r213582) +++ projects/sv/sys/netinet/netdump_client.c Fri Oct 8 15:59:02 2010 (r213583) @@ -254,9 +254,11 @@ sysctl_nic(SYSCTL_HANDLER_ARGS) if (!strcmp(buf, "none")) { ifn = NULL; } else { - if ((ifn = TAILQ_FIRST(&ifnet)) != NULL) do { + IFNET_RLOCK_NOSLEEP(); + if ((ifn = TAILQ_FIRST(&V_ifnet)) != NULL) do { if (!strcmp(ifn->if_xname, buf)) break; } while ((ifn = TAILQ_NEXT(ifn, if_link)) != NULL); + IFNET_RUNLOCK_NOSLEEP(); if (!ifn) return ENODEV; if (!netdump_supported_nic(ifn)) return EINVAL; @@ -1289,12 +1291,14 @@ netdump_config_defaults() inet_aton(nd_gw_tun, &nd_gw); if (nd_nic_tun[0] != '\0') { found = 0; - TAILQ_FOREACH(ifn, &ifnet, if_link) { + IFNET_RLOCK_NOSLEEP(); + TAILQ_FOREACH(ifn, &V_ifnet, if_link) { if (!strcmp(ifn->if_xname, nd_nic_tun)) { found = 1; break; } } + IFNET_RUNLOCK_NOSLEEP(); if (found != 0 && netdump_supported_nic(ifn)) nd_nic = ifn; } From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 16:33:26 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 89C131065670; Fri, 8 Oct 2010 16:33:26 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 767AD8FC16; Fri, 8 Oct 2010 16:33:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98GXQrT099823; Fri, 8 Oct 2010 16:33:26 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98GXQZR099809; Fri, 8 Oct 2010 16:33:26 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081633.o98GXQZR099809@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 16:33:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213584 - in projects/sv: . bin/chflags bin/ps bin/rm bin/stty contrib/binutils/bfd contrib/binutils/include/coff contrib/ee contrib/llvm contrib/llvm/autoconf contrib/llvm/include/llvm... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 16:33:26 -0000 Author: attilio Date: Fri Oct 8 16:33:25 2010 New Revision: 213584 URL: http://svn.freebsd.org/changeset/base/213584 Log: MFC @ 213582 Added: projects/sv/contrib/binutils/bfd/coff-x86_64.c - copied unchanged from r213583, head/contrib/binutils/bfd/coff-x86_64.c projects/sv/contrib/binutils/bfd/efi-app-x86_64.c - copied unchanged from r213583, head/contrib/binutils/bfd/efi-app-x86_64.c projects/sv/contrib/binutils/include/coff/x86_64.h - copied unchanged from r213583, head/contrib/binutils/include/coff/x86_64.h projects/sv/include/unwind.h - copied unchanged from r213583, head/include/unwind.h projects/sv/sys/arm/at91/at91_pio_sam9g20.h - copied unchanged from r213583, head/sys/arm/at91/at91_pio_sam9g20.h projects/sv/sys/arm/at91/at91_reset.S - copied unchanged from r213583, head/sys/arm/at91/at91_reset.S projects/sv/sys/arm/at91/at91_rst.c - copied unchanged from r213583, head/sys/arm/at91/at91_rst.c projects/sv/sys/arm/at91/at91_rstreg.h - copied unchanged from r213583, head/sys/arm/at91/at91_rstreg.h projects/sv/sys/arm/at91/at91_wdt.c - copied unchanged from r213583, head/sys/arm/at91/at91_wdt.c projects/sv/sys/arm/at91/at91_wdtreg.h - copied unchanged from r213583, head/sys/arm/at91/at91_wdtreg.h projects/sv/sys/arm/at91/at91reg.h - copied unchanged from r213583, head/sys/arm/at91/at91reg.h projects/sv/sys/arm/at91/at91rm9200.c - copied unchanged from r213583, head/sys/arm/at91/at91rm9200.c projects/sv/sys/arm/at91/at91sam9260.c - copied unchanged from r213583, head/sys/arm/at91/at91sam9260.c projects/sv/sys/arm/at91/at91sam9260reg.h - copied unchanged from r213583, head/sys/arm/at91/at91sam9260reg.h projects/sv/sys/arm/at91/at91sam9g20.c - copied unchanged from r213583, head/sys/arm/at91/at91sam9g20.c projects/sv/sys/arm/at91/board_qila9g20.c - copied unchanged from r213583, head/sys/arm/at91/board_qila9g20.c projects/sv/sys/arm/at91/board_sam9g20ek.c - copied unchanged from r213583, head/sys/arm/at91/board_sam9g20ek.c projects/sv/sys/arm/at91/std.qila9g20 - copied unchanged from r213583, head/sys/arm/at91/std.qila9g20 projects/sv/sys/arm/at91/std.sam9g20ek - copied unchanged from r213583, head/sys/arm/at91/std.sam9g20ek projects/sv/sys/arm/conf/QILA9G20 - copied unchanged from r213583, head/sys/arm/conf/QILA9G20 projects/sv/sys/arm/conf/QILA9G20.hints - copied unchanged from r213583, head/sys/arm/conf/QILA9G20.hints projects/sv/sys/arm/conf/SAM9G20EK - copied unchanged from r213583, head/sys/arm/conf/SAM9G20EK projects/sv/sys/arm/conf/SAM9G20EK.hints - copied unchanged from r213583, head/sys/arm/conf/SAM9G20EK.hints projects/sv/sys/dev/usb/controller/xhci.c - copied unchanged from r213583, head/sys/dev/usb/controller/xhci.c projects/sv/sys/dev/usb/controller/xhci.h - copied unchanged from r213583, head/sys/dev/usb/controller/xhci.h projects/sv/sys/dev/usb/controller/xhci_pci.c - copied unchanged from r213583, head/sys/dev/usb/controller/xhci_pci.c projects/sv/sys/dev/usb/controller/xhcireg.h - copied unchanged from r213583, head/sys/dev/usb/controller/xhcireg.h projects/sv/sys/kern/vfs_mountroot.c - copied unchanged from r213583, head/sys/kern/vfs_mountroot.c projects/sv/sys/mips/cavium/octe/ethernet-mv88e61xx.c - copied unchanged from r213583, head/sys/mips/cavium/octe/ethernet-mv88e61xx.c projects/sv/sys/mips/cavium/octe/ethernet-mv88e61xx.h - copied unchanged from r213583, head/sys/mips/cavium/octe/ethernet-mv88e61xx.h projects/sv/sys/modules/usb/xhci/ - copied from r213583, head/sys/modules/usb/xhci/ projects/sv/tools/build/options/WITH_GPIO - copied unchanged from r213583, head/tools/build/options/WITH_GPIO projects/sv/tools/regression/usr.bin/tr/regress.0c.out - copied unchanged from r213583, head/tools/regression/usr.bin/tr/regress.0c.out projects/sv/tools/regression/usr.bin/tr/regress.0d.out - copied unchanged from r213583, head/tools/regression/usr.bin/tr/regress.0d.out projects/sv/tools/tools/nanobsd/rescue/Pkg/ - copied from r213583, head/tools/tools/nanobsd/rescue/Pkg/ projects/sv/tools/tools/nanobsd/rescue/build.sh - copied unchanged from r213583, head/tools/tools/nanobsd/rescue/build.sh projects/sv/usr.bin/man/ - copied from r213583, head/usr.bin/man/ Replaced: projects/sv/sys/kern/Makefile - copied unchanged from r213583, head/sys/kern/Makefile Deleted: projects/sv/contrib/llvm/tools/llvm2cpp/ projects/sv/contrib/llvm/tools/llvmc/driver/ projects/sv/contrib/llvm/tools/llvmc/example/ projects/sv/contrib/llvm/tools/llvmc/examples/ projects/sv/contrib/llvm/tools/llvmc/plugins/ projects/sv/contrib/llvm/utils/lit/ExampleTests/ projects/sv/contrib/llvm/utils/lit/ExampleTests.ObjDir/ projects/sv/contrib/llvm/utils/unittest/googletest/src/ projects/sv/lib/libc/amd64/gen/ldexp.c projects/sv/lib/libc/i386/gen/ldexp.c projects/sv/lib/libc/i386/string/strlen.S projects/sv/sys/arm/at91/at91_pio_sam9.h projects/sv/sys/arm/at91/at91sam9.c projects/sv/sys/arm/at91/at91sam9_machdep.c projects/sv/sys/dev/mii/axphyreg.h projects/sv/tools/tools/nanobsd/rescue/AMD64 projects/sv/tools/tools/nanobsd/rescue/I386 projects/sv/tools/tools/nanobsd/rescue/isoamd64.sh projects/sv/tools/tools/nanobsd/rescue/isoi386.sh Modified: projects/sv/ObsoleteFiles.inc projects/sv/UPDATING projects/sv/bin/chflags/chflags.1 projects/sv/bin/ps/keyword.c projects/sv/bin/ps/ps.1 projects/sv/bin/rm/rm.1 projects/sv/bin/rm/rm.c projects/sv/bin/stty/stty.1 projects/sv/contrib/binutils/bfd/targets.c projects/sv/contrib/binutils/include/coff/internal.h projects/sv/contrib/ee/ee.c projects/sv/contrib/ee/ee_version.h projects/sv/contrib/llvm/Makefile.rules projects/sv/contrib/llvm/autoconf/configure.ac projects/sv/contrib/llvm/configure projects/sv/contrib/llvm/include/llvm/ADT/SmallVector.h projects/sv/contrib/llvm/lib/CodeGen/MachineCSE.cpp projects/sv/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp projects/sv/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp projects/sv/contrib/llvm/tools/clang/lib/Basic/Version.cpp projects/sv/contrib/llvm/tools/clang/lib/Driver/Driver.cpp projects/sv/contrib/tzdata/asia projects/sv/contrib/tzdata/zone.tab projects/sv/crypto/openssh/session.c projects/sv/etc/Makefile projects/sv/etc/defaults/rc.conf projects/sv/etc/rc.d/defaultroute projects/sv/games/caesar/caesar.6 projects/sv/games/fortune/datfiles/fortunes projects/sv/gnu/usr.bin/Makefile projects/sv/gnu/usr.bin/binutils/libbfd/Makefile.amd64 projects/sv/gnu/usr.bin/groff/tmac/mdoc.local projects/sv/lib/clang/include/clang/Basic/Version.inc projects/sv/lib/libarchive/libarchive-formats.5 projects/sv/lib/libc/gen/confstr.3 projects/sv/lib/libc/gen/getcap.3 projects/sv/lib/libc/gen/stringlist.3 projects/sv/lib/libc/gen/sysctl.3 projects/sv/lib/libc/i386/string/Makefile.inc projects/sv/lib/libc/locale/localeconv.3 projects/sv/lib/libc/locale/setlocale.3 projects/sv/lib/libc/net/getnetent.3 projects/sv/lib/libc/net/getproto.c projects/sv/lib/libc/net/getprotoent.3 projects/sv/lib/libc/net/getprotoent.c projects/sv/lib/libc/net/getprotoname.c projects/sv/lib/libc/net/nsdispatch.3 projects/sv/lib/libc/net/nsdispatch.c projects/sv/lib/libc/posix1e/acl_add_flag_np.3 projects/sv/lib/libc/posix1e/acl_add_perm.3 projects/sv/lib/libc/posix1e/acl_get.3 projects/sv/lib/libc/posix1e/acl_set.3 projects/sv/lib/libc/posix1e/acl_set_entry_type_np.3 projects/sv/lib/libc/posix1e/acl_set_tag_type.3 projects/sv/lib/libc/regex/re_format.7 projects/sv/lib/libc/stdlib/malloc.3 projects/sv/lib/libc/stdlib/rand.3 projects/sv/lib/libc/stdlib/random.3 projects/sv/lib/libc/stdlib/strtod.3 projects/sv/lib/libc/sys/aio_read.2 projects/sv/lib/libc/sys/aio_write.2 projects/sv/lib/libc/sys/clock_gettime.2 projects/sv/lib/libc/sys/gettimeofday.2 projects/sv/lib/libc/sys/kldstat.2 projects/sv/lib/libc/sys/kldsym.2 projects/sv/lib/libc/sys/kqueue.2 projects/sv/lib/libc/sys/modstat.2 projects/sv/lib/libc/sys/recv.2 projects/sv/lib/libc/sys/sched_setscheduler.2 projects/sv/lib/libc/uuid/uuid.3 projects/sv/lib/libcam/cam_cdbparse.3 projects/sv/lib/libdisk/libdisk.3 projects/sv/lib/libelf/elf_begin.3 projects/sv/lib/libgeom/geom_xml2tree.c projects/sv/lib/libgssapi/gssapi.3 projects/sv/lib/libjail/jail.3 projects/sv/lib/libpmc/pmc.p4.3 projects/sv/lib/libpmc/pmc.westmere.3 projects/sv/lib/libpmc/pmc.westmereuc.3 projects/sv/lib/libradius/radius.conf.5 projects/sv/lib/libstand/libstand.3 projects/sv/lib/libtacplus/libtacplus.3 projects/sv/lib/libthr/Makefile projects/sv/lib/libthr/thread/thr_exit.c projects/sv/lib/libthr/thread/thr_mutex.c projects/sv/lib/libthr/thread/thr_private.h projects/sv/lib/libutil/realhostname.3 projects/sv/lib/libutil/realhostname_sa.3 projects/sv/lib/libvgl/simple.c projects/sv/lib/msun/amd64/s_logbl.S projects/sv/lib/msun/i387/e_exp.S projects/sv/lib/msun/i387/e_fmod.S projects/sv/lib/msun/i387/e_log.S projects/sv/lib/msun/i387/e_log10.S projects/sv/lib/msun/i387/e_remainder.S projects/sv/lib/msun/i387/e_sqrt.S projects/sv/lib/msun/i387/e_sqrtl.S projects/sv/lib/msun/i387/s_ceil.S projects/sv/lib/msun/i387/s_copysign.S projects/sv/lib/msun/i387/s_cos.S projects/sv/lib/msun/i387/s_finite.S projects/sv/lib/msun/i387/s_floor.S projects/sv/lib/msun/i387/s_logb.S projects/sv/lib/msun/i387/s_logbl.S projects/sv/lib/msun/i387/s_rint.S projects/sv/lib/msun/i387/s_rintl.S projects/sv/lib/msun/i387/s_scalbn.S projects/sv/lib/msun/i387/s_significand.S projects/sv/lib/msun/i387/s_sin.S projects/sv/lib/msun/i387/s_tan.S projects/sv/libexec/ftpd/ftpd.8 projects/sv/libexec/getty/gettytab.5 projects/sv/libexec/rtld-elf/powerpc/reloc.c projects/sv/libexec/rtld-elf/rtld.1 projects/sv/libexec/tftpd/tftpd.8 projects/sv/release/picobsd/build/picobsd projects/sv/release/powerpc/mkisoimages.sh projects/sv/sbin/camcontrol/camcontrol.8 projects/sv/sbin/ccdconfig/ccdconfig.8 projects/sv/sbin/devd/devd.conf.5 projects/sv/sbin/geom/class/journal/gjournal.8 projects/sv/sbin/geom/class/raid3/graid3.8 projects/sv/sbin/hastd/control.c projects/sv/sbin/hastd/hastd.c projects/sv/sbin/hastd/hooks.c projects/sv/sbin/hastd/hooks.h projects/sv/sbin/hastd/primary.c projects/sv/sbin/ipfw/ipfw.8 projects/sv/sbin/mknod/mknod.8 projects/sv/sbin/mount/mount.c projects/sv/share/man/man3/fpgetround.3 projects/sv/share/man/man4/acpi_hp.4 projects/sv/share/man/man4/ata.4 projects/sv/share/man/man4/aue.4 projects/sv/share/man/man4/bpf.4 projects/sv/share/man/man4/bt.4 projects/sv/share/man/man4/bwi.4 projects/sv/share/man/man4/bwn.4 projects/sv/share/man/man4/cd.4 projects/sv/share/man/man4/ch.4 projects/sv/share/man/man4/cpuctl.4 projects/sv/share/man/man4/dc.4 projects/sv/share/man/man4/ddb.4 projects/sv/share/man/man4/de.4 projects/sv/share/man/man4/digi.4 projects/sv/share/man/man4/igmp.4 projects/sv/share/man/man4/inet.4 projects/sv/share/man/man4/ipw.4 projects/sv/share/man/man4/iscsi_initiator.4 projects/sv/share/man/man4/isp.4 projects/sv/share/man/man4/iwi.4 projects/sv/share/man/man4/iwn.4 projects/sv/share/man/man4/joy.4 projects/sv/share/man/man4/keyboard.4 projects/sv/share/man/man4/led.4 projects/sv/share/man/man4/lpbb.4 projects/sv/share/man/man4/mac_biba.4 projects/sv/share/man/man4/mac_lomac.4 projects/sv/share/man/man4/mac_portacl.4 projects/sv/share/man/man4/malo.4 projects/sv/share/man/man4/meteor.4 projects/sv/share/man/man4/mk48txx.4 projects/sv/share/man/man4/mld.4 projects/sv/share/man/man4/mps.4 projects/sv/share/man/man4/mtio.4 projects/sv/share/man/man4/mwl.4 projects/sv/share/man/man4/netintro.4 projects/sv/share/man/man4/ng_UI.4 projects/sv/share/man/man4/ng_async.4 projects/sv/share/man/man4/ng_cisco.4 projects/sv/share/man/man4/ng_frame_relay.4 projects/sv/share/man/man4/ng_gif.4 projects/sv/share/man/man4/ng_iface.4 projects/sv/share/man/man4/ng_l2cap.4 projects/sv/share/man/man4/ng_lmi.4 projects/sv/share/man/man4/ng_pppoe.4 projects/sv/share/man/man4/ng_rfc1490.4 projects/sv/share/man/man4/ng_tee.4 projects/sv/share/man/man4/ng_tty.4 projects/sv/share/man/man4/ng_vjc.4 projects/sv/share/man/man4/pcn.4 projects/sv/share/man/man4/psm.4 projects/sv/share/man/man4/pt.4 projects/sv/share/man/man4/pts.4 projects/sv/share/man/man4/pty.4 projects/sv/share/man/man4/ral.4 projects/sv/share/man/man4/random.4 projects/sv/share/man/man4/rl.4 projects/sv/share/man/man4/rum.4 projects/sv/share/man/man4/run.4 projects/sv/share/man/man4/screen.4 projects/sv/share/man/man4/send.4 projects/sv/share/man/man4/ses.4 projects/sv/share/man/man4/sf.4 projects/sv/share/man/man4/sis.4 projects/sv/share/man/man4/sk.4 projects/sv/share/man/man4/smb.4 projects/sv/share/man/man4/snd_hda.4 projects/sv/share/man/man4/ste.4 projects/sv/share/man/man4/sym.4 projects/sv/share/man/man4/syscons.4 projects/sv/share/man/man4/ti.4 projects/sv/share/man/man4/tl.4 projects/sv/share/man/man4/tx.4 projects/sv/share/man/man4/uath.4 projects/sv/share/man/man4/upgt.4 projects/sv/share/man/man4/ural.4 projects/sv/share/man/man4/urtw.4 projects/sv/share/man/man4/vr.4 projects/sv/share/man/man4/wb.4 projects/sv/share/man/man4/wi.4 projects/sv/share/man/man4/wpi.4 projects/sv/share/man/man4/xl.4 projects/sv/share/man/man5/elf.5 projects/sv/share/man/man5/link.5 projects/sv/share/man/man5/make.conf.5 projects/sv/share/man/man5/passwd.5 projects/sv/share/man/man5/quota.user.5 projects/sv/share/man/man5/resolver.5 projects/sv/share/man/man7/firewall.7 projects/sv/share/man/man7/sdoc.7 projects/sv/share/man/man8/picobsd.8 projects/sv/share/man/man8/rc.8 projects/sv/share/man/man8/rc.sendmail.8 projects/sv/share/man/man9/DB_COMMAND.9 projects/sv/share/man/man9/MD5.9 projects/sv/share/man/man9/VOP_READDIR.9 projects/sv/share/man/man9/fail.9 projects/sv/share/man/man9/ieee80211_ddb.9 projects/sv/share/man/man9/ieee80211_radiotap.9 projects/sv/share/man/man9/make_dev.9 projects/sv/share/man/man9/mbuf.9 projects/sv/share/man/man9/style.9 projects/sv/share/man/man9/timeout.9 projects/sv/share/man/man9/uio.9 projects/sv/share/misc/committers-src.dot projects/sv/share/mk/bsd.own.mk projects/sv/share/termcap/termcap.5 projects/sv/sys/amd64/amd64/busdma_machdep.c projects/sv/sys/amd64/amd64/identcpu.c projects/sv/sys/amd64/amd64/machdep.c projects/sv/sys/amd64/amd64/mp_machdep.c projects/sv/sys/amd64/conf/GENERIC projects/sv/sys/amd64/include/specialreg.h projects/sv/sys/amd64/linux32/linux32_proto.h projects/sv/sys/amd64/linux32/linux32_syscall.h projects/sv/sys/amd64/linux32/linux32_sysent.c projects/sv/sys/amd64/linux32/syscalls.master projects/sv/sys/arm/at91/at91.c projects/sv/sys/arm/at91/at91_machdep.c projects/sv/sys/arm/at91/at91_mci.c projects/sv/sys/arm/at91/at91_pio.c projects/sv/sys/arm/at91/at91_pio_rm9200.h projects/sv/sys/arm/at91/at91_pioreg.h projects/sv/sys/arm/at91/at91_pit.c projects/sv/sys/arm/at91/at91_pmc.c projects/sv/sys/arm/at91/at91_pmcreg.h projects/sv/sys/arm/at91/at91_pmcvar.h projects/sv/sys/arm/at91/at91_twi.c projects/sv/sys/arm/at91/at91_twireg.h projects/sv/sys/arm/at91/at91rm92reg.h projects/sv/sys/arm/at91/at91sam9g20reg.h projects/sv/sys/arm/at91/at91var.h projects/sv/sys/arm/at91/board_hl201.c projects/sv/sys/arm/at91/board_kb920x.c projects/sv/sys/arm/at91/files.at91 projects/sv/sys/arm/at91/files.at91sam9 projects/sv/sys/arm/at91/if_ate.c projects/sv/sys/arm/at91/if_atereg.h projects/sv/sys/arm/at91/if_macb.c projects/sv/sys/arm/at91/std.at91sam9 projects/sv/sys/arm/at91/std.kb920x projects/sv/sys/arm/at91/uart_cpu_at91rm9200usart.c projects/sv/sys/arm/at91/uart_dev_at91usart.c projects/sv/sys/boot/common/loader.8 projects/sv/sys/boot/i386/gptboot/Makefile projects/sv/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c projects/sv/sys/compat/linux/linux_futex.c projects/sv/sys/compat/ndis/subr_ntoskrnl.c projects/sv/sys/compat/x86bios/x86bios.c projects/sv/sys/conf/files projects/sv/sys/conf/files.powerpc projects/sv/sys/conf/options projects/sv/sys/conf/options.arm projects/sv/sys/contrib/octeon-sdk/cvmx-helper-board.c projects/sv/sys/dev/aac/aac.c projects/sv/sys/dev/aac/aac_cam.c projects/sv/sys/dev/aac/aacreg.h projects/sv/sys/dev/aac/aacvar.h projects/sv/sys/dev/acpica/acpi_hpet.c projects/sv/sys/dev/ata/chipsets/ata-via.c projects/sv/sys/dev/bce/if_bce.c projects/sv/sys/dev/bce/if_bcereg.h projects/sv/sys/dev/bge/if_bge.c projects/sv/sys/dev/bge/if_bgereg.h projects/sv/sys/dev/ciss/ciss.c projects/sv/sys/dev/dc/dcphy.c projects/sv/sys/dev/dc/pnphy.c projects/sv/sys/dev/gpio/gpiobus.c projects/sv/sys/dev/gpio/gpiobusvar.h projects/sv/sys/dev/gpio/gpioc.c projects/sv/sys/dev/gpio/gpioiic.c projects/sv/sys/dev/gpio/gpioled.c projects/sv/sys/dev/hwpmc/pmc_events.h projects/sv/sys/dev/mii/acphy.c projects/sv/sys/dev/mii/amphy.c projects/sv/sys/dev/mii/atphy.c projects/sv/sys/dev/mii/axphy.c projects/sv/sys/dev/mii/bmtphy.c projects/sv/sys/dev/mii/brgphy.c projects/sv/sys/dev/mii/ciphy.c projects/sv/sys/dev/mii/e1000phy.c projects/sv/sys/dev/mii/exphy.c projects/sv/sys/dev/mii/gentbi.c projects/sv/sys/dev/mii/icsphy.c projects/sv/sys/dev/mii/inphy.c projects/sv/sys/dev/mii/ip1000phy.c projects/sv/sys/dev/mii/jmphy.c projects/sv/sys/dev/mii/lxtphy.c projects/sv/sys/dev/mii/mii.c projects/sv/sys/dev/mii/mlphy.c projects/sv/sys/dev/mii/nsgphy.c projects/sv/sys/dev/mii/nsphy.c projects/sv/sys/dev/mii/nsphyter.c projects/sv/sys/dev/mii/pnaphy.c projects/sv/sys/dev/mii/qsphy.c projects/sv/sys/dev/mii/rgephy.c projects/sv/sys/dev/mii/rlphy.c projects/sv/sys/dev/mii/rlswitch.c projects/sv/sys/dev/mii/ruephy.c projects/sv/sys/dev/mii/smcphy.c projects/sv/sys/dev/mii/tdkphy.c projects/sv/sys/dev/mii/tlphy.c projects/sv/sys/dev/mii/truephy.c projects/sv/sys/dev/mii/ukphy.c projects/sv/sys/dev/mii/ukphy_subr.c projects/sv/sys/dev/mii/xmphy.c projects/sv/sys/dev/mps/mps.c projects/sv/sys/dev/mps/mps_sas.c projects/sv/sys/dev/mps/mpsvar.h projects/sv/sys/dev/ral/rt2560.c projects/sv/sys/dev/usb/controller/usb_controller.c projects/sv/sys/dev/usb/net/if_axe.c projects/sv/sys/dev/usb/net/usb_ethernet.c projects/sv/sys/dev/usb/serial/u3g.c projects/sv/sys/dev/usb/storage/umass.c projects/sv/sys/dev/usb/usb.h projects/sv/sys/dev/usb/usb_controller.h projects/sv/sys/dev/usb/usb_dev.c projects/sv/sys/dev/usb/usb_device.c projects/sv/sys/dev/usb/usb_device.h projects/sv/sys/dev/usb/usb_generic.c projects/sv/sys/dev/usb/usb_handle_request.c projects/sv/sys/dev/usb/usb_hub.c projects/sv/sys/dev/usb/usb_hub.h projects/sv/sys/dev/usb/usb_msctest.c projects/sv/sys/dev/usb/usb_msctest.h projects/sv/sys/dev/usb/usb_parse.c projects/sv/sys/dev/usb/usb_request.c projects/sv/sys/dev/usb/usb_request.h projects/sv/sys/dev/usb/usb_transfer.c projects/sv/sys/dev/usb/usb_transfer.h projects/sv/sys/dev/usb/usbdevs projects/sv/sys/dev/usb/usbdi.h projects/sv/sys/dev/usb/usbdi_util.h projects/sv/sys/dev/usb/wlan/if_rum.c projects/sv/sys/fs/msdosfs/msdosfs_vnops.c projects/sv/sys/fs/nwfs/nwfs_vfsops.c projects/sv/sys/fs/smbfs/smbfs_vfsops.c projects/sv/sys/gdb/gdb_cons.c projects/sv/sys/geom/vinum/geom_vinum_move.c projects/sv/sys/geom/vinum/geom_vinum_rename.c projects/sv/sys/i386/i386/busdma_machdep.c projects/sv/sys/i386/i386/identcpu.c projects/sv/sys/i386/i386/locore.s projects/sv/sys/i386/i386/mp_machdep.c projects/sv/sys/i386/i386/pmap.c projects/sv/sys/i386/i386/support.s projects/sv/sys/i386/include/pmap.h projects/sv/sys/i386/include/specialreg.h projects/sv/sys/ia64/ia64/busdma_machdep.c projects/sv/sys/kern/kern_conf.c projects/sv/sys/kern/kern_malloc.c projects/sv/sys/kern/kern_ntptime.c projects/sv/sys/kern/kern_proc.c projects/sv/sys/kern/kern_shutdown.c projects/sv/sys/kern/link_elf.c projects/sv/sys/kern/link_elf_obj.c projects/sv/sys/kern/p1003_1b.c projects/sv/sys/kern/subr_kdb.c projects/sv/sys/kern/vfs_mount.c projects/sv/sys/mips/atheros/ar71xx_gpio.c projects/sv/sys/mips/atheros/ar71xxreg.h projects/sv/sys/mips/cavium/files.octeon1 projects/sv/sys/mips/cavium/octe/cavium-ethernet.h projects/sv/sys/mips/cavium/octe/ethernet-common.c projects/sv/sys/mips/cavium/octe/ethernet-headers.h projects/sv/sys/mips/cavium/octe/ethernet-mdio.c projects/sv/sys/mips/cavium/octe/octe.c projects/sv/sys/mips/cavium/std.octeon1 projects/sv/sys/mips/cavium/uart_bus_octeonusart.c projects/sv/sys/mips/cavium/uart_cpu_octeonusart.c projects/sv/sys/mips/cavium/uart_dev_oct16550.c projects/sv/sys/mips/conf/OCTEON1 projects/sv/sys/mips/mips/locore.S projects/sv/sys/mips/rmi/board.c projects/sv/sys/mips/rmi/board.h projects/sv/sys/mips/rmi/dev/nlge/if_nlge.c projects/sv/sys/mips/rmi/dev/nlge/if_nlge.h projects/sv/sys/mips/rmi/dev/xlr/rge.c projects/sv/sys/mips/rmi/fmn.c projects/sv/sys/mips/rmi/msgring.h projects/sv/sys/mips/rmi/rmi_mips_exts.h projects/sv/sys/mips/rmi/xlr_machdep.c projects/sv/sys/mips/rmi/xlr_pci.c projects/sv/sys/modules/ixgb/Makefile projects/sv/sys/modules/ixgbe/Makefile projects/sv/sys/modules/mem/Makefile projects/sv/sys/modules/usb/Makefile projects/sv/sys/net/if_tun.c projects/sv/sys/net80211/ieee80211_scan_sta.c projects/sv/sys/netinet/igmp.c projects/sv/sys/netinet/ipfw/dn_sched.h projects/sv/sys/netinet/ipfw/dn_sched_qfq.c projects/sv/sys/netinet/ipfw/dn_sched_wf2q.c projects/sv/sys/netinet/ipfw/ip_dn_glue.c projects/sv/sys/netinet/ipfw/ip_dn_io.c projects/sv/sys/netinet/ipfw/ip_dn_private.h projects/sv/sys/netinet/ipfw/ip_dummynet.c projects/sv/sys/netinet/ipfw/ip_fw_pfil.c projects/sv/sys/pci/if_rl.c projects/sv/sys/powerpc/aim/machdep.c projects/sv/sys/powerpc/aim/mmu_oea.c projects/sv/sys/powerpc/aim/mmu_oea64.c projects/sv/sys/powerpc/aim/trap.c projects/sv/sys/powerpc/include/altivec.h projects/sv/sys/powerpc/include/memdev.h projects/sv/sys/powerpc/include/pcb.h projects/sv/sys/powerpc/include/pmap.h projects/sv/sys/powerpc/include/trap_aim.h projects/sv/sys/powerpc/include/vm.h projects/sv/sys/powerpc/ofw/ofw_syscons.c projects/sv/sys/powerpc/powerpc/bus_machdep.c projects/sv/sys/powerpc/powerpc/busdma_machdep.c projects/sv/sys/powerpc/powerpc/mem.c projects/sv/sys/powerpc/powerpc/mmu_if.m projects/sv/sys/powerpc/powerpc/pmap_dispatch.c projects/sv/sys/sparc64/include/endian.h projects/sv/sys/sparc64/sparc64/bus_machdep.c projects/sv/sys/sun4v/include/endian.h projects/sv/sys/sys/conf.h projects/sv/sys/sys/mutex.h projects/sv/sys/sys/param.h projects/sv/sys/sys/sched.h projects/sv/sys/sys/time.h projects/sv/sys/sys/user.h projects/sv/sys/ufs/ffs/ffs_softdep.c projects/sv/sys/vm/vm_map.c projects/sv/tools/build/mk/OptionalObsoleteFiles.inc projects/sv/tools/regression/usr.bin/tr/regress.sh projects/sv/tools/tools/mctest/mctest.cc projects/sv/tools/tools/mctest/mctest_run.sh projects/sv/tools/tools/nanobsd/rescue/common projects/sv/tools/tools/nanobsd/rescue/isoamd64.conf projects/sv/tools/tools/nanobsd/rescue/isoi386.conf projects/sv/tools/tools/netrate/juggle/juggle.c projects/sv/tools/tools/netrate/tcpconnect/tcpconnect.c projects/sv/usr.bin/Makefile projects/sv/usr.bin/calendar/calendars/calendar.freebsd projects/sv/usr.bin/chat/chat.8 projects/sv/usr.bin/cksum/cksum.1 projects/sv/usr.bin/colldef/colldef.1 projects/sv/usr.bin/csup/cpasswd.1 projects/sv/usr.bin/csup/rcsparse.c projects/sv/usr.bin/gencat/gencat.1 projects/sv/usr.bin/getopt/getopt.1 projects/sv/usr.bin/kdump/mksubr projects/sv/usr.bin/login/login.c projects/sv/usr.bin/make/main.c projects/sv/usr.bin/netstat/inet.c projects/sv/usr.bin/nl/nl.1 projects/sv/usr.bin/tar/pathmatch.c projects/sv/usr.bin/tr/str.c projects/sv/usr.bin/vmstat/vmstat.8 projects/sv/usr.sbin/Makefile projects/sv/usr.sbin/burncd/burncd.8 projects/sv/usr.sbin/ckdist/ckdist.1 projects/sv/usr.sbin/crunch/crunchgen/crunchgen.1 projects/sv/usr.sbin/dconschat/dconschat.8 projects/sv/usr.sbin/flowctl/flowctl.8 projects/sv/usr.sbin/freebsd-update/freebsd-update.8 projects/sv/usr.sbin/i2c/i2c.8 projects/sv/usr.sbin/jail/jail.8 projects/sv/usr.sbin/lpr/lpq/lpq.1 projects/sv/usr.sbin/lpr/lprm/lprm.1 projects/sv/usr.sbin/mergemaster/mergemaster.8 projects/sv/usr.sbin/mixer/mixer.8 projects/sv/usr.sbin/mlxcontrol/mlxcontrol.8 projects/sv/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8 projects/sv/usr.sbin/portsnap/portsnap/portsnap.8 projects/sv/usr.sbin/pw/pw.8 projects/sv/usr.sbin/services_mkdb/services_mkdb.8 projects/sv/usr.sbin/sysinstall/dist.c projects/sv/usr.sbin/sysinstall/dist.h projects/sv/usr.sbin/sysinstall/install.c projects/sv/usr.sbin/sysinstall/menus.c projects/sv/usr.sbin/sysinstall/sysinstall.8 projects/sv/usr.sbin/vidcontrol/vidcontrol.1 Directory Properties: projects/sv/ (props changed) projects/sv/cddl/contrib/opensolaris/ (props changed) projects/sv/contrib/bind9/ (props changed) projects/sv/contrib/bzip2/ (props changed) projects/sv/contrib/ee/ (props changed) projects/sv/contrib/expat/ (props changed) projects/sv/contrib/file/ (props changed) projects/sv/contrib/gdb/ (props changed) projects/sv/contrib/gdtoa/ (props changed) projects/sv/contrib/gnu-sort/ (props changed) projects/sv/contrib/groff/ (props changed) projects/sv/contrib/less/ (props changed) projects/sv/contrib/libpcap/ (props changed) projects/sv/contrib/llvm/ (props changed) projects/sv/contrib/llvm/tools/clang/ (props changed) projects/sv/contrib/ncurses/ (props changed) projects/sv/contrib/netcat/ (props changed) projects/sv/contrib/ntp/ (props changed) projects/sv/contrib/one-true-awk/ (props changed) projects/sv/contrib/openbsm/ (props changed) projects/sv/contrib/openpam/ (props changed) projects/sv/contrib/pf/ (props changed) projects/sv/contrib/sendmail/ (props changed) projects/sv/contrib/tcpdump/ (props changed) projects/sv/contrib/tcsh/ (props changed) projects/sv/contrib/top/ (props changed) projects/sv/contrib/top/install-sh (props changed) projects/sv/contrib/tzcode/stdtime/ (props changed) projects/sv/contrib/tzcode/zic/ (props changed) projects/sv/contrib/tzdata/ (props changed) projects/sv/contrib/wpa/ (props changed) projects/sv/crypto/openssh/ (props changed) projects/sv/crypto/openssl/ (props changed) projects/sv/lib/libc/ (props changed) projects/sv/lib/libc/stdtime/ (props changed) projects/sv/lib/libutil/ (props changed) projects/sv/lib/libz/ (props changed) projects/sv/sbin/ (props changed) projects/sv/sbin/ipfw/ (props changed) projects/sv/share/mk/bsd.arch.inc.mk (props changed) projects/sv/share/zoneinfo/ (props changed) projects/sv/sys/ (props changed) projects/sv/sys/amd64/include/xen/ (props changed) projects/sv/sys/cddl/contrib/opensolaris/ (props changed) projects/sv/sys/contrib/dev/acpica/ (props changed) projects/sv/sys/contrib/pf/ (props changed) projects/sv/sys/contrib/x86emu/ (props changed) projects/sv/sys/dev/usb/controller/ (props changed) projects/sv/sys/dev/xen/xenpci/ (props changed) projects/sv/usr.bin/calendar/ (props changed) projects/sv/usr.bin/csup/ (props changed) projects/sv/usr.bin/procstat/ (props changed) projects/sv/usr.sbin/zic/ (props changed) Modified: projects/sv/ObsoleteFiles.inc ============================================================================== --- projects/sv/ObsoleteFiles.inc Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/ObsoleteFiles.inc Fri Oct 8 16:33:25 2010 (r213584) @@ -23,8 +23,13 @@ OLD_FILES+=usr/share/man/man3/ascftime.3 OLD_FILES+=usr/share/man/man3/cfree.3.gz OLD_FILES+=usr/share/man/man3/cftime.3.gz OLD_FILES+=usr/share/man/man3/getpw.3.gz +# 20100801: tzdata2010k import +OLD_FILES+=usr/share/zoneinfo/Pacific/Ponape +OLD_FILES+=usr/share/zoneinfo/Pacific/Truk # 20100725: acpi_aiboost(4) removal. OLD_FILES+=usr/share/man/man4/acpi_aiboost.4.gz +# 20100724: nfsclient/nfs_lock.h moved to nfs/nfs_lock.h +OLD_FILES+=usr/include/nfsclient/nfs_lock.h # 20100720: new clang import which bumps version from 2.0 to 2.8 OLD_FILES+=usr/include/clang/2.0/emmintrin.h OLD_FILES+=usr/include/clang/2.0/mm_malloc.h Modified: projects/sv/UPDATING ============================================================================== --- projects/sv/UPDATING Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/UPDATING Fri Oct 8 16:33:25 2010 (r213584) @@ -22,6 +22,16 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20101002: + The man(1) utility has been replaced by a new version that no longer + uses /etc/manpath.config. Please consult man.conf(5) for how to + migrate local entries to the new format. + +20100928: + The copyright strings printed by login(1) and sshd(8) at the time of a + new connection have been removed to follow other operating systems and + upstream sshd. + 20100915: A workaround for a fixed ld bug has been removed in kernel code, so make sure that your system ld is built from sources after Modified: projects/sv/bin/chflags/chflags.1 ============================================================================== --- projects/sv/bin/chflags/chflags.1 Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/chflags/chflags.1 Fri Oct 8 16:33:25 2010 (r213584) @@ -98,7 +98,6 @@ will also be printed, in octal notation. The flags are specified as an octal number or a comma separated list of keywords. The following keywords are currently defined: -.Pp .Bl -tag -offset indent -width ".Cm opaque" .It Cm arch , archived set the archived flag (super-user only) Modified: projects/sv/bin/ps/keyword.c ============================================================================== --- projects/sv/bin/ps/keyword.c Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/ps/keyword.c Fri Oct 8 16:33:25 2010 (r213584) @@ -187,6 +187,8 @@ static VAR var[] = { UINT, UIDFMT, 0}, {"svuid", "SVUID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_svuid), UINT, UIDFMT, 0}, + {"tdaddr", "TDADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2, + KOFF(ki_tdaddr), KPTR, "lx", 0}, {"tdev", "TDEV", NULL, 0, tdev, NULL, 5, 0, CHAR, NULL, 0}, {"tdnam", "TDNAM", NULL, LJUST, tdnam, NULL, COMMLEN, 0, CHAR, NULL, 0}, {"time", "TIME", NULL, USER, cputime, NULL, 9, 0, CHAR, NULL, 0}, Modified: projects/sv/bin/ps/ps.1 ============================================================================== --- projects/sv/bin/ps/ps.1 Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/ps/ps.1 Fri Oct 8 16:33:25 2010 (r213584) @@ -591,6 +591,8 @@ symbolic process state (alias saved gid from a setgid executable .It Cm svuid saved UID from a setuid executable +.It Cm tdaddr +thread address .It Cm tdev control terminal device number .It Cm time Modified: projects/sv/bin/rm/rm.1 ============================================================================== --- projects/sv/bin/rm/rm.1 Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/rm/rm.1 Fri Oct 8 16:33:25 2010 (r213584) @@ -32,7 +32,7 @@ .\" @(#)rm.1 8.5 (Berkeley) 12/5/94 .\" $FreeBSD$ .\" -.Dd December 26, 2006 +.Dd October 8, 2010 .Dt RM 1 .Os .Sh NAME @@ -88,9 +88,13 @@ yet provides almost the same level of pr Overwrite regular files before deleting them. Files are overwritten three times, first with the byte pattern 0xff, then 0x00, and then 0xff again, before they are deleted. -Files with multiple links will not be overwritten nor deleted unless +Files with multiple links will not be overwritten nor deleted +and a warning will be issued. +If the .Fl f -is specified, a warning is generated instead. +option is specified, files with multiple links will also be overwritten +and deleted. +No warning will be issued. .Pp Specifying this flag for a read only file will cause .Nm @@ -225,8 +229,8 @@ command appeared in .Sh BUGS The .Fl P -option assumes that the underlying file system is a fixed-block file -system. -UFS is a fixed-block file system, LFS is not. +option assumes that the underlying file system updates existing blocks +in-place and does not store new data in a new location. +This is true for UFS but not for ZFS, which is using a Copy-On-Write strategy. In addition, only regular files are overwritten, other types of files are not. Modified: projects/sv/bin/rm/rm.c ============================================================================== --- projects/sv/bin/rm/rm.c Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/rm/rm.c Fri Oct 8 16:33:25 2010 (r213584) @@ -402,8 +402,8 @@ rm_file(char **argv) * This is a cheap way to *really* delete files. Note that only regular * files are deleted, directories (and therefore names) will remain. * Also, this assumes a fixed-block file system (like FFS, or a V7 or a - * System V file system). In a logging file system, you'll have to have - * kernel support. + * System V file system). In a logging or COW file system, you'll have to + * have kernel support. */ int rm_overwrite(char *file, struct stat *sbp) Modified: projects/sv/bin/stty/stty.1 ============================================================================== --- projects/sv/bin/stty/stty.1 Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/bin/stty/stty.1 Fri Oct 8 16:33:25 2010 (r213584) @@ -419,7 +419,6 @@ Non-Canonical mode input processing (-icanon). .El .Ss Combination Modes: -.Pp .Bl -tag -width Fl .It Ar saved settings Set the current terminal Copied: projects/sv/contrib/binutils/bfd/coff-x86_64.c (from r213583, head/contrib/binutils/bfd/coff-x86_64.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/sv/contrib/binutils/bfd/coff-x86_64.c Fri Oct 8 16:33:25 2010 (r213584, copy of r213583, head/contrib/binutils/bfd/coff-x86_64.c) @@ -0,0 +1,785 @@ +/* BFD back-end for AMD 64 COFF files. + Copyright 2006, 2007 Free Software Foundation, Inc. + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + + Written by Kai Tietz, OneVision Software GmbH&CoKg. */ + +#ifndef COFF_WITH_pex64 +#define COFF_WITH_pex64 +#endif + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#include "coff/x86_64.h" +#include "coff/internal.h" +#include "coff/pe.h" +#include "libcoff.h" +#include "libiberty.h" + +#define BADMAG(x) AMD64BADMAG(x) + +#ifdef COFF_WITH_pex64 +# undef AOUTSZ +# define AOUTSZ PEPAOUTSZ +# define PEAOUTHDR PEPAOUTHDR +#endif + +#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2) + +/* The page size is a guess based on ELF. */ + +#define COFF_PAGE_SIZE 0x1000 + +/* For some reason when using AMD COFF the value stored in the .text + section for a reference to a common symbol is the value itself plus + any desired offset. Ian Taylor, Cygnus Support. */ + +/* If we are producing relocatable output, we need to do some + adjustments to the object file that are not done by the + bfd_perform_relocation function. This function is called by every + reloc type to make any required adjustments. */ + +static bfd_reloc_status_type +coff_amd64_reloc (bfd *abfd, + arelent *reloc_entry, + asymbol *symbol, + void * data, + asection *input_section ATTRIBUTE_UNUSED, + bfd *output_bfd, + char **error_message ATTRIBUTE_UNUSED) +{ + symvalue diff; + +#if !defined(COFF_WITH_PE) + if (output_bfd == NULL) + return bfd_reloc_continue; +#endif + + if (bfd_is_com_section (symbol->section)) + { +#if !defined(COFF_WITH_PE) + /* We are relocating a common symbol. The current value in the + object file is ORIG + OFFSET, where ORIG is the value of the + common symbol as seen by the object file when it was compiled + (this may be zero if the symbol was undefined) and OFFSET is + the offset into the common symbol (normally zero, but may be + non-zero when referring to a field in a common structure). + ORIG is the negative of reloc_entry->addend, which is set by + the CALC_ADDEND macro below. We want to replace the value in + the object file with NEW + OFFSET, where NEW is the value of + the common symbol which we are going to put in the final + object file. NEW is symbol->value. */ + diff = symbol->value + reloc_entry->addend; +#else + /* In PE mode, we do not offset the common symbol. */ + diff = reloc_entry->addend; +#endif + } + else + { + /* For some reason bfd_perform_relocation always effectively + ignores the addend for a COFF target when producing + relocatable output. This seems to be always wrong for 386 + COFF, so we handle the addend here instead. */ +#if defined(COFF_WITH_PE) + if (output_bfd == NULL) + { + reloc_howto_type *howto = reloc_entry->howto; + + /* Although PC relative relocations are very similar between + PE and non-PE formats, but they are off by 1 << howto->size + bytes. For the external relocation, PE is very different + from others. See md_apply_fix3 () in gas/config/tc-amd64.c. + When we link PE and non-PE object files together to + generate a non-PE executable, we have to compensate it + here. */ + if(howto->pc_relative && howto->pcrel_offset) + diff = -(1 << howto->size); + else if(symbol->flags & BSF_WEAK) + diff = reloc_entry->addend - symbol->value; + else + diff = -reloc_entry->addend; + } + else +#endif + diff = reloc_entry->addend; + } + +#if defined(COFF_WITH_PE) + /* FIXME: How should this case be handled? */ + if (reloc_entry->howto->type == R_AMD64_IMAGEBASE + && output_bfd != NULL + && bfd_get_flavour (output_bfd) == bfd_target_coff_flavour) + diff -= pe_data (output_bfd)->pe_opthdr.ImageBase; +#endif + +#define DOIT(x) \ + x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + diff) & howto->dst_mask)) + + if (diff != 0) + { + reloc_howto_type *howto = reloc_entry->howto; + unsigned char *addr = (unsigned char *) data + reloc_entry->address; + + switch (howto->size) + { + case 0: + { + char x = bfd_get_8 (abfd, addr); + DOIT (x); + bfd_put_8 (abfd, x, addr); + } + break; + + case 1: + { + short x = bfd_get_16 (abfd, addr); + DOIT (x); + bfd_put_16 (abfd, (bfd_vma) x, addr); + } + break; + + case 2: + { + long x = bfd_get_32 (abfd, addr); + DOIT (x); + bfd_put_32 (abfd, (bfd_vma) x, addr); + } + break; + case 4: + { + long long x = bfd_get_64 (abfd, addr); + DOIT (x); + bfd_put_64 (abfd, (bfd_vma) x, addr); + } + break; + + default: + abort (); + } + } + + /* Now let bfd_perform_relocation finish everything up. */ + return bfd_reloc_continue; +} + +#if defined(COFF_WITH_PE) +/* Return TRUE if this relocation should appear in the output .reloc + section. */ + +static bfd_boolean +in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto) +{ + return ! howto->pc_relative && howto->type != R_AMD64_IMAGEBASE; +} +#endif /* COFF_WITH_PE */ + +#ifndef PCRELOFFSET +#define PCRELOFFSET TRUE +#endif + +static reloc_howto_type howto_table[] = +{ + EMPTY_HOWTO (0), + HOWTO (R_AMD64_DIR64, /* type 1*/ + 0, /* rightshift */ + 4, /* size (0 = byte, 1 = short, 2 = long, 4 = long long) */ + 64, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_64", /* name */ + TRUE, /* partial_inplace */ + 0xffffffffffffffffll, /* src_mask */ + 0xffffffffffffffffll, /* dst_mask */ + TRUE), /* pcrel_offset */ + HOWTO (R_AMD64_DIR32, /* type 2 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_32", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + /* PE IMAGE_REL_AMD64_ADDR32NB relocation (3). */ + HOWTO (R_AMD64_IMAGEBASE, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "rva32", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* 32-bit longword PC relative relocation (4). */ + HOWTO (R_AMD64_PCRLONG, /* type 4 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_PC32", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + + HOWTO (R_AMD64_PCRLONG_1, /* type 5 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "DISP32+1", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + HOWTO (R_AMD64_PCRLONG_2, /* type 6 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "DISP32+2", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + HOWTO (R_AMD64_PCRLONG_3, /* type 7 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "DISP32+3", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + HOWTO (R_AMD64_PCRLONG_4, /* type 8 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "DISP32+4", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + HOWTO (R_AMD64_PCRLONG_5, /* type 9 */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "DISP32+5", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + EMPTY_HOWTO (10), /* R_AMD64_SECTION 10 */ +#if defined(COFF_WITH_PE) + /* 32-bit longword section relative relocation (11). */ + HOWTO (R_AMD64_SECREL, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "secrel32", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + TRUE), /* pcrel_offset */ +#else + EMPTY_HOWTO (11), +#endif + EMPTY_HOWTO (12), + EMPTY_HOWTO (13), +#ifndef DONT_EXTEND_AMD64 + HOWTO (R_AMD64_PCRQUAD, + 0, /* rightshift */ + 4, /* size (0 = byte, 1 = short, 2 = long) */ + 64, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_PC64", /* name */ + TRUE, /* partial_inplace */ + 0xffffffffffffffffll, /* src_mask */ + 0xffffffffffffffffll, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ +#else + EMPTY_HOWTO (14), +#endif + /* Byte relocation (15). */ + HOWTO (R_RELBYTE, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_8", /* name */ + TRUE, /* partial_inplace */ + 0x000000ff, /* src_mask */ + 0x000000ff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + /* 16-bit word relocation (16). */ + HOWTO (R_RELWORD, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + /* 32-bit longword relocation (17). */ + HOWTO (R_RELLONG, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_32S", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + /* Byte PC relative relocation (18). */ + HOWTO (R_PCRBYTE, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_PC8", /* name */ + TRUE, /* partial_inplace */ + 0x000000ff, /* src_mask */ + 0x000000ff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + /* 16-bit word PC relative relocation (19). */ + HOWTO (R_PCRWORD, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_PC16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + PCRELOFFSET), /* pcrel_offset */ + /* 32-bit longword PC relative relocation (20). */ + HOWTO (R_PCRLONG, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + coff_amd64_reloc, /* special_function */ + "R_X86_64_PC32", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + PCRELOFFSET) /* pcrel_offset */ +}; + +/* Turn a howto into a reloc nunmber */ + +#define SELECT_RELOC(x,howto) { x.r_type = howto->type; } +#define I386 1 /* Customize coffcode.h */ +#define AMD64 1 + +#define RTYPE2HOWTO(cache_ptr, dst) \ + ((cache_ptr)->howto = \ + ((dst)->r_type < ARRAY_SIZE (howto_table)) \ + ? howto_table + (dst)->r_type \ + : NULL) + +/* For 386 COFF a STYP_NOLOAD | STYP_BSS section is part of a shared + library. On some other COFF targets STYP_BSS is normally + STYP_NOLOAD. */ +#define BSS_NOLOAD_IS_SHARED_LIBRARY + +/* Compute the addend of a reloc. If the reloc is to a common symbol, + the object file contains the value of the common symbol. By the + time this is called, the linker may be using a different symbol + from a different object file with a different value. Therefore, we + hack wildly to locate the original symbol from this file so that we + can make the correct adjustment. This macro sets coffsym to the + symbol from the original file, and uses it to set the addend value + correctly. If this is not a common symbol, the usual addend + calculation is done, except that an additional tweak is needed for + PC relative relocs. + FIXME: This macro refers to symbols and asect; these are from the + calling function, not the macro arguments. */ + +#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \ + { \ + coff_symbol_type *coffsym = NULL; \ + \ + if (ptr && bfd_asymbol_bfd (ptr) != abfd) \ + coffsym = (obj_symbols (abfd) \ + + (cache_ptr->sym_ptr_ptr - symbols)); \ + else if (ptr) \ + coffsym = coff_symbol_from (abfd, ptr); \ + \ + if (coffsym != NULL \ + && coffsym->native->u.syment.n_scnum == 0) \ + cache_ptr->addend = - coffsym->native->u.syment.n_value; \ + else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ + && ptr->section != NULL) \ + cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + else \ + cache_ptr->addend = 0; \ + if (ptr && howto_table[reloc.r_type].pc_relative) \ + cache_ptr->addend += asect->vma; \ + } + +/* We use the special COFF backend linker. For normal AMD64 COFF, we + can use the generic relocate_section routine. For PE, we need our + own routine. */ + +#if !defined(COFF_WITH_PE) + +#define coff_relocate_section _bfd_coff_generic_relocate_section + +#else /* COFF_WITH_PE */ + +/* The PE relocate section routine. The only difference between this + and the regular routine is that we don't want to do anything for a + relocatable link. */ + +static bfd_boolean +coff_pe_amd64_relocate_section (bfd *output_bfd, + struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + struct internal_reloc *relocs, + struct internal_syment *syms, + asection **sections) +{ + if (info->relocatable) + return TRUE; + + return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections); +} + +#define coff_relocate_section coff_pe_amd64_relocate_section + +#endif /* COFF_WITH_PE */ + +/* Convert an rtype to howto for the COFF backend linker. */ + +static reloc_howto_type * +coff_amd64_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED, + asection *sec, + struct internal_reloc *rel, + struct coff_link_hash_entry *h, + struct internal_syment *sym, + bfd_vma *addendp) +{ + reloc_howto_type *howto; + + if (rel->r_type > ARRAY_SIZE (howto_table)) + { + bfd_set_error (bfd_error_bad_value); + return NULL; + } + if (rel->r_type >= R_AMD64_PCRLONG_1 && rel->r_type <= R_AMD64_PCRLONG_5) + { + rel->r_vaddr += (bfd_vma)(rel->r_type-R_AMD64_PCRLONG); + rel->r_type = R_AMD64_PCRLONG; + } + howto = howto_table + rel->r_type; + +#if defined(COFF_WITH_PE) + /* Cancel out code in _bfd_coff_generic_relocate_section. */ + *addendp = 0; +#endif + + if (howto->pc_relative) + *addendp += sec->vma; + + if (sym != NULL && sym->n_scnum == 0 && sym->n_value != 0) + { + /* This is a common symbol. The section contents include the + size (sym->n_value) as an addend. The relocate_section + function will be adding in the final value of the symbol. We + need to subtract out the current size in order to get the + correct result. */ + BFD_ASSERT (h != NULL); + +#if !defined(COFF_WITH_PE) + /* I think we *do* want to bypass this. If we don't, I have + seen some data parameters get the wrong relocation address. + If I link two versions with and without this section bypassed + and then do a binary comparison, the addresses which are + different can be looked up in the map. The case in which + this section has been bypassed has addresses which correspond + to values I can find in the map. */ + *addendp -= sym->n_value; +#endif + } + +#if !defined(COFF_WITH_PE) + /* If the output symbol is common (in which case this must be a + relocatable link), we need to add in the final size of the + common symbol. */ + if (h != NULL && h->root.type == bfd_link_hash_common) + *addendp += h->root.u.c.size; +#endif + +#if defined(COFF_WITH_PE) + if (howto->pc_relative) + { + *addendp -= 4; + + /* If the symbol is defined, then the generic code is going to + add back the symbol value in order to cancel out an + adjustment it made to the addend. However, we set the addend + to 0 at the start of this function. We need to adjust here, + to avoid the adjustment the generic code will make. FIXME: + This is getting a bit hackish. */ + if (sym != NULL && sym->n_scnum != 0) + *addendp -= sym->n_value; + } + + if (rel->r_type == R_AMD64_IMAGEBASE + && (bfd_get_flavour (sec->output_section->owner) == bfd_target_coff_flavour)) + *addendp -= pe_data (sec->output_section->owner)->pe_opthdr.ImageBase; + + if (rel->r_type == R_AMD64_SECREL) + { + bfd_vma osect_vma; + + if (h && (h->type == bfd_link_hash_defined || h->type == bfd_link_hash_defweak)) + osect_vma = h->root.u.def.section->output_section->vma; + else + { + asection *sec; + int i; + + /* Sigh, the only way to get the section to offset against + is to find it the hard way. */ + for (sec = abfd->sections, i = 1; i < sym->n_scnum; i++) + sec = sec->next; + + osect_vma = sec->output_section->vma; + } + + *addendp -= osect_vma; + } +#endif + + return howto; +} + +#define coff_bfd_reloc_type_lookup coff_amd64_reloc_type_lookup +#define coff_bfd_reloc_name_lookup coff_amd64_reloc_name_lookup + +static reloc_howto_type * +coff_amd64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) +{ + switch (code) + { + case BFD_RELOC_RVA: + return howto_table + R_AMD64_IMAGEBASE; + case BFD_RELOC_32: + return howto_table + R_AMD64_DIR32; + case BFD_RELOC_64: + return howto_table + R_AMD64_DIR64; + case BFD_RELOC_64_PCREL: +#ifndef DONT_EXTEND_AMD64 + return howto_table + R_AMD64_PCRQUAD; +#else + /* Fall through. */ +#endif + case BFD_RELOC_32_PCREL: + return howto_table + R_AMD64_PCRLONG; + case BFD_RELOC_X86_64_32S: + return howto_table + R_RELLONG; + case BFD_RELOC_16: + return howto_table + R_RELWORD; + case BFD_RELOC_16_PCREL: + return howto_table + R_PCRWORD; + case BFD_RELOC_8: + return howto_table + R_RELBYTE; + case BFD_RELOC_8_PCREL: + return howto_table + R_PCRBYTE; +#ifdef notyet +#if defined(COFF_WITH_PE) + case BFD_RELOC_32_SECREL: + return howto_table + R_AMD64_SECREL; +#endif +#endif + default: + BFD_FAIL (); + return 0; + } +} + +static reloc_howto_type * +coff_amd64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, + const char *r_name) +{ + unsigned int i; + + for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++) + if (howto_table[i].name != NULL + && strcasecmp (howto_table[i].name, r_name) == 0) + return &howto_table[i]; + + return NULL; +} + +#define coff_rtype_to_howto coff_amd64_rtype_to_howto + +#ifdef TARGET_UNDERSCORE + +/* If amd64 gcc uses underscores for symbol names, then it does not use + a leading dot for local labels, so if TARGET_UNDERSCORE is defined + we treat all symbols starting with L as local. */ + +static bfd_boolean +coff_amd64_is_local_label_name (bfd *abfd, const char *name) +{ + if (name[0] == 'L') + return TRUE; + + return _bfd_coff_is_local_label_name (abfd, name); +} + +#define coff_bfd_is_local_label_name coff_amd64_is_local_label_name + +#endif /* TARGET_UNDERSCORE */ + +#include "coffcode.h" + +#ifdef PE +#define amd64coff_object_p pe_bfd_object_p +#else +#define amd64coff_object_p coff_object_p +#endif + +const bfd_target +#ifdef TARGET_SYM + TARGET_SYM = +#else + x86_64coff_vec = +#endif +{ +#ifdef TARGET_NAME + TARGET_NAME, +#else + "coff-x86-64", /* Name. */ +#endif + bfd_target_coff_flavour, + BFD_ENDIAN_LITTLE, /* Data byte order is little. */ + BFD_ENDIAN_LITTLE, /* Header byte order is little. */ + + (HAS_RELOC | EXEC_P | /* Object flags. */ + HAS_LINENO | HAS_DEBUG | + HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ +#if defined(COFF_WITH_PE) + | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY +#endif + | SEC_CODE | SEC_DATA), + +#ifdef TARGET_UNDERSCORE + TARGET_UNDERSCORE, /* Leading underscore. */ +#else + 0, /* Leading underscore. */ +#endif + '/', /* Ar_pad_char. */ + 15, /* Ar_max_namelen. */ + + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ + + /* Note that we allow an object file to be treated as a core file as well. */ + { _bfd_dummy_target, amd64coff_object_p, /* BFD_check_format. */ + bfd_generic_archive_p, amd64coff_object_p }, + { bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format. */ + bfd_false }, + { bfd_false, coff_write_object_contents, /* bfd_write_contents. */ + _bfd_write_archive_contents, bfd_false }, + + BFD_JUMP_TABLE_GENERIC (coff), + BFD_JUMP_TABLE_COPY (coff), + BFD_JUMP_TABLE_CORE (_bfd_nocore), + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), + BFD_JUMP_TABLE_SYMBOLS (coff), + BFD_JUMP_TABLE_RELOCS (coff), + BFD_JUMP_TABLE_WRITE (coff), + BFD_JUMP_TABLE_LINK (coff), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + COFF_SWAP_TABLE +}; Copied: projects/sv/contrib/binutils/bfd/efi-app-x86_64.c (from r213583, head/contrib/binutils/bfd/efi-app-x86_64.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/sv/contrib/binutils/bfd/efi-app-x86_64.c Fri Oct 8 16:33:25 2010 (r213584, copy of r213583, head/contrib/binutils/bfd/efi-app-x86_64.c) @@ -0,0 +1,34 @@ +/* BFD back-end for Intel64 UEFI application files. + Copyright 2007 Free Software Foundation, Inc. + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" + +#define TARGET_SYM bfd_efi_app_x86_64_vec +#define TARGET_NAME "efi-app-x86_64" +#define COFF_IMAGE_WITH_PE +#define COFF_WITH_PE +#define COFF_WITH_pep +#define PCRELOFFSET TRUE +#define TARGET_UNDERSCORE '_' +#define COFF_LONG_SECTION_NAMES +#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_APPLICATION +#define PEI_FORCE_MINIMUM_ALIGNMENT + +#include "coff-x86_64.c" Modified: projects/sv/contrib/binutils/bfd/targets.c ============================================================================== --- projects/sv/contrib/binutils/bfd/targets.c Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/contrib/binutils/bfd/targets.c Fri Oct 8 16:33:25 2010 (r213584) @@ -510,6 +510,7 @@ extern const bfd_target armpei_little_ve extern const bfd_target b_out_vec_big_host; extern const bfd_target b_out_vec_little_host; extern const bfd_target bfd_efi_app_ia32_vec; +extern const bfd_target bfd_efi_app_x86_64_vec; extern const bfd_target bfd_efi_app_ia64_vec; extern const bfd_target bfd_elf32_avr_vec; extern const bfd_target bfd_elf32_big_generic_vec; @@ -794,6 +795,7 @@ static const bfd_target * const _bfd_tar &b_out_vec_big_host, &b_out_vec_little_host, &bfd_efi_app_ia32_vec, + &bfd_efi_app_x86_64_vec, #ifdef BFD64 &bfd_efi_app_ia64_vec, #endif Modified: projects/sv/contrib/binutils/include/coff/internal.h ============================================================================== --- projects/sv/contrib/binutils/include/coff/internal.h Fri Oct 8 15:59:02 2010 (r213583) +++ projects/sv/contrib/binutils/include/coff/internal.h Fri Oct 8 16:33:25 2010 (r213584) @@ -1,7 +1,8 @@ /* Internal format of COFF object file data structures, for GNU BFD. This file is part of BFD, the Binary File Descriptor library. - Copyright 2001 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006, 2007, 2009 + Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef GNU_COFF_INTERNAL_H #define GNU_COFF_INTERNAL_H 1 @@ -57,10 +58,19 @@ struct internal_extra_pe_filehdr bfd_vma nt_signature; /* required NT signature, 0x4550 */ }; +#define GO32_STUBSIZE 2048 + struct internal_filehdr *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Oct 8 17:46:52 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0980B1065670; Fri, 8 Oct 2010 17:46:52 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EF2718FC15; Fri, 8 Oct 2010 17:46:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o98HkpMh001745; Fri, 8 Oct 2010 17:46:51 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o98HkpTV001741; Fri, 8 Oct 2010 17:46:51 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201010081746.o98HkpTV001741@svn.freebsd.org> From: Attilio Rao Date: Fri, 8 Oct 2010 17:46:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213586 - in projects/sv/sys: amd64/conf modules/ixgb modules/ixgbe X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2010 17:46:52 -0000 Author: attilio Date: Fri Oct 8 17:46:51 2010 New Revision: 213586 URL: http://svn.freebsd.org/changeset/base/213586 Log: Remove changes that crept-in during development and testing. Modified: projects/sv/sys/amd64/conf/GENERIC projects/sv/sys/modules/ixgb/Makefile projects/sv/sys/modules/ixgbe/Makefile Modified: projects/sv/sys/amd64/conf/GENERIC ============================================================================== --- projects/sv/sys/amd64/conf/GENERIC Fri Oct 8 17:42:09 2010 (r213585) +++ projects/sv/sys/amd64/conf/GENERIC Fri Oct 8 17:46:51 2010 (r213586) @@ -65,7 +65,7 @@ options FLOWTABLE # per-cpu routing ca #options KDTRACE_FRAME # Ensure frames are compiled in #options KDTRACE_HOOKS # Kernel DTrace hooks options INCLUDE_CONFIG_FILE # Include this file in kernel -options NETDUMP_CLIENT + # Debugging for use in -current options KDB # Enable kernel debugger support. options DDB # Support DDB. Modified: projects/sv/sys/modules/ixgb/Makefile ============================================================================== --- projects/sv/sys/modules/ixgb/Makefile Fri Oct 8 17:42:09 2010 (r213585) +++ projects/sv/sys/modules/ixgb/Makefile Fri Oct 8 17:46:51 2010 (r213586) @@ -5,6 +5,5 @@ KMOD= if_ixgb SRCS= if_ixgb.c ixgb_hw.c ixgb_ee.c SRCS+= device_if.h bus_if.h pci_if.h -CFLAGS+= -DNETDUMP_CLIENT .include Modified: projects/sv/sys/modules/ixgbe/Makefile ============================================================================== --- projects/sv/sys/modules/ixgbe/Makefile Fri Oct 8 17:42:09 2010 (r213585) +++ projects/sv/sys/modules/ixgbe/Makefile Fri Oct 8 17:46:51 2010 (r213586) @@ -6,6 +6,6 @@ SRCS += ixgbe.c # Shared source SRCS += ixgbe_common.c ixgbe_api.c ixgbe_phy.c SRCS += ixgbe_82599.c ixgbe_82598.c -CFLAGS+= -I${.CURDIR}/../../dev/ixgbe -DSMP -DNETDUMP_CLIENT -DIXGBE_FDIR +CFLAGS+= -I${.CURDIR}/../../dev/ixgbe -DSMP -DIXGBE_FDIR .include