Author: denis
Update of /cvs/free/rpms/open-vm-tools-kmod/F-11
In directory se02.es.rpmfusion.net:/tmp/cvs-serv9988
Modified Files:
open-vm-tools-kmod.spec
Added Files:
open-vm-tools-217847-vmxnet3.patch
Log Message:
Added vmxnet3 patch, conditional build
open-vm-tools-217847-vmxnet3.patch:
COPYING | 339 +++++
Makefile | 167 ++
Makefile.kernel | 42
README | 11
vmxnet3_drv.c | 3210 +++++++++++++++++++++++++++++++++++++++++++++++++++
vmxnet3_ethtool.c | 594 +++++++++
vmxnet3_int.h | 412 ++++++
vmxnet3_shm.c | 1531 ++++++++++++++++++++++++
vmxnet3_shm.h | 316 +++++
vmxnet3_shm_shared.h | 94 +
vmxnet3_version.h | 35
11 files changed, 6751 insertions(+)
--- NEW FILE open-vm-tools-217847-vmxnet3.patch ---
diff -w -N -r -u open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/COPYING
open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/COPYING
--- open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/COPYING 1970-01-01
01:00:00.000000000 +0100
+++ open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/COPYING 2009-12-17
22:26:31.000000000 +0100
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
[...6396 lines suppressed...]
+ len,
+ direction);
+ }
+
+}
+
+static inline dma_addr_t
+vmxnet3_map_page(struct vmxnet3_adapter *adapter,
+ struct page *page,
+ size_t offset,
+ size_t len,
+ int direction)
+{
+ if (adapter->is_shm) {
+ unsigned long shm_idx = (unsigned long)page;
+ page = VMXNET3_SHM_IDX2PAGE(adapter->shm, shm_idx);
+ }
+
+ return pci_map_page(adapter->pdev,
+ page,
+ offset,
+ len,
+ direction);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ *
+ * vmxnet3_(put|alloc)_page --
+ *
+ * Allocation and release of pages. Either use regular or shared memory
+ * pages.
+ *
+ * Results:
+ * Depends
+ *
+ * Side effects:
+ * None.
+ *
+ *-----------------------------------------------------------------------------
+ */
+static inline void
+vmxnet3_put_page(struct vmxnet3_adapter *adapter,
+ struct page *page)
+{
+ if (!adapter->is_shm)
+ put_page(page);
+ else
+ vmxnet3_shm_free_page(adapter->shm, (unsigned long)page);
+}
+
+static inline void *
+vmxnet3_alloc_page(struct vmxnet3_adapter *adapter)
+{
+ if (adapter->is_shm)
+ return (void*) (unsigned long) vmxnet3_shm_alloc_page(adapter->shm);
+ else
+ return alloc_page(GFP_ATOMIC);
+
+}
+
+
+#endif
diff -w -N -r -u
open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/vmxnet3_shm_shared.h
open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/vmxnet3_shm_shared.h
--- open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/vmxnet3_shm_shared.h 1970-01-01
01:00:00.000000000 +0100
+++ open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/vmxnet3_shm_shared.h 2009-12-17
22:26:31.000000000 +0100
@@ -0,0 +1,94 @@
+/*********************************************************
+ * Copyright (C) 2009 VMware, Inc. All rights reserved.
+ *
+ * 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 version 2 and no 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *********************************************************/
+
+/*
+ * vmxnet3_shm_shared.h --
+ *
+ * Header shared between vmxnet3 shared memory kernel driver and userspace.
+ *
+ */
+
+#ifndef __VMXNET_SHARED_SHM
+#define __VMXNET_SHARED_SHM
+
+#include <linux/ioctl.h>
+
+// ioctl constants
+#define SHM_IOCTL_MAGIC 'v'
+#define SHM_IOCTL_TX _IO(SHM_IOCTL_MAGIC, 0)
+#define SHM_IOCTL_ALLOC_ONE _IO(SHM_IOCTL_MAGIC, 1)
+#define SHM_IOCTL_ALLOC_MANY _IO(SHM_IOCTL_MAGIC, 2)
+#define SHM_IOCTL_ALLOC_ONE_AND_MANY _IO(SHM_IOCTL_MAGIC, 3)
+#define SHM_IOCTL_FREE_ONE _IO(SHM_IOCTL_MAGIC, 4)
+
+/*
+ * invalid index
+ *
+ * Must be 0 so that a invalid shared memory page has the same
+ * value as a NULL struct page. We need that because we overload
+ * the same field for regular and shared memory version of vmxnet3.
+ */
+#define SHM_INVALID_IDX 0
+
+// sizes of shared memory regions in pages
+#define SHM_DATA_START 0
+#define SHM_DEFAULT_DATA_SIZE 4096
+#define SHM_MAX_DATA_SIZE 16384
+#define SHM_CTL_START 16384
+#define SHM_CTL_SIZE 1
+
+// ring size (in entries) is limited by the single control page - 4 bytes per re
+#define SHM_RX_RING_SIZE 500
+#define SHM_TX_RING_SIZE 500
+
+// maximum fragments per packet is 16 (64k) + 2 for metadata
+#define VMXNET3_SHM_MAX_FRAGS 18
+
+// shared memory ring entry
+struct vmxnet3_shm_ringentry
+{
+ uint16_t idx; // index of this page in the pool
+ uint16_t len: 13; // length of data in this page
+ uint16_t own: 1; // whether the receiver owns the re
+ uint16_t eop: 1; // end of packet
+ uint16_t trash: 1; // ignore all the data in this packet, but still take ownership
+};
+
+static const struct vmxnet3_shm_ringentry RE_ZERO = {0,0,0,0,0};
+
+// shared memory control page
+struct vmxnet3_shm_ctl
+{
+ struct vmxnet3_shm_ringentry rx_ring[SHM_RX_RING_SIZE];
+ struct vmxnet3_shm_ringentry tx_ring[SHM_TX_RING_SIZE];
+
+ // XXX move kernel_* into the kernel, currently here for debugging
+ // user_rxi is used by poll() to avoid going to sleep when there are packets waiting
+ uint16_t user_rxi, user_txi;
+ uint16_t kernel_rxi, kernel_txi;
+
+ struct
+ {
+ uint64_t user_rx, user_tx;
+ uint64_t kernel_rx, kernel_tx;
+ } stats;
+
+ uint64_t channelBad;
+};
+
+#endif
diff -w -N -r -u open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/vmxnet3_version.h
open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/vmxnet3_version.h
--- open-vm-tools-2010.01.19-226760/modules/linux/vmxnet3/vmxnet3_version.h 1970-01-01
01:00:00.000000000 +0100
+++ open-vm-tools-2009.12.16-217847/modules/linux/vmxnet3/vmxnet3_version.h 2009-12-17
22:26:31.000000000 +0100
@@ -0,0 +1,35 @@
+/*********************************************************
+ * Copyright (C) 2007 VMware, Inc. All rights reserved.
+ *
+ * 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 version 2 and no 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *********************************************************/
+
+/*
+ * vmxnet3_version.h --
+ *
+ * Version definitions for the Linux vmxnet3 driver.
+ */
+
+#ifndef _VMXNET3_VERSION_H_
+#define _VMXNET3_VERSION_H_
+
+#define VMXNET3_DRIVER_VERSION 1.0.5.0
+#define VMXNET3_DRIVER_VERSION_COMMAS 1,0,5,0
+#define VMXNET3_DRIVER_VERSION_STRING "1.0.5.0"
+
+/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
+#define VMXNET3_DRIVER_VERSION_NUM 0x01000500
+
+#endif /* _VMXNET3_VERSION_H_ */
Index: open-vm-tools-kmod.spec
===================================================================
RCS file: /cvs/free/rpms/open-vm-tools-kmod/F-11/open-vm-tools-kmod.spec,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- open-vm-tools-kmod.spec 17 Feb 2010 07:03:15 -0000 1.54
+++ open-vm-tools-kmod.spec 17 Feb 2010 09:15:12 -0000 1.55
@@ -20,6 +20,7 @@
URL:
http://open-vm-tools.sourceforge.net/
Source0:
http://downloads.sourceforge.net/%{tname}/%{tname}-%{builddate}-%{buildve...
Source11: %{tname}-excludekernel-filterfile
+Patch0: open-vm-tools-217847-vmxnet3.patch
BuildRoot: %{_tmppath}/%{name}-%{builddate}-%{release}-root-%(%{__id_u} -n)
# VMWare only supports x86 architectures.
@@ -45,6 +46,7 @@
kmodtool --target %{_target_cpu} --repo rpmfusion --kmodname %{name} --filterfile
%{SOURCE11} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels
"%{?kernels}"} 2>/dev/null
%setup -q -n open-vm-tools-%{builddate}-%{buildver}
+%patch0 -p1
for kernel_version in %{?kernel_versions} ; do
mkdir -p _kmod_build_${kernel_version%%___*}/
cp -ar modules _kmod_build_${kernel_version%%___*}/
@@ -54,7 +56,11 @@
%build
for kernel_version in %{?kernel_versions} ; do
+ kvminor=`echo $kernel_version | awk -F '.' '{print $3}'`
for ovtmodule in %{ovtmodules}; do
+ if [ $ovtmodule = "vmxnet3" -a $kvminor -ge 32 ]; then
+ continue;
+ fi
make -C ${PWD}/_kmod_build_${kernel_version%%___*}/modules/linux/${ovtmodule}
VM_UNAME=${kernel_version%%___*} HEADER_DIR="${kernel_version##*___}/include"
OVT_SOURCE_DIR=${PWD}/_kmod_build_${kernel_version%%___*} CC_OPTS=-DVMW_HAVE_EPOLL
done
done
@@ -63,7 +69,11 @@
%install
rm -rf $RPM_BUILD_ROOT
for kernel_version in %{?kernel_versions} ; do
+ kvminor=`echo $kernel_version | awk -F '.' '{print $3}'`
for ovtmodule in %{ovtmodules}; do
+ if [ $ovtmodule = "vmxnet3" -a $kvminor -ge 32 ]; then
+ continue;
+ fi
install -D -m 755
_kmod_build_${kernel_version%%___*}/modules/linux/${ovtmodule}/${ovtmodule}.ko
$RPM_BUILD_ROOT%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/${ovtmodule}.ko
done
done
@@ -78,6 +88,7 @@
%changelog
* Wed Feb 17 2010 Denis Leroy <denis(a)poolshark.org> - 0.0.0.226760-1
- Update to upstream build 226760
+- Added vmxnet3 patch
* Thu Feb 11 2010 Thorsten Leemhuis <fedora [AT] leemhuis [DOT] info> -
0.0.0.217847-1.5
- rebuild for new kernel