forked from AUR/linux-vfio
		
	Initial commit - 3.18.4
This commit is contained in:
		
							
								
								
									
										59
									
								
								.SRCINFO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								.SRCINFO
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
pkgbase = linux-vfio
 | 
			
		||||
	pkgver = 3.18.4
 | 
			
		||||
	pkgrel = 1
 | 
			
		||||
	url = http://www.kernel.org/
 | 
			
		||||
	arch = i686
 | 
			
		||||
	arch = x86_64
 | 
			
		||||
	license = GPL2
 | 
			
		||||
	makedepends = xmlto
 | 
			
		||||
	makedepends = docbook-xsl
 | 
			
		||||
	makedepends = kmod
 | 
			
		||||
	makedepends = inetutils
 | 
			
		||||
	makedepends = bc
 | 
			
		||||
	options = !strip
 | 
			
		||||
	source = https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.tar.xz
 | 
			
		||||
	source = https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.tar.sign
 | 
			
		||||
	source = https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.18.4.xz
 | 
			
		||||
	source = https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.18.4.sign
 | 
			
		||||
	source = config
 | 
			
		||||
	source = config.x86_64
 | 
			
		||||
	source = linux.preset
 | 
			
		||||
	source = change-default-console-loglevel.patch
 | 
			
		||||
	source = override_for_missing_acs_capabilities.patch
 | 
			
		||||
	source = i915_317.patch
 | 
			
		||||
	sha256sums = becc413cc9e6d7f5cc52a3ce66d65c3725bc1d1cc1001f4ce6c32b69eb188cbd
 | 
			
		||||
	sha256sums = SKIP
 | 
			
		||||
	sha256sums = 57c74ba5266bb10be335a89d30480739b3de67b5a72b3e0b0d37a27775b1862a
 | 
			
		||||
	sha256sums = SKIP
 | 
			
		||||
	sha256sums = d3794c8b2cd11b71914b41f7a4e861369d4fa3c29fdd9e1d677ff0c2167eeb52
 | 
			
		||||
	sha256sums = df7886f5d57f8f85e89987066dfa5c316e922dc0b22e6e6ad01331333db52377
 | 
			
		||||
	sha256sums = f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c
 | 
			
		||||
	sha256sums = 1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99
 | 
			
		||||
	sha256sums = 7320b4abc2918cfb0cb084330a7470887e9a9cfb6496381460bcf4085eb62e0f
 | 
			
		||||
	sha256sums = f86ce528b63f198b84c4d8d92d35329aa4000d462217dc2db03bac5eb693cf19
 | 
			
		||||
 | 
			
		||||
pkgname = linux-vfio
 | 
			
		||||
	pkgdesc = The Linux-vfio kernel and modules
 | 
			
		||||
	install = linux.install
 | 
			
		||||
	depends = coreutils
 | 
			
		||||
	depends = linux-firmware
 | 
			
		||||
	depends = kmod
 | 
			
		||||
	depends = mkinitcpio>=0.7
 | 
			
		||||
	optdepends = crda: to set the correct wireless channels of your country
 | 
			
		||||
	provides = kernel26-vfio=3.18.4
 | 
			
		||||
	conflicts = kernel26-vfio
 | 
			
		||||
	replaces = kernel26-vfio
 | 
			
		||||
	backup = etc/mkinitcpio.d/linux-vfio.preset
 | 
			
		||||
 | 
			
		||||
pkgname = linux-vfio-headers
 | 
			
		||||
	pkgdesc = Header files and scripts for building modules for Linux-vfio kernel
 | 
			
		||||
	provides = kernel26-vfio-headers=3.18.4
 | 
			
		||||
	conflicts = kernel26-vfio-headers
 | 
			
		||||
	replaces = kernel26-vfio-headers
 | 
			
		||||
 | 
			
		||||
pkgname = linux-vfio-docs
 | 
			
		||||
	pkgdesc = Kernel hackers manual - HTML documentation that comes with the Linux-vfio kernel
 | 
			
		||||
	provides = kernel26-vfio-docs=3.18.4
 | 
			
		||||
	conflicts = kernel26-vfio-docs
 | 
			
		||||
	replaces = kernel26-vfio-docs
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										308
									
								
								PKGBUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								PKGBUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,308 @@
 | 
			
		||||
#Maintainer: Dan Ziemba <zman0900@gmail.com>
 | 
			
		||||
 | 
			
		||||
pkgbase=linux-vfio
 | 
			
		||||
_srcname=linux-3.18
 | 
			
		||||
pkgver=3.18.4
 | 
			
		||||
pkgrel=1
 | 
			
		||||
arch=('i686' 'x86_64')
 | 
			
		||||
url="http://www.kernel.org/"
 | 
			
		||||
license=('GPL2')
 | 
			
		||||
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc')
 | 
			
		||||
options=('!strip')
 | 
			
		||||
source=("https://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz"
 | 
			
		||||
        "https://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.sign"
 | 
			
		||||
        "https://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.xz"
 | 
			
		||||
        "https://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.sign"
 | 
			
		||||
        # the main kernel config files
 | 
			
		||||
        'config' 'config.x86_64'
 | 
			
		||||
        # standard config files for mkinitcpio ramdisk
 | 
			
		||||
        'linux.preset'
 | 
			
		||||
        'change-default-console-loglevel.patch'
 | 
			
		||||
        'override_for_missing_acs_capabilities.patch'
 | 
			
		||||
        'i915_317.patch'
 | 
			
		||||
        )
 | 
			
		||||
sha256sums=('becc413cc9e6d7f5cc52a3ce66d65c3725bc1d1cc1001f4ce6c32b69eb188cbd'
 | 
			
		||||
            'SKIP'
 | 
			
		||||
            '57c74ba5266bb10be335a89d30480739b3de67b5a72b3e0b0d37a27775b1862a'
 | 
			
		||||
            'SKIP'
 | 
			
		||||
            'd3794c8b2cd11b71914b41f7a4e861369d4fa3c29fdd9e1d677ff0c2167eeb52'
 | 
			
		||||
            'df7886f5d57f8f85e89987066dfa5c316e922dc0b22e6e6ad01331333db52377'
 | 
			
		||||
            'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c'
 | 
			
		||||
            '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99'
 | 
			
		||||
            '7320b4abc2918cfb0cb084330a7470887e9a9cfb6496381460bcf4085eb62e0f'
 | 
			
		||||
            'f86ce528b63f198b84c4d8d92d35329aa4000d462217dc2db03bac5eb693cf19')
 | 
			
		||||
validpgpkeys=(
 | 
			
		||||
              'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
 | 
			
		||||
              '647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
 | 
			
		||||
             )
 | 
			
		||||
 | 
			
		||||
_kernelname=${pkgbase#linux}
 | 
			
		||||
 | 
			
		||||
prepare() {
 | 
			
		||||
  cd "${srcdir}/${_srcname}"
 | 
			
		||||
 | 
			
		||||
  # add upstream patch
 | 
			
		||||
  patch -p1 -i "${srcdir}/patch-${pkgver}"
 | 
			
		||||
 | 
			
		||||
  # add latest fixes from stable queue, if needed
 | 
			
		||||
  # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
 | 
			
		||||
  
 | 
			
		||||
  # set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param)
 | 
			
		||||
  # remove this when a Kconfig knob is made available by upstream
 | 
			
		||||
  # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
 | 
			
		||||
  patch -p1 -i "${srcdir}/change-default-console-loglevel.patch"
 | 
			
		||||
  
 | 
			
		||||
  if [ "${CARCH}" = "x86_64" ]; then
 | 
			
		||||
    cat "${srcdir}/config.x86_64" > ./.config
 | 
			
		||||
  else
 | 
			
		||||
    cat "${srcdir}/config" > ./.config
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # patches for vga arbiter fix in intel systems
 | 
			
		||||
  patch -Np1 -i "${srcdir}/i915_317.patch"
 | 
			
		||||
 | 
			
		||||
  # Overrides for missing acs capabilities
 | 
			
		||||
  patch -p1 -i "${srcdir}/override_for_missing_acs_capabilities.patch"
 | 
			
		||||
 | 
			
		||||
  if [ "${_kernelname}" != "" ]; then
 | 
			
		||||
    sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
 | 
			
		||||
    sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # set extraversion to pkgrel
 | 
			
		||||
  sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile
 | 
			
		||||
 | 
			
		||||
  # don't run depmod on 'make install'. We'll do this ourselves in packaging
 | 
			
		||||
  sed -i '2iexit 0' scripts/depmod.sh
 | 
			
		||||
 | 
			
		||||
  # get kernel version
 | 
			
		||||
  make prepare
 | 
			
		||||
 | 
			
		||||
  # load configuration
 | 
			
		||||
  # Configure the kernel. Replace the line below with one of your choice.
 | 
			
		||||
  #make menuconfig # CLI menu for configuration
 | 
			
		||||
  #make nconfig # new CLI menu for configuration
 | 
			
		||||
  #make xconfig # X-based configuration
 | 
			
		||||
  #make oldconfig # using old config from previous kernel version
 | 
			
		||||
  # ... or manually edit .config
 | 
			
		||||
 | 
			
		||||
  # rewrite configuration
 | 
			
		||||
  yes "" | make config >/dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build() {
 | 
			
		||||
  cd "${srcdir}/${_srcname}"
 | 
			
		||||
 | 
			
		||||
  make ${MAKEFLAGS} LOCALVERSION= bzImage modules
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_package() {
 | 
			
		||||
  pkgdesc="The ${pkgbase/linux/Linux} kernel and modules"
 | 
			
		||||
  [ "${pkgbase}" = "linux" ] && groups=('base')
 | 
			
		||||
  depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
 | 
			
		||||
  optdepends=('crda: to set the correct wireless channels of your country')
 | 
			
		||||
  provides=("kernel26${_kernelname}=${pkgver}")
 | 
			
		||||
  conflicts=("kernel26${_kernelname}")
 | 
			
		||||
  replaces=("kernel26${_kernelname}")
 | 
			
		||||
  backup=("etc/mkinitcpio.d/${pkgbase}.preset")
 | 
			
		||||
  install=linux.install
 | 
			
		||||
 | 
			
		||||
  cd "${srcdir}/${_srcname}"
 | 
			
		||||
 | 
			
		||||
  KARCH=x86
 | 
			
		||||
 | 
			
		||||
  # get kernel version
 | 
			
		||||
  _kernver="$(make LOCALVERSION= kernelrelease)"
 | 
			
		||||
  _basekernel=${_kernver%%-*}
 | 
			
		||||
  _basekernel=${_basekernel%.*}
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
 | 
			
		||||
  make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install
 | 
			
		||||
  cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}"
 | 
			
		||||
 | 
			
		||||
  # set correct depmod command for install
 | 
			
		||||
  cp -f "${startdir}/${install}" "${startdir}/${install}.pkg"
 | 
			
		||||
  true && install=${install}.pkg
 | 
			
		||||
  sed \
 | 
			
		||||
    -e  "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \
 | 
			
		||||
    -e  "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \
 | 
			
		||||
    -i "${startdir}/${install}"
 | 
			
		||||
 | 
			
		||||
  # install mkinitcpio preset file for kernel
 | 
			
		||||
  install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
 | 
			
		||||
  sed \
 | 
			
		||||
    -e "1s|'linux.*'|'${pkgbase}'|" \
 | 
			
		||||
    -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \
 | 
			
		||||
    -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \
 | 
			
		||||
    -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \
 | 
			
		||||
    -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
 | 
			
		||||
 | 
			
		||||
  # remove build and source links
 | 
			
		||||
  rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
 | 
			
		||||
  # remove the firmware
 | 
			
		||||
  rm -rf "${pkgdir}/lib/firmware"
 | 
			
		||||
  # gzip -9 all modules to save 100MB of space
 | 
			
		||||
  find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
 | 
			
		||||
  # make room for external modules
 | 
			
		||||
  ln -s "../extramodules-${_basekernel}${_kernelname:--ARCH}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
 | 
			
		||||
  # add real version for building modules and running depmod from post_install/upgrade
 | 
			
		||||
  mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--ARCH}"
 | 
			
		||||
  echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--ARCH}/version"
 | 
			
		||||
 | 
			
		||||
  # Now we call depmod...
 | 
			
		||||
  depmod -b "${pkgdir}" -F System.map "${_kernver}"
 | 
			
		||||
 | 
			
		||||
  # move module tree /lib -> /usr/lib
 | 
			
		||||
  mkdir -p "${pkgdir}/usr"
 | 
			
		||||
  mv "${pkgdir}/lib" "${pkgdir}/usr/"
 | 
			
		||||
 | 
			
		||||
  # add vmlinux
 | 
			
		||||
  install -D -m644 vmlinux "${pkgdir}/usr/lib/modules/${_kernver}/build/vmlinux" 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_package-headers() {
 | 
			
		||||
  pkgdesc="Header files and scripts for building modules for ${pkgbase/linux/Linux} kernel"
 | 
			
		||||
  provides=("kernel26${_kernelname}-headers=${pkgver}")
 | 
			
		||||
  conflicts=("kernel26${_kernelname}-headers")
 | 
			
		||||
  replaces=("kernel26${_kernelname}-headers")
 | 
			
		||||
 | 
			
		||||
  install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
 | 
			
		||||
 | 
			
		||||
  cd "${srcdir}/${_srcname}"
 | 
			
		||||
  install -D -m644 Makefile \
 | 
			
		||||
    "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile"
 | 
			
		||||
  install -D -m644 kernel/Makefile \
 | 
			
		||||
    "${pkgdir}/usr/lib/modules/${_kernver}/build/kernel/Makefile"
 | 
			
		||||
  install -D -m644 .config \
 | 
			
		||||
    "${pkgdir}/usr/lib/modules/${_kernver}/build/.config"
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include"
 | 
			
		||||
 | 
			
		||||
  for i in acpi asm-generic config crypto drm generated keys linux math-emu \
 | 
			
		||||
    media net pcmcia scsi sound trace uapi video xen; do
 | 
			
		||||
    cp -a include/${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/include/"
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # copy arch includes for external modules
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86"
 | 
			
		||||
  cp -a arch/x86/include "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86/"
 | 
			
		||||
 | 
			
		||||
  # copy files necessary for later builds, like nvidia and vmware
 | 
			
		||||
  cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build"
 | 
			
		||||
  cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build"
 | 
			
		||||
 | 
			
		||||
  # fix permissions on scripts dir
 | 
			
		||||
  chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts"
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions"
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel"
 | 
			
		||||
 | 
			
		||||
  cp arch/${KARCH}/Makefile "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/"
 | 
			
		||||
 | 
			
		||||
  if [ "${CARCH}" = "i686" ]; then
 | 
			
		||||
    cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel/"
 | 
			
		||||
 | 
			
		||||
  # add docbook makefile
 | 
			
		||||
  install -D -m644 Documentation/DocBook/Makefile \
 | 
			
		||||
    "${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile"
 | 
			
		||||
 | 
			
		||||
  # add dm headers
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md"
 | 
			
		||||
  cp drivers/md/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md"
 | 
			
		||||
 | 
			
		||||
  # add inotify.h
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux"
 | 
			
		||||
  cp include/linux/inotify.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux/"
 | 
			
		||||
 | 
			
		||||
  # add wireless headers
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/"
 | 
			
		||||
  cp net/mac80211/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/"
 | 
			
		||||
 | 
			
		||||
  # add dvb headers for external modules
 | 
			
		||||
  # in reference to:
 | 
			
		||||
  # http://bugs.archlinux.org/task/9912
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core"
 | 
			
		||||
  cp drivers/media/dvb-core/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core/"
 | 
			
		||||
  # and...
 | 
			
		||||
  # http://bugs.archlinux.org/task/11194
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/"
 | 
			
		||||
  cp include/config/dvb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/"
 | 
			
		||||
 | 
			
		||||
  # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
 | 
			
		||||
  # in reference to:
 | 
			
		||||
  # http://bugs.archlinux.org/task/13146
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
 | 
			
		||||
  cp drivers/media/dvb-frontends/lgdt330x.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/"
 | 
			
		||||
  cp drivers/media/i2c/msp3400-driver.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/"
 | 
			
		||||
 | 
			
		||||
  # add dvb headers
 | 
			
		||||
  # in reference to:
 | 
			
		||||
  # http://bugs.archlinux.org/task/20402
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb"
 | 
			
		||||
  cp drivers/media/usb/dvb-usb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb/"
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends"
 | 
			
		||||
  cp drivers/media/dvb-frontends/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners"
 | 
			
		||||
  cp drivers/media/tuners/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners/"
 | 
			
		||||
 | 
			
		||||
  # add xfs and shmem for aufs building
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs"
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/mm"
 | 
			
		||||
  # removed in 3.17 series
 | 
			
		||||
  # cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
 | 
			
		||||
 | 
			
		||||
  # copy in Kconfig files
 | 
			
		||||
  for i in $(find . -name "Kconfig*"); do
 | 
			
		||||
    mkdir -p "${pkgdir}"/usr/lib/modules/${_kernver}/build/`echo ${i} | sed 's|/Kconfig.*||'`
 | 
			
		||||
    cp ${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/${i}"
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  chown -R root.root "${pkgdir}/usr/lib/modules/${_kernver}/build"
 | 
			
		||||
  find "${pkgdir}/usr/lib/modules/${_kernver}/build" -type d -exec chmod 755 {} \;
 | 
			
		||||
 | 
			
		||||
  # strip scripts directory
 | 
			
		||||
  find "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do
 | 
			
		||||
    case "$(file -bi "${binary}")" in
 | 
			
		||||
      *application/x-sharedlib*) # Libraries (.so)
 | 
			
		||||
        /usr/bin/strip ${STRIP_SHARED} "${binary}";;
 | 
			
		||||
      *application/x-archive*) # Libraries (.a)
 | 
			
		||||
        /usr/bin/strip ${STRIP_STATIC} "${binary}";;
 | 
			
		||||
      *application/x-executable*) # Binaries
 | 
			
		||||
        /usr/bin/strip ${STRIP_BINARIES} "${binary}";;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # remove unneeded architectures
 | 
			
		||||
  rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,mips,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_package-docs() {
 | 
			
		||||
  pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase/linux/Linux} kernel"
 | 
			
		||||
  provides=("kernel26${_kernelname}-docs=${pkgver}")
 | 
			
		||||
  conflicts=("kernel26${_kernelname}-docs")
 | 
			
		||||
  replaces=("kernel26${_kernelname}-docs")
 | 
			
		||||
 | 
			
		||||
  cd "${srcdir}/${_srcname}"
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build"
 | 
			
		||||
  cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build"
 | 
			
		||||
  find "${pkgdir}" -type f -exec chmod 444 {} \;
 | 
			
		||||
  find "${pkgdir}" -type d -exec chmod 755 {} \;
 | 
			
		||||
 | 
			
		||||
  # remove a file already in linux package
 | 
			
		||||
  rm -f "${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkgname=("${pkgbase}" "${pkgbase}-headers" "${pkgbase}-docs")
 | 
			
		||||
for _p in ${pkgname[@]}; do
 | 
			
		||||
  eval "package_${_p}() {
 | 
			
		||||
    $(declare -f "_package${_p#${pkgbase}}")
 | 
			
		||||
    _package${_p#${pkgbase}}
 | 
			
		||||
  }"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# vim:set ts=8 sts=2 sw=2 et:
 | 
			
		||||
							
								
								
									
										5
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
This is an Arch Linux PKGBUILD that tracks the repositoriy kernel version but
 | 
			
		||||
has the necessary patches applied to allow GPU passthrough with KVM using
 | 
			
		||||
vfio.
 | 
			
		||||
 | 
			
		||||
See https://bbs.archlinux.org/viewtopic.php?id=162768 for more info.
 | 
			
		||||
							
								
								
									
										11
									
								
								change-default-console-loglevel.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								change-default-console-loglevel.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
--- linux-3.16/include/linux/printk.h.old	2014-08-04 18:48:30.686043266 +0200
 | 
			
		||||
+++ linux-3.16/include/linux/printk.h	2014-08-04 18:48:47.706218528 +0200
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
 #define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
 | 
			
		||||
 #define CONSOLE_LOGLEVEL_MIN	 1 /* Minimum loglevel we let people use */
 | 
			
		||||
 #define CONSOLE_LOGLEVEL_QUIET	 4 /* Shhh ..., when booted with "quiet" */
 | 
			
		||||
-#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG */
 | 
			
		||||
+#define CONSOLE_LOGLEVEL_DEFAULT 4 /* anything MORE serious than KERN_DEBUG */
 | 
			
		||||
 #define CONSOLE_LOGLEVEL_DEBUG	10 /* issue debug messages */
 | 
			
		||||
 #define CONSOLE_LOGLEVEL_MOTORMOUTH 15	/* You can't shut this one up */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6972
									
								
								config.x86_64
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6972
									
								
								config.x86_64
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										156
									
								
								i915_317.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								i915_317.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
			
		||||
diff -rupN linux-3.17.old/drivers/gpu/drm/i915/i915_dma.c linux-3.17/drivers/gpu/drm/i915/i915_dma.c
 | 
			
		||||
--- linux-3.17.old/drivers/gpu/drm/i915/i915_dma.c	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/drivers/gpu/drm/i915/i915_dma.c	2014-10-08 13:25:35.261920170 -0200
 | 
			
		||||
@@ -1316,10 +1316,20 @@ static int i915_load_modeset_init(struct
 | 
			
		||||
 	 * If we are a secondary display controller (!PCI_DISPLAY_CLASS_VGA),
 | 
			
		||||
 	 * then we do not take part in VGA arbitration and the
 | 
			
		||||
 	 * vga_client_register() fails with -ENODEV.
 | 
			
		||||
+	 *
 | 
			
		||||
+	 * NB.  The set_decode callback here actually only works on GMCH
 | 
			
		||||
+	 * devices, on newer HD devices we can only disable VGA MMIO space.
 | 
			
		||||
+	 * Disabling VGA I/O space requires disabling I/O in the PCI command
 | 
			
		||||
+	 * register.  Nonetheless, we like to pretend that we participate in
 | 
			
		||||
+	 * VGA arbitration and can dynamically disable VGA I/O space because
 | 
			
		||||
+	 * this makes X happy, even though it's a complete lie.
 | 
			
		||||
 	 */
 | 
			
		||||
-	ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
 | 
			
		||||
-	if (ret && ret != -ENODEV)
 | 
			
		||||
-		goto out;
 | 
			
		||||
+	if (!i915.enable_hd_vgaarb || !HAS_PCH_SPLIT(dev)) {
 | 
			
		||||
+		ret = vga_client_register(dev->pdev, dev, NULL,
 | 
			
		||||
+					  i915_vga_set_decode);
 | 
			
		||||
+		if (ret && ret != -ENODEV)
 | 
			
		||||
+			goto out;
 | 
			
		||||
+	}
 | 
			
		||||
 
 | 
			
		||||
 	intel_register_dsm_handler();
 | 
			
		||||
 
 | 
			
		||||
@@ -1369,6 +1379,12 @@ static int i915_load_modeset_init(struct
 | 
			
		||||
 	if (ret)
 | 
			
		||||
 		goto cleanup_gem;
 | 
			
		||||
 
 | 
			
		||||
+	/*
 | 
			
		||||
+	 * Must do this after fbcon init so that
 | 
			
		||||
+	 * vgacon_save_screen() works during the handover.
 | 
			
		||||
+	 */
 | 
			
		||||
+	i915_disable_vga_mem(dev);
 | 
			
		||||
+
 | 
			
		||||
 	/* Only enable hotplug handling once the fbdev is fully set up. */
 | 
			
		||||
 	intel_hpd_init(dev);
 | 
			
		||||
 
 | 
			
		||||
diff -rupN linux-3.17.old/drivers/gpu/drm/i915/i915_drv.h linux-3.17/drivers/gpu/drm/i915/i915_drv.h
 | 
			
		||||
--- linux-3.17.old/drivers/gpu/drm/i915/i915_drv.h	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/drivers/gpu/drm/i915/i915_drv.h	2014-10-08 13:26:45.200867353 -0200
 | 
			
		||||
@@ -2147,6 +2147,7 @@ struct i915_params {
 | 
			
		||||
 	bool reset;
 | 
			
		||||
 	bool disable_display;
 | 
			
		||||
 	bool disable_vtd_wa;
 | 
			
		||||
+	bool enable_hd_vgaarb;
 | 
			
		||||
 	int use_mmio_flip;
 | 
			
		||||
 	bool mmio_debug;
 | 
			
		||||
 };
 | 
			
		||||
diff -rupN linux-3.17.old/drivers/gpu/drm/i915/i915_params.c linux-3.17/drivers/gpu/drm/i915/i915_params.c
 | 
			
		||||
--- linux-3.17.old/drivers/gpu/drm/i915/i915_params.c	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/drivers/gpu/drm/i915/i915_params.c	2014-10-08 13:28:08.960803683 -0200
 | 
			
		||||
@@ -48,6 +48,7 @@ struct i915_params i915 __read_mostly =
 | 
			
		||||
 	.disable_display = 0,
 | 
			
		||||
 	.enable_cmd_parser = 1,
 | 
			
		||||
 	.disable_vtd_wa = 0,
 | 
			
		||||
+	.enable_hd_vgaarb = false,
 | 
			
		||||
 	.use_mmio_flip = 0,
 | 
			
		||||
 	.mmio_debug = 0,
 | 
			
		||||
 };
 | 
			
		||||
@@ -159,6 +160,10 @@ module_param_named(enable_cmd_parser, i9
 | 
			
		||||
 MODULE_PARM_DESC(enable_cmd_parser,
 | 
			
		||||
 		 "Enable command parsing (1=enabled [default], 0=disabled)");
 | 
			
		||||
 
 | 
			
		||||
+module_param_named(enable_hd_vgaarb, i915.enable_hd_vgaarb, bool, 0444);
 | 
			
		||||
+MODULE_PARM_DESC(enable_hd_vgaarb,
 | 
			
		||||
+	"Enable support for VGA arbitration on Intel HD IGD. (default: false)");
 | 
			
		||||
+
 | 
			
		||||
 module_param_named(use_mmio_flip, i915.use_mmio_flip, int, 0600);
 | 
			
		||||
 MODULE_PARM_DESC(use_mmio_flip,
 | 
			
		||||
 		 "use MMIO flips (-1=never, 0=driver discretion [default], 1=always)");
 | 
			
		||||
diff -rupN linux-3.17.old/drivers/gpu/drm/i915/intel_display.c linux-3.17/drivers/gpu/drm/i915/intel_display.c
 | 
			
		||||
--- linux-3.17.old/drivers/gpu/drm/i915/intel_display.c	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/drivers/gpu/drm/i915/intel_display.c	2014-10-08 13:25:35.416920053 -0200
 | 
			
		||||
@@ -12554,6 +12554,33 @@ static void i915_disable_vga(struct drm_
 | 
			
		||||
 	POSTING_READ(vga_reg);
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+static void i915_enable_vga_mem(struct drm_device *dev)
 | 
			
		||||
+{
 | 
			
		||||
+	/* Enable VGA memory on Intel HD */
 | 
			
		||||
+	if (i915.enable_hd_vgaarb && HAS_PCH_SPLIT(dev)) {
 | 
			
		||||
+		vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
 | 
			
		||||
+		outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE);
 | 
			
		||||
+		vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
 | 
			
		||||
+						   VGA_RSRC_LEGACY_MEM |
 | 
			
		||||
+						   VGA_RSRC_NORMAL_IO |
 | 
			
		||||
+						   VGA_RSRC_NORMAL_MEM);
 | 
			
		||||
+		vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
 | 
			
		||||
+	}
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+void i915_disable_vga_mem(struct drm_device *dev)
 | 
			
		||||
+{
 | 
			
		||||
+	/* Disable VGA memory on Intel HD */
 | 
			
		||||
+	if (i915.enable_hd_vgaarb && HAS_PCH_SPLIT(dev)) {
 | 
			
		||||
+		vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
 | 
			
		||||
+		outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
 | 
			
		||||
+		vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
 | 
			
		||||
+						   VGA_RSRC_NORMAL_IO |
 | 
			
		||||
+						   VGA_RSRC_NORMAL_MEM);
 | 
			
		||||
+		vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
 | 
			
		||||
+	}
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 void intel_modeset_init_hw(struct drm_device *dev)
 | 
			
		||||
 {
 | 
			
		||||
 	intel_prepare_ddi(dev);
 | 
			
		||||
@@ -12891,6 +12918,7 @@ void i915_redisable_vga_power_on(struct
 | 
			
		||||
 	if (!(I915_READ(vga_reg) & VGA_DISP_DISABLE)) {
 | 
			
		||||
 		DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
 | 
			
		||||
 		i915_disable_vga(dev);
 | 
			
		||||
+		i915_disable_vga_mem(dev);
 | 
			
		||||
 	}
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
@@ -13144,6 +13172,8 @@ void intel_modeset_cleanup(struct drm_de
 | 
			
		||||
 
 | 
			
		||||
 	intel_disable_fbc(dev);
 | 
			
		||||
 
 | 
			
		||||
+	i915_enable_vga_mem(dev);
 | 
			
		||||
+
 | 
			
		||||
 	intel_disable_gt_powersave(dev);
 | 
			
		||||
 
 | 
			
		||||
 	ironlake_teardown_rc6(dev);
 | 
			
		||||
diff -rupN linux-3.17.old/drivers/gpu/drm/i915/intel_drv.h linux-3.17/drivers/gpu/drm/i915/intel_drv.h
 | 
			
		||||
--- linux-3.17.old/drivers/gpu/drm/i915/intel_drv.h	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/drivers/gpu/drm/i915/intel_drv.h	2014-10-08 13:25:35.416920053 -0200
 | 
			
		||||
@@ -1102,4 +1102,6 @@ int intel_sprite_get_colorkey(struct drm
 | 
			
		||||
 /* intel_tv.c */
 | 
			
		||||
 void intel_tv_init(struct drm_device *dev);
 | 
			
		||||
 
 | 
			
		||||
+extern void i915_disable_vga_mem(struct drm_device *dev);
 | 
			
		||||
+
 | 
			
		||||
 #endif /* __INTEL_DRV_H__ */
 | 
			
		||||
diff -rupN linux-3.17.old/include/linux/vgaarb.h linux-3.17/include/linux/vgaarb.h
 | 
			
		||||
--- linux-3.17.old/include/linux/vgaarb.h	2014-10-05 17:23:04.000000000 -0200
 | 
			
		||||
+++ linux-3.17/include/linux/vgaarb.h	2014-10-08 13:25:35.426920046 -0200
 | 
			
		||||
@@ -65,8 +65,15 @@ struct pci_dev;
 | 
			
		||||
  *     out of the arbitration process (and can be safe to take
 | 
			
		||||
  *     interrupts at any time.
 | 
			
		||||
  */
 | 
			
		||||
+#if defined(CONFIG_VGA_ARB)
 | 
			
		||||
 extern void vga_set_legacy_decoding(struct pci_dev *pdev,
 | 
			
		||||
 				    unsigned int decodes);
 | 
			
		||||
+#else
 | 
			
		||||
+static inline void vga_set_legacy_decoding(struct pci_dev *pdev,
 | 
			
		||||
+					   unsigned int decodes)
 | 
			
		||||
+{
 | 
			
		||||
+}
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 /**
 | 
			
		||||
  *     vga_get         - acquire & locks VGA resources
 | 
			
		||||
							
								
								
									
										37
									
								
								linux.install
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								linux.install
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
# arg 1:  the new package version
 | 
			
		||||
# arg 2:  the old package version
 | 
			
		||||
 | 
			
		||||
KERNEL_NAME=
 | 
			
		||||
KERNEL_VERSION=
 | 
			
		||||
 | 
			
		||||
post_install () {
 | 
			
		||||
  # updating module dependencies
 | 
			
		||||
  echo ">>> Updating module dependencies. Please wait ..."
 | 
			
		||||
  depmod ${KERNEL_VERSION}
 | 
			
		||||
  echo ">>> Generating initial ramdisk, using mkinitcpio.  Please wait..."
 | 
			
		||||
  mkinitcpio -p linux${KERNEL_NAME}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
post_upgrade() {
 | 
			
		||||
  if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then
 | 
			
		||||
    echo "WARNING: /boot appears to be a separate partition but is not mounted."
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # updating module dependencies
 | 
			
		||||
  echo ">>> Updating module dependencies. Please wait ..."
 | 
			
		||||
  depmod ${KERNEL_VERSION}
 | 
			
		||||
  echo ">>> Generating initial ramdisk, using mkinitcpio.  Please wait..."
 | 
			
		||||
  mkinitcpio -p linux${KERNEL_NAME}
 | 
			
		||||
 | 
			
		||||
  if [ $(vercmp $2 3.13) -lt 0 ]; then
 | 
			
		||||
    echo ">>> WARNING: AT keyboard support is no longer built into the kernel."
 | 
			
		||||
    echo ">>>          In order to use your keyboard during early init, you MUST"
 | 
			
		||||
    echo ">>>          include the 'keyboard' hook in your mkinitcpio.conf."
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
post_remove() {
 | 
			
		||||
  # also remove the compat symlinks
 | 
			
		||||
  rm -f boot/initramfs-linux${KERNEL_NAME}.img
 | 
			
		||||
  rm -f boot/initramfs-linux${KERNEL_NAME}-fallback.img
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								linux.preset
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								linux.preset
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
# mkinitcpio preset file for the 'linux' package
 | 
			
		||||
 | 
			
		||||
ALL_config="/etc/mkinitcpio.conf"
 | 
			
		||||
ALL_kver="/boot/vmlinuz-linux"
 | 
			
		||||
 | 
			
		||||
PRESETS=('default' 'fallback')
 | 
			
		||||
 | 
			
		||||
#default_config="/etc/mkinitcpio.conf"
 | 
			
		||||
default_image="/boot/initramfs-linux.img"
 | 
			
		||||
#default_options=""
 | 
			
		||||
 | 
			
		||||
#fallback_config="/etc/mkinitcpio.conf"
 | 
			
		||||
fallback_image="/boot/initramfs-linux-fallback.img" 
 | 
			
		||||
fallback_options="-S autodetect"
 | 
			
		||||
							
								
								
									
										147
									
								
								override_for_missing_acs_capabilities.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								override_for_missing_acs_capabilities.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
diff -rupN linux-3.15.old/Documentation/kernel-parameters.txt linux-3.15/Documentation/kernel-parameters.txt
 | 
			
		||||
--- linux-3.15.old/Documentation/kernel-parameters.txt	2014-06-08 15:19:54.000000000 -0300
 | 
			
		||||
+++ linux-3.15/Documentation/kernel-parameters.txt	2014-06-09 18:05:31.744055580 -0300
 | 
			
		||||
@@ -2554,6 +2554,16 @@ bytes respectively. Such letter suffixes
 | 
			
		||||
 		nomsi	Do not use MSI for native PCIe PME signaling (this makes
 | 
			
		||||
 			all PCIe root ports use INTx for all services).
 | 
			
		||||
 
 | 
			
		||||
+	pcie_acs_override =
 | 
			
		||||
+			[PCIE] Override missing PCIe ACS support for:
 | 
			
		||||
+		downstream
 | 
			
		||||
+			All downstream ports - full ACS capabilties
 | 
			
		||||
+		multifunction
 | 
			
		||||
+			All multifunction devices - multifunction ACS subset
 | 
			
		||||
+		id:nnnn:nnnn
 | 
			
		||||
+			Specfic device - full ACS capabilities
 | 
			
		||||
+			Specified as vid:did (vendor/device ID) in hex
 | 
			
		||||
+
 | 
			
		||||
 	pcmv=		[HW,PCMCIA] BadgePAD 4
 | 
			
		||||
 
 | 
			
		||||
 	pd_ignore_unused
 | 
			
		||||
diff -rupN linux-3.15.old/drivers/pci/quirks.c linux-3.15/drivers/pci/quirks.c
 | 
			
		||||
--- linux-3.15.old/drivers/pci/quirks.c	2014-06-08 15:19:54.000000000 -0300
 | 
			
		||||
+++ linux-3.15/drivers/pci/quirks.c	2014-06-09 18:06:36.688743183 -0300
 | 
			
		||||
@@ -3384,6 +3384,107 @@ struct pci_dev *pci_get_dma_source(struc
 | 
			
		||||
 	return pci_dev_get(dev);
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+static bool acs_on_downstream;
 | 
			
		||||
+static bool acs_on_multifunction;
 | 
			
		||||
+
 | 
			
		||||
+#define NUM_ACS_IDS 16
 | 
			
		||||
+struct acs_on_id {
 | 
			
		||||
+	unsigned short vendor;
 | 
			
		||||
+	unsigned short device;
 | 
			
		||||
+};
 | 
			
		||||
+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
 | 
			
		||||
+static u8 max_acs_id;
 | 
			
		||||
+
 | 
			
		||||
+static __init int pcie_acs_override_setup(char *p)
 | 
			
		||||
+{
 | 
			
		||||
+	if (!p)
 | 
			
		||||
+		return -EINVAL;
 | 
			
		||||
+
 | 
			
		||||
+	while (*p) {
 | 
			
		||||
+		if (!strncmp(p, "downstream", 10))
 | 
			
		||||
+			acs_on_downstream = true;
 | 
			
		||||
+		if (!strncmp(p, "multifunction", 13))
 | 
			
		||||
+			acs_on_multifunction = true;
 | 
			
		||||
+		if (!strncmp(p, "id:", 3)) {
 | 
			
		||||
+			char opt[5];
 | 
			
		||||
+			int ret;
 | 
			
		||||
+			long val;
 | 
			
		||||
+
 | 
			
		||||
+			if (max_acs_id >= NUM_ACS_IDS - 1) {
 | 
			
		||||
+				pr_warn("Out of PCIe ACS override slots (%d)\n",
 | 
			
		||||
+					NUM_ACS_IDS);
 | 
			
		||||
+				goto next;
 | 
			
		||||
+			}
 | 
			
		||||
+
 | 
			
		||||
+			p += 3;
 | 
			
		||||
+			snprintf(opt, 5, "%s", p);
 | 
			
		||||
+			ret = kstrtol(opt, 16, &val);
 | 
			
		||||
+			if (ret) {
 | 
			
		||||
+				pr_warn("PCIe ACS ID parse error %d\n", ret);
 | 
			
		||||
+				goto next;
 | 
			
		||||
+			}
 | 
			
		||||
+			acs_on_ids[max_acs_id].vendor = val;
 | 
			
		||||
+
 | 
			
		||||
+			p += strcspn(p, ":");
 | 
			
		||||
+			if (*p != ':') {
 | 
			
		||||
+				pr_warn("PCIe ACS invalid ID\n");
 | 
			
		||||
+				goto next;
 | 
			
		||||
+			}
 | 
			
		||||
+
 | 
			
		||||
+			p++;
 | 
			
		||||
+			snprintf(opt, 5, "%s", p);
 | 
			
		||||
+			ret = kstrtol(opt, 16, &val);
 | 
			
		||||
+			if (ret) {
 | 
			
		||||
+				pr_warn("PCIe ACS ID parse error %d\n", ret);
 | 
			
		||||
+				goto next;
 | 
			
		||||
+			}
 | 
			
		||||
+			acs_on_ids[max_acs_id].device = val;
 | 
			
		||||
+			max_acs_id++;
 | 
			
		||||
+		}
 | 
			
		||||
+next:
 | 
			
		||||
+		p += strcspn(p, ",");
 | 
			
		||||
+		if (*p == ',')
 | 
			
		||||
+			p++;
 | 
			
		||||
+	}
 | 
			
		||||
+
 | 
			
		||||
+	if (acs_on_downstream || acs_on_multifunction || max_acs_id)
 | 
			
		||||
+		pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
 | 
			
		||||
+
 | 
			
		||||
+	return 0;
 | 
			
		||||
+}
 | 
			
		||||
+early_param("pcie_acs_override", pcie_acs_override_setup);
 | 
			
		||||
+
 | 
			
		||||
+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
 | 
			
		||||
+{
 | 
			
		||||
+	int i;
 | 
			
		||||
+
 | 
			
		||||
+	/* Never override ACS for legacy devices or devices with ACS caps */
 | 
			
		||||
+	if (!pci_is_pcie(dev) ||
 | 
			
		||||
+	    pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
 | 
			
		||||
+		return -ENOTTY;
 | 
			
		||||
+
 | 
			
		||||
+	for (i = 0; i < max_acs_id; i++)
 | 
			
		||||
+		if (acs_on_ids[i].vendor == dev->vendor &&
 | 
			
		||||
+		    acs_on_ids[i].device == dev->device)
 | 
			
		||||
+			return 1;
 | 
			
		||||
+
 | 
			
		||||
+	switch (pci_pcie_type(dev)) {
 | 
			
		||||
+	case PCI_EXP_TYPE_DOWNSTREAM:
 | 
			
		||||
+	case PCI_EXP_TYPE_ROOT_PORT:
 | 
			
		||||
+		if (acs_on_downstream)
 | 
			
		||||
+			return 1;
 | 
			
		||||
+		break;
 | 
			
		||||
+	case PCI_EXP_TYPE_ENDPOINT:
 | 
			
		||||
+	case PCI_EXP_TYPE_UPSTREAM:
 | 
			
		||||
+	case PCI_EXP_TYPE_LEG_END:
 | 
			
		||||
+	case PCI_EXP_TYPE_RC_END:
 | 
			
		||||
+		if (acs_on_multifunction && dev->multifunction)
 | 
			
		||||
+			return 1;
 | 
			
		||||
+	}
 | 
			
		||||
+
 | 
			
		||||
+	return -ENOTTY;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 /*
 | 
			
		||||
  * AMD has indicated that the devices below do not support peer-to-peer
 | 
			
		||||
  * in any system where they are found in the southbridge with an AMD
 | 
			
		||||
@@ -3483,6 +3584,7 @@ static int pci_quirk_intel_pch_acs(struc
 | 
			
		||||
 	return acs_flags & ~flags ? 0 : 1;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+
 | 
			
		||||
 static const struct pci_dev_acs_enabled {
 | 
			
		||||
 	u16 vendor;
 | 
			
		||||
 	u16 device;
 | 
			
		||||
@@ -3495,6 +3597,7 @@ static const struct pci_dev_acs_enabled
 | 
			
		||||
 	{ PCI_VENDOR_ID_ATI, 0x4384, pci_quirk_amd_sb_acs },
 | 
			
		||||
 	{ PCI_VENDOR_ID_ATI, 0x4399, pci_quirk_amd_sb_acs },
 | 
			
		||||
 	{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs },
 | 
			
		||||
+	{ PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
 | 
			
		||||
 	{ 0 }
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user