Merge branch 'kernel-4.1'
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86_64 4.0.4 Kernel Configuration
|
||||
# Linux/x86_64 4.1.2 Kernel Configuration
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_X86_64=y
|
||||
@@ -41,6 +41,7 @@ CONFIG_X86_HT=y
|
||||
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
|
||||
CONFIG_ARCH_SUPPORTS_UPROBES=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_PGTABLE_LEVELS=4
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_BUILDTIME_EXTABLE_SORT=y
|
||||
@@ -98,7 +99,6 @@ CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
|
||||
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
|
||||
CONFIG_GENERIC_CMOS_UPDATE=y
|
||||
@@ -147,6 +147,7 @@ CONFIG_RCU_NOCB_CPU=y
|
||||
# CONFIG_RCU_NOCB_CPU_NONE is not set
|
||||
# CONFIG_RCU_NOCB_CPU_ZERO is not set
|
||||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
# CONFIG_RCU_EXPEDITE_BOOT is not set
|
||||
CONFIG_BUILD_BIN2C=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
@@ -203,6 +204,7 @@ CONFIG_HAVE_PCSPKR_PLATFORM=y
|
||||
CONFIG_BPF=y
|
||||
# CONFIG_EXPERT is not set
|
||||
CONFIG_UID16=y
|
||||
CONFIG_MULTIUSER=y
|
||||
CONFIG_SGETMASK_SYSCALL=y
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
@@ -285,9 +287,11 @@ CONFIG_HAVE_CONTEXT_TRACKING=y
|
||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
|
||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
|
||||
CONFIG_OLD_SIGSUSPEND3=y
|
||||
CONFIG_COMPAT_OLD_SIGACTION=y
|
||||
|
||||
@@ -402,7 +406,6 @@ CONFIG_KVM_GUEST=y
|
||||
CONFIG_PARAVIRT_TIME_ACCOUNTING=y
|
||||
CONFIG_PARAVIRT_CLOCK=y
|
||||
CONFIG_NO_BOOTMEM=y
|
||||
# CONFIG_MEMTEST is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MPSC is not set
|
||||
# CONFIG_MCORE2 is not set
|
||||
@@ -431,7 +434,6 @@ CONFIG_SCHED_MC=y
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_X86_UP_APIC_MSI=y
|
||||
CONFIG_X86_LOCAL_APIC=y
|
||||
CONFIG_X86_IO_APIC=y
|
||||
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
|
||||
@@ -449,13 +451,11 @@ CONFIG_MICROCODE=m
|
||||
CONFIG_MICROCODE_INTEL=y
|
||||
CONFIG_MICROCODE_AMD=y
|
||||
CONFIG_MICROCODE_OLD_INTERFACE=y
|
||||
# CONFIG_MICROCODE_INTEL_EARLY is not set
|
||||
# CONFIG_MICROCODE_AMD_EARLY is not set
|
||||
CONFIG_X86_MSR=y
|
||||
CONFIG_X86_CPUID=y
|
||||
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_DIRECT_GBPAGES=y
|
||||
CONFIG_X86_DIRECT_GBPAGES=y
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_AMD_NUMA=y
|
||||
CONFIG_X86_64_ACPI_NUMA=y
|
||||
@@ -515,6 +515,7 @@ CONFIG_ZPOOL=y
|
||||
# CONFIG_ZBUD is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
# CONFIG_X86_PMEM_LEGACY is not set
|
||||
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
|
||||
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
|
||||
CONFIG_X86_RESERVE_LOW=64
|
||||
@@ -583,6 +584,7 @@ CONFIG_PM_CLK=y
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
|
||||
CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
|
||||
CONFIG_ACPI_SLEEP=y
|
||||
# CONFIG_ACPI_PROCFS_POWER is not set
|
||||
CONFIG_ACPI_EC_DEBUGFS=m
|
||||
@@ -738,7 +740,6 @@ CONFIG_HOTPLUG_PCI_SHPC=m
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_COMPAT_BINFMT_ELF=y
|
||||
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
|
||||
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
|
||||
CONFIG_BINFMT_SCRIPT=y
|
||||
# CONFIG_HAVE_AOUT is not set
|
||||
@@ -1077,13 +1078,13 @@ CONFIG_IP_VS_PE_SIP=m
|
||||
CONFIG_NF_DEFRAG_IPV4=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
|
||||
CONFIG_NF_LOG_ARP=m
|
||||
CONFIG_NF_LOG_IPV4=m
|
||||
CONFIG_NF_TABLES_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NF_REJECT_IPV4=y
|
||||
CONFIG_NFT_REJECT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_NF_LOG_ARP=m
|
||||
CONFIG_NF_LOG_IPV4=m
|
||||
CONFIG_NF_REJECT_IPV4=y
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_NAT_MASQUERADE_IPV4=m
|
||||
@@ -1094,6 +1095,7 @@ CONFIG_NF_NAT_H323=m
|
||||
CONFIG_IP_NF_IPTABLES=y
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_PSD=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=y
|
||||
@@ -1107,6 +1109,7 @@ CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_TARGET_IFWLOG=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_SECURITY=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
@@ -1120,8 +1123,8 @@ CONFIG_NF_DEFRAG_IPV6=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NF_TABLES_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NF_REJECT_IPV6=m
|
||||
CONFIG_NFT_REJECT_IPV6=m
|
||||
CONFIG_NF_REJECT_IPV6=m
|
||||
CONFIG_NF_LOG_IPV6=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
@@ -1213,11 +1216,6 @@ CONFIG_BRIDGE=m
|
||||
CONFIG_BRIDGE_IGMP_SNOOPING=y
|
||||
CONFIG_BRIDGE_VLAN_FILTERING=y
|
||||
CONFIG_HAVE_NET_DSA=y
|
||||
CONFIG_NET_DSA=m
|
||||
CONFIG_NET_DSA_HWMON=y
|
||||
CONFIG_NET_DSA_TAG_DSA=y
|
||||
CONFIG_NET_DSA_TAG_EDSA=y
|
||||
CONFIG_NET_DSA_TAG_TRAILER=y
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_VLAN_8021Q_GVRP=y
|
||||
CONFIG_VLAN_8021Q_MVRP=y
|
||||
@@ -1234,6 +1232,14 @@ CONFIG_IPDDP_ENCAP=y
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_6LOWPAN=m
|
||||
CONFIG_6LOWPAN_NHC=m
|
||||
CONFIG_6LOWPAN_NHC_DEST=m
|
||||
CONFIG_6LOWPAN_NHC_FRAGMENT=m
|
||||
CONFIG_6LOWPAN_NHC_HOP=m
|
||||
CONFIG_6LOWPAN_NHC_IPV6=m
|
||||
CONFIG_6LOWPAN_NHC_MOBILITY=m
|
||||
CONFIG_6LOWPAN_NHC_ROUTING=m
|
||||
CONFIG_6LOWPAN_NHC_UDP=m
|
||||
CONFIG_IEEE802154=m
|
||||
CONFIG_IEEE802154_SOCKET=m
|
||||
CONFIG_IEEE802154_6LOWPAN=m
|
||||
@@ -1324,7 +1330,9 @@ CONFIG_VSOCKETS=m
|
||||
CONFIG_VMWARE_VMCI_VSOCKETS=m
|
||||
CONFIG_NETLINK_MMAP=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_MPLS=y
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
CONFIG_MPLS_ROUTING=m
|
||||
CONFIG_HSR=m
|
||||
# CONFIG_NET_SWITCHDEV is not set
|
||||
CONFIG_RPS=y
|
||||
@@ -1431,11 +1439,15 @@ CONFIG_BT_CMTP=m
|
||||
CONFIG_BT_HIDP=m
|
||||
CONFIG_BT_LE=y
|
||||
CONFIG_BT_6LOWPAN=m
|
||||
CONFIG_BT_DEBUGFS=y
|
||||
|
||||
#
|
||||
# Bluetooth device drivers
|
||||
#
|
||||
CONFIG_BT_INTEL=m
|
||||
CONFIG_BT_BCM=m
|
||||
CONFIG_BT_HCIBTUSB=m
|
||||
CONFIG_BT_HCIBTUSB_BCM=y
|
||||
CONFIG_BT_HCIBTSDIO=m
|
||||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
@@ -1443,6 +1455,8 @@ CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_ATH3K=y
|
||||
CONFIG_BT_HCIUART_LL=y
|
||||
CONFIG_BT_HCIUART_3WIRE=y
|
||||
CONFIG_BT_HCIUART_INTEL=y
|
||||
CONFIG_BT_HCIUART_BCM=y
|
||||
CONFIG_BT_HCIBCM203X=m
|
||||
CONFIG_BT_HCIBPA10X=m
|
||||
CONFIG_BT_HCIBFUSB=m
|
||||
@@ -1471,6 +1485,7 @@ CONFIG_CFG80211=m
|
||||
CONFIG_CFG80211_DEBUGFS=y
|
||||
# CONFIG_CFG80211_INTERNAL_REGDB is not set
|
||||
CONFIG_CFG80211_WEXT=y
|
||||
CONFIG_CFG80211_WEXT_EXPORT=y
|
||||
CONFIG_LIB80211=m
|
||||
CONFIG_LIB80211_CRYPT_WEP=m
|
||||
CONFIG_LIB80211_CRYPT_CCMP=m
|
||||
@@ -1527,6 +1542,7 @@ CONFIG_NFC_MRVL_USB=m
|
||||
CONFIG_NFC_ST21NFCA=m
|
||||
CONFIG_NFC_ST21NFCA_I2C=m
|
||||
# CONFIG_NFC_ST21NFCB is not set
|
||||
# CONFIG_NFC_NXP_NCI is not set
|
||||
CONFIG_HAVE_BPF_JIT=y
|
||||
|
||||
#
|
||||
@@ -1583,6 +1599,7 @@ CONFIG_MTD=m
|
||||
# CONFIG_SM_FTL is not set
|
||||
# CONFIG_MTD_OOPS is not set
|
||||
# CONFIG_MTD_SWAP is not set
|
||||
CONFIG_MTD_PARTITIONED_MASTER=y
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
@@ -1680,6 +1697,7 @@ CONFIG_BLK_DEV_RAM=m
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_BLK_DEV_RAM_DAX=y
|
||||
CONFIG_BLK_DEV_PMEM=m
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
|
||||
@@ -2009,11 +2027,13 @@ CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID456=m
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
CONFIG_MD_CLUSTER=m
|
||||
CONFIG_BCACHE=m
|
||||
# CONFIG_BCACHE_DEBUG is not set
|
||||
# CONFIG_BCACHE_CLOSURES_DEBUG is not set
|
||||
CONFIG_BLK_DEV_DM_BUILTIN=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_MQ_DEFAULT=y
|
||||
CONFIG_DM_DEBUG=y
|
||||
CONFIG_DM_BUFIO=y
|
||||
CONFIG_DM_BIO_PRISON=m
|
||||
@@ -2038,11 +2058,12 @@ CONFIG_DM_UEVENT=y
|
||||
CONFIG_DM_FLAKEY=m
|
||||
CONFIG_DM_VERITY=m
|
||||
# CONFIG_DM_SWITCH is not set
|
||||
CONFIG_DM_LOG_WRITES=m
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
# CONFIG_TCM_USER is not set
|
||||
CONFIG_TCM_USER2=m
|
||||
CONFIG_LOOPBACK_TARGET=m
|
||||
CONFIG_TCM_FC=m
|
||||
CONFIG_ISCSI_TARGET=m
|
||||
@@ -2127,14 +2148,8 @@ CONFIG_VHOST=m
|
||||
#
|
||||
# Distributed Switch Architecture drivers
|
||||
#
|
||||
CONFIG_NET_DSA_MV88E6XXX=m
|
||||
CONFIG_NET_DSA_MV88E6060=m
|
||||
CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
|
||||
CONFIG_NET_DSA_MV88E6131=m
|
||||
CONFIG_NET_DSA_MV88E6123_61_65=m
|
||||
# CONFIG_NET_DSA_MV88E6171 is not set
|
||||
# CONFIG_NET_DSA_MV88E6352 is not set
|
||||
# CONFIG_NET_DSA_BCM_SF2 is not set
|
||||
# CONFIG_NET_DSA_MV88E6XXX is not set
|
||||
# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_MDIO=m
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
@@ -2154,9 +2169,6 @@ CONFIG_NET_VENDOR_AMD=y
|
||||
CONFIG_AMD8111_ETH=m
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_PCMCIA_NMCLAN=m
|
||||
CONFIG_AMD_XGBE=m
|
||||
CONFIG_AMD_XGBE_DCB=y
|
||||
CONFIG_NET_XGENE=m
|
||||
CONFIG_NET_VENDOR_ARC=y
|
||||
CONFIG_NET_VENDOR_ATHEROS=y
|
||||
CONFIG_ATL2=m
|
||||
@@ -2164,6 +2176,8 @@ CONFIG_ATL1=m
|
||||
CONFIG_ATL1E=m
|
||||
CONFIG_ATL1C=m
|
||||
CONFIG_ALX=m
|
||||
CONFIG_NET_CADENCE=y
|
||||
CONFIG_MACB=m
|
||||
CONFIG_NET_VENDOR_BROADCOM=y
|
||||
CONFIG_B44=m
|
||||
CONFIG_B44_PCI_AUTOSELECT=y
|
||||
@@ -2183,6 +2197,7 @@ CONFIG_CHELSIO_T1_1G=y
|
||||
CONFIG_CHELSIO_T3=m
|
||||
CONFIG_CHELSIO_T4=m
|
||||
CONFIG_CHELSIO_T4_DCB=y
|
||||
CONFIG_CHELSIO_T4_FCOE=y
|
||||
CONFIG_CHELSIO_T4VF=m
|
||||
CONFIG_NET_VENDOR_CISCO=y
|
||||
CONFIG_ENIC=m
|
||||
@@ -2350,7 +2365,6 @@ CONFIG_PHYLIB=y
|
||||
#
|
||||
CONFIG_AT803X_PHY=m
|
||||
CONFIG_AMD_PHY=m
|
||||
CONFIG_AMD_XGBE_PHY=m
|
||||
CONFIG_MARVELL_PHY=m
|
||||
CONFIG_DAVICOM_PHY=m
|
||||
CONFIG_QSEMI_PHY=m
|
||||
@@ -2839,6 +2853,7 @@ CONFIG_MOUSE_PS2_ELANTECH=y
|
||||
CONFIG_MOUSE_PS2_SENTELIC=y
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
CONFIG_MOUSE_PS2_FOCALTECH=y
|
||||
CONFIG_MOUSE_PS2_VMMOUSE=y
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_MOUSE_APPLETOUCH=m
|
||||
CONFIG_MOUSE_BCM5974=m
|
||||
@@ -2949,6 +2964,7 @@ CONFIG_TOUCHSCREEN_TSC_SERIO=m
|
||||
CONFIG_TOUCHSCREEN_TSC2007=m
|
||||
CONFIG_TOUCHSCREEN_ST1232=m
|
||||
CONFIG_TOUCHSCREEN_SUR40=m
|
||||
CONFIG_TOUCHSCREEN_SX8654=m
|
||||
CONFIG_TOUCHSCREEN_TPS6507X=m
|
||||
CONFIG_TOUCHSCREEN_ZFORCE=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
@@ -3062,7 +3078,6 @@ CONFIG_SERIAL_8250_DW=m
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_MFD_HSU=m
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_SERIAL_JSM=m
|
||||
@@ -3125,9 +3140,10 @@ CONFIG_TCG_TIS_I2C_NUVOTON=m
|
||||
CONFIG_TCG_NSC=m
|
||||
CONFIG_TCG_ATMEL=m
|
||||
CONFIG_TCG_INFINEON=m
|
||||
CONFIG_TCG_TIS_I2C_ST33=m
|
||||
CONFIG_TCG_XEN=m
|
||||
CONFIG_TCG_CRB=m
|
||||
CONFIG_TCG_TIS_ST33ZP24=m
|
||||
CONFIG_TCG_TIS_ST33ZP24_I2C=m
|
||||
CONFIG_TELCLOCK=m
|
||||
CONFIG_DEVPORT=y
|
||||
CONFIG_XILLYBUS=m
|
||||
@@ -3253,8 +3269,11 @@ CONFIG_PINCTRL=y
|
||||
CONFIG_PINMUX=y
|
||||
CONFIG_PINCONF=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_PINCTRL_AMD=y
|
||||
CONFIG_PINCTRL_BAYTRAIL=y
|
||||
CONFIG_PINCTRL_CHERRYVIEW=m
|
||||
CONFIG_PINCTRL_INTEL=m
|
||||
CONFIG_PINCTRL_SUNRISEPOINT=m
|
||||
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIO_DEVRES=y
|
||||
@@ -3265,29 +3284,35 @@ CONFIG_GPIO_GENERIC=y
|
||||
CONFIG_GPIO_MAX730X=m
|
||||
|
||||
#
|
||||
# Memory mapped GPIO drivers:
|
||||
# Memory mapped GPIO drivers
|
||||
#
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_GPIO_IT8761E=m
|
||||
CONFIG_GPIO_DWAPB=m
|
||||
CONFIG_GPIO_F7188X=m
|
||||
CONFIG_GPIO_SCH311X=m
|
||||
CONFIG_GPIO_SCH=m
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_GPIO_ICH=m
|
||||
CONFIG_GPIO_VX855=m
|
||||
CONFIG_GPIO_IT8761E=m
|
||||
CONFIG_GPIO_LYNXPOINT=m
|
||||
CONFIG_GPIO_SCH=m
|
||||
CONFIG_GPIO_SCH311X=m
|
||||
CONFIG_GPIO_VX855=m
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
# I2C GPIO expanders
|
||||
#
|
||||
CONFIG_GPIO_LP3943=m
|
||||
CONFIG_GPIO_ADP5588=m
|
||||
CONFIG_GPIO_MAX7300=m
|
||||
CONFIG_GPIO_MAX732X=m
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
CONFIG_GPIO_ADP5588=m
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
# MFD GPIO expanders
|
||||
#
|
||||
CONFIG_GPIO_LP3943=m
|
||||
CONFIG_GPIO_UCB1400=m
|
||||
|
||||
#
|
||||
# PCI GPIO expanders
|
||||
#
|
||||
CONFIG_GPIO_AMD8111=m
|
||||
CONFIG_GPIO_INTEL_MID=y
|
||||
@@ -3295,25 +3320,7 @@ CONFIG_GPIO_ML_IOH=m
|
||||
CONFIG_GPIO_RDC321X=m
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
CONFIG_GPIO_MCP23S08=m
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
#
|
||||
CONFIG_GPIO_UCB1400=m
|
||||
|
||||
#
|
||||
# LPC GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# MODULbus GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# USB GPIO expanders:
|
||||
# USB GPIO expanders
|
||||
#
|
||||
CONFIG_GPIO_VIPERBOARD=m
|
||||
CONFIG_W1=m
|
||||
@@ -3458,6 +3465,7 @@ CONFIG_SENSORS_NTC_THERMISTOR=m
|
||||
CONFIG_SENSORS_NCT6683=m
|
||||
CONFIG_SENSORS_NCT6775=m
|
||||
# CONFIG_SENSORS_NCT7802 is not set
|
||||
CONFIG_SENSORS_NCT7904=m
|
||||
CONFIG_SENSORS_PCF8591=m
|
||||
CONFIG_PMBUS=m
|
||||
CONFIG_SENSORS_PMBUS=m
|
||||
@@ -3544,6 +3552,7 @@ CONFIG_WATCHDOG_CORE=y
|
||||
#
|
||||
CONFIG_SOFT_WATCHDOG=m
|
||||
# CONFIG_XILINX_WATCHDOG is not set
|
||||
CONFIG_CADENCE_WATCHDOG=m
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
CONFIG_RETU_WATCHDOG=m
|
||||
# CONFIG_ACQUIRE_WDT is not set
|
||||
@@ -3620,6 +3629,7 @@ CONFIG_BCMA_BLOCKIO=y
|
||||
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
|
||||
CONFIG_BCMA_HOST_PCI=y
|
||||
# CONFIG_BCMA_HOST_SOC is not set
|
||||
CONFIG_BCMA_DRIVER_PCI=y
|
||||
CONFIG_BCMA_DRIVER_GMAC_CMN=y
|
||||
CONFIG_BCMA_DRIVER_GPIO=y
|
||||
# CONFIG_BCMA_DEBUG is not set
|
||||
@@ -3634,10 +3644,12 @@ CONFIG_MFD_CROS_EC_I2C=m
|
||||
# CONFIG_MFD_DLN2 is not set
|
||||
# CONFIG_MFD_MC13XXX_I2C is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
|
||||
CONFIG_LPC_ICH=m
|
||||
CONFIG_LPC_SCH=m
|
||||
# CONFIG_MFD_JANZ_CMODIO is not set
|
||||
# CONFIG_MFD_KEMPLD is not set
|
||||
CONFIG_MFD_MT6397=m
|
||||
# CONFIG_MFD_MENF21BMC is not set
|
||||
CONFIG_MFD_VIPERBOARD=m
|
||||
CONFIG_MFD_RETU=m
|
||||
@@ -3650,6 +3662,7 @@ CONFIG_MFD_RTSX_USB=m
|
||||
CONFIG_MFD_SI476X_CORE=m
|
||||
CONFIG_MFD_SM501=m
|
||||
CONFIG_MFD_SM501_GPIO=y
|
||||
CONFIG_MFD_SKY81452=m
|
||||
# CONFIG_ABX500_CORE is not set
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MFD_TI_AM335X_TSCADC=m
|
||||
@@ -4135,7 +4148,6 @@ CONFIG_MEDIA_TUNER_FC0013=m
|
||||
CONFIG_MEDIA_TUNER_TDA18212=m
|
||||
CONFIG_MEDIA_TUNER_E4000=m
|
||||
CONFIG_MEDIA_TUNER_FC2580=m
|
||||
CONFIG_MEDIA_TUNER_M88TS2022=m
|
||||
CONFIG_MEDIA_TUNER_M88RS6000T=m
|
||||
CONFIG_MEDIA_TUNER_TUA9001=m
|
||||
CONFIG_MEDIA_TUNER_SI2157=m
|
||||
@@ -4233,6 +4245,7 @@ CONFIG_DVB_OR51132=m
|
||||
CONFIG_DVB_BCM3510=m
|
||||
CONFIG_DVB_LGDT330X=m
|
||||
CONFIG_DVB_LGDT3305=m
|
||||
CONFIG_DVB_LGDT3306A=m
|
||||
CONFIG_DVB_LG2160=m
|
||||
CONFIG_DVB_S5H1409=m
|
||||
CONFIG_DVB_AU8522=m
|
||||
@@ -4313,6 +4326,7 @@ CONFIG_DRM_I2C_NXP_TDA998X=m
|
||||
CONFIG_DRM_TDFX=m
|
||||
CONFIG_DRM_R128=m
|
||||
CONFIG_DRM_RADEON=m
|
||||
CONFIG_DRM_RADEON_USERPTR=y
|
||||
# CONFIG_DRM_RADEON_UMS is not set
|
||||
CONFIG_DRM_NOUVEAU=m
|
||||
CONFIG_NOUVEAU_DEBUG=5
|
||||
@@ -4323,10 +4337,12 @@ CONFIG_DRM_I915=m
|
||||
CONFIG_DRM_I915_KMS=y
|
||||
CONFIG_DRM_I915_FBDEV=y
|
||||
CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
|
||||
CONFIG_DRM_MACH64=m
|
||||
CONFIG_DRM_MGA=m
|
||||
CONFIG_DRM_SIS=m
|
||||
CONFIG_DRM_VIA=m
|
||||
CONFIG_DRM_SAVAGE=m
|
||||
CONFIG_DRM_VGEM=m
|
||||
CONFIG_DRM_VMWGFX=m
|
||||
CONFIG_DRM_VMWGFX_FBCON=y
|
||||
CONFIG_DRM_GMA500=m
|
||||
@@ -4360,13 +4376,16 @@ CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
CONFIG_FB_FOREIGN_ENDIAN=y
|
||||
CONFIG_FB_BOTH_ENDIAN=y
|
||||
# CONFIG_FB_BIG_ENDIAN is not set
|
||||
# CONFIG_FB_LITTLE_ENDIAN is not set
|
||||
CONFIG_FB_SYS_FOPS=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
# CONFIG_FB_SVGALIB is not set
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_BACKLIGHT=y
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
|
||||
#
|
||||
@@ -4379,7 +4398,7 @@ CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
CONFIG_FB_VGA16=m
|
||||
# CONFIG_FB_UVESA is not set
|
||||
CONFIG_FB_UVESA=m
|
||||
CONFIG_FB_VESA=y
|
||||
CONFIG_FB_EFI=y
|
||||
# CONFIG_FB_N411 is not set
|
||||
@@ -4431,6 +4450,7 @@ CONFIG_BACKLIGHT_APPLE=m
|
||||
CONFIG_BACKLIGHT_LM3630A=m
|
||||
CONFIG_BACKLIGHT_LM3639=m
|
||||
CONFIG_BACKLIGHT_LP855X=m
|
||||
CONFIG_BACKLIGHT_SKY81452=m
|
||||
CONFIG_BACKLIGHT_GPIO=m
|
||||
CONFIG_BACKLIGHT_LV5207LP=m
|
||||
CONFIG_BACKLIGHT_BD6107=m
|
||||
@@ -4600,6 +4620,7 @@ CONFIG_SND_HDA_CODEC_CMEDIA=m
|
||||
CONFIG_SND_HDA_CODEC_SI3054=m
|
||||
CONFIG_SND_HDA_GENERIC=m
|
||||
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
|
||||
CONFIG_SND_HDA_CORE=m
|
||||
CONFIG_SND_USB=y
|
||||
CONFIG_SND_USB_AUDIO=m
|
||||
CONFIG_SND_USB_UA101=m
|
||||
@@ -4662,7 +4683,6 @@ CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_HOLTEK=m
|
||||
CONFIG_HOLTEK_FF=y
|
||||
CONFIG_HID_GT683R=m
|
||||
CONFIG_HID_HUION=m
|
||||
CONFIG_HID_KEYTOUCH=m
|
||||
CONFIG_HID_KYE=m
|
||||
CONFIG_HID_UCLOGIC=m
|
||||
@@ -4724,6 +4744,7 @@ CONFIG_HID_ZEROPLUS=m
|
||||
CONFIG_ZEROPLUS_FF=y
|
||||
CONFIG_HID_ZYDACRON=m
|
||||
CONFIG_HID_SENSOR_HUB=m
|
||||
CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
|
||||
|
||||
#
|
||||
# USB HID support
|
||||
@@ -4847,7 +4868,6 @@ CONFIG_USB_DWC3_PCI=m
|
||||
# Debugging features
|
||||
#
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
CONFIG_DWC3_HOST_USB3_LPM_ENABLE=y
|
||||
CONFIG_USB_DWC2=y
|
||||
CONFIG_USB_DWC2_HOST=y
|
||||
|
||||
@@ -4951,6 +4971,7 @@ CONFIG_USB_YUREX=m
|
||||
CONFIG_USB_EZUSB_FX2=m
|
||||
CONFIG_USB_HSIC_USB3503=m
|
||||
# CONFIG_USB_LINK_LAYER_TEST is not set
|
||||
CONFIG_USB_CHAOSKEY=m
|
||||
CONFIG_USB_ATM=m
|
||||
CONFIG_USB_SPEEDTOUCH=m
|
||||
CONFIG_USB_CXACRU=m
|
||||
@@ -4961,7 +4982,7 @@ CONFIG_USB_XUSBATM=m
|
||||
# USB Physical Layer drivers
|
||||
#
|
||||
CONFIG_USB_PHY=y
|
||||
CONFIG_NOP_USB_XCEIV=m
|
||||
CONFIG_NOP_USB_XCEIV=y
|
||||
CONFIG_USB_GPIO_VBUS=m
|
||||
CONFIG_USB_ISP1301=m
|
||||
# CONFIG_USB_GADGET is not set
|
||||
@@ -5054,6 +5075,7 @@ CONFIG_LEDS_LM355x=m
|
||||
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
|
||||
#
|
||||
CONFIG_LEDS_BLINKM=m
|
||||
CONFIG_LEDS_PM8941_WLED=m
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
@@ -5144,6 +5166,7 @@ CONFIG_RTC_INTF_DEV=y
|
||||
# I2C RTC drivers
|
||||
#
|
||||
CONFIG_RTC_DRV_ABB5ZES3=m
|
||||
CONFIG_RTC_DRV_ABX80X=m
|
||||
CONFIG_RTC_DRV_DS1307=m
|
||||
CONFIG_RTC_DRV_DS1374=m
|
||||
# CONFIG_RTC_DRV_DS1374_WDT is not set
|
||||
@@ -5216,12 +5239,13 @@ CONFIG_DMADEVICES=y
|
||||
# DMA Devices
|
||||
#
|
||||
CONFIG_INTEL_MIC_X100_DMA=m
|
||||
# CONFIG_INTEL_MID_DMAC is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_DW_DMAC_CORE is not set
|
||||
# CONFIG_DW_DMAC is not set
|
||||
# CONFIG_DW_DMAC_PCI is not set
|
||||
CONFIG_HSU_DMA=m
|
||||
CONFIG_HSU_DMA_PCI=m
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=m
|
||||
CONFIG_DMA_ACPI=y
|
||||
|
||||
#
|
||||
@@ -5247,6 +5271,7 @@ CONFIG_UIO_PCI_GENERIC=m
|
||||
# CONFIG_UIO_NETX is not set
|
||||
# CONFIG_UIO_MF624 is not set
|
||||
CONFIG_VFIO_IOMMU_TYPE1=y
|
||||
CONFIG_VFIO_VIRQFD=y
|
||||
CONFIG_VFIO=y
|
||||
CONFIG_VFIO_PCI=y
|
||||
CONFIG_VFIO_PCI_VGA=y
|
||||
@@ -5261,6 +5286,7 @@ CONFIG_VIRTIO=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_PCI_LEGACY=y
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
CONFIG_VIRTIO_INPUT=m
|
||||
CONFIG_VIRTIO_MMIO=m
|
||||
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
|
||||
|
||||
@@ -5295,6 +5321,8 @@ CONFIG_XEN_ACPI_PROCESSOR=m
|
||||
CONFIG_XEN_MCE_LOG=y
|
||||
CONFIG_XEN_HAVE_PVMMU=y
|
||||
CONFIG_XEN_EFI=y
|
||||
CONFIG_XEN_AUTO_XLATE=y
|
||||
CONFIG_XEN_ACPI=y
|
||||
CONFIG_STAGING=y
|
||||
# CONFIG_SLICOSS is not set
|
||||
# CONFIG_PRISM2_USB is not set
|
||||
@@ -5312,6 +5340,7 @@ CONFIG_RTS5208=m
|
||||
# CONFIG_VT6655 is not set
|
||||
# CONFIG_VT6656 is not set
|
||||
CONFIG_FB_SM7XX=m
|
||||
CONFIG_FB_SM750=m
|
||||
# CONFIG_FB_XGI is not set
|
||||
# CONFIG_FT1000 is not set
|
||||
|
||||
@@ -5423,10 +5452,13 @@ CONFIG_SAMSUNG_Q10=m
|
||||
CONFIG_APPLE_GMUX=m
|
||||
CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SMARTCONNECT is not set
|
||||
CONFIG_SHUTTLE_WMI=m
|
||||
CONFIG_PVPANIC=m
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CHROMEOS_LAPTOP=m
|
||||
CONFIG_CHROMEOS_PSTORE=m
|
||||
CONFIG_CROS_EC_CHARDEV=m
|
||||
CONFIG_CROS_EC_LPC=m
|
||||
CONFIG_CLKDEV_LOOKUP=y
|
||||
CONFIG_HAVE_CLK_PREPARE=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
@@ -5435,6 +5467,7 @@ CONFIG_COMMON_CLK=y
|
||||
# Common Clock Framework
|
||||
#
|
||||
CONFIG_COMMON_CLK_SI5351=m
|
||||
CONFIG_COMMON_CLK_PWM=m
|
||||
# CONFIG_COMMON_CLK_PXA is not set
|
||||
CONFIG_COMMON_CLK_CDCE706=m
|
||||
|
||||
@@ -5583,6 +5616,8 @@ CONFIG_EXT3_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_ENCRYPTION=m
|
||||
CONFIG_EXT4_FS_ENCRYPTION=y
|
||||
# CONFIG_EXT4_DEBUG is not set
|
||||
CONFIG_JBD=m
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
@@ -5621,6 +5656,13 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
# CONFIG_BTRFS_DEBUG is not set
|
||||
# CONFIG_BTRFS_ASSERT is not set
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=m
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_FS_POSIX_ACL=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_IO_TRACE=y
|
||||
CONFIG_FS_DAX=y
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_EXPORTFS=y
|
||||
@@ -5746,14 +5788,7 @@ CONFIG_UFS_FS=m
|
||||
# CONFIG_UFS_FS_WRITE is not set
|
||||
# CONFIG_UFS_DEBUG is not set
|
||||
# CONFIG_EXOFS_FS is not set
|
||||
CONFIG_F2FS_FS=m
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_FS_POSIX_ACL=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_IO_TRACE=y
|
||||
CONFIG_AUFS_FS=m
|
||||
CONFIG_AUFS_FS=y
|
||||
# CONFIG_AUFS_BRANCH_MAX_127 is not set
|
||||
# CONFIG_AUFS_BRANCH_MAX_511 is not set
|
||||
# CONFIG_AUFS_BRANCH_MAX_1023 is not set
|
||||
@@ -5944,6 +5979,7 @@ CONFIG_KASAN_SHADOW_OFFSET=0xdffffc0000000000
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
CONFIG_PANIC_ON_OOPS_VALUE=0
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
CONFIG_DEBUG_TIMEKEEPING=y
|
||||
|
||||
#
|
||||
# Lock Debugging (spinlocks, mutexes, etc...)
|
||||
@@ -5954,6 +5990,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
#
|
||||
# RCU Debugging
|
||||
#
|
||||
# CONFIG_PROVE_RCU is not set
|
||||
# CONFIG_SPARSE_RCU_POINTER is not set
|
||||
# CONFIG_TORTURE_TEST is not set
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||
@@ -6003,6 +6040,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
|
||||
# CONFIG_TRACEPOINT_BENCHMARK is not set
|
||||
CONFIG_RING_BUFFER_BENCHMARK=m
|
||||
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
|
||||
CONFIG_TRACE_ENUM_MAP_FILE=y
|
||||
|
||||
#
|
||||
# Runtime Testing
|
||||
@@ -6022,6 +6060,7 @@ CONFIG_TEST_KSTRTOX=y
|
||||
# CONFIG_TEST_BPF is not set
|
||||
# CONFIG_TEST_FIRMWARE is not set
|
||||
# CONFIG_TEST_UDELAY is not set
|
||||
# CONFIG_MEMTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
@@ -6356,3 +6395,12 @@ CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_ARCH_HAS_SG_CHAIN=y
|
||||
|
||||
#
|
||||
# Unofficial 3rd party kernel additions
|
||||
#
|
||||
CONFIG_NDISWRAPPER=m
|
||||
CONFIG_RTL8723AS=m
|
||||
CONFIG_RTL8723BS=m
|
||||
CONFIG_WLAN_SDIO=y
|
||||
CONFIG_VIAHSS=m
|
||||
|
||||
@@ -18,62 +18,62 @@ Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
scripts/kconfig/Makefile | 31 +++++++++++++++++--------------
|
||||
8 files changed, 29 insertions(+), 15 deletions(-)
|
||||
|
||||
diff -Nurp linux-3.18-rc6/arch/alpha/Kconfig linux-3.18-rc6-3rdparty/arch/alpha/Kconfig
|
||||
--- linux-3.18-rc6/arch/alpha/Kconfig 2014-10-05 22:23:04.000000000 +0300
|
||||
+++ linux-3.18-rc6-3rdparty/arch/alpha/Kconfig 2014-11-29 21:42:38.015594440 +0200
|
||||
@@ -746,3 +746,4 @@ source "crypto/Kconfig"
|
||||
diff -Nurp linux-4.1/arch/alpha/Kconfig linux-4.1-3rd/arch/alpha/Kconfig
|
||||
--- linux-4.1/arch/alpha/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/alpha/Kconfig 2015-06-25 20:44:03.221647317 +0200
|
||||
@@ -750,3 +750,4 @@ source "crypto/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/arch/ia64/Kconfig linux-3.18-rc6-3rdparty/arch/ia64/Kconfig
|
||||
--- linux-3.18-rc6/arch/ia64/Kconfig 2014-10-05 22:23:04.000000000 +0300
|
||||
+++ linux-3.18-rc6-3rdparty/arch/ia64/Kconfig 2014-11-29 21:42:38.015594440 +0200
|
||||
@@ -646,3 +646,5 @@ source "lib/Kconfig"
|
||||
diff -Nurp linux-4.1/arch/ia64/Kconfig linux-4.1-3rd/arch/ia64/Kconfig
|
||||
--- linux-4.1/arch/ia64/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/ia64/Kconfig 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -636,3 +636,5 @@ source "lib/Kconfig"
|
||||
|
||||
config IOMMU_HELPER
|
||||
def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB)
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/arch/mips/Kconfig linux-3.18-rc6-3rdparty/arch/mips/Kconfig
|
||||
--- linux-3.18-rc6/arch/mips/Kconfig 2014-11-29 21:37:34.434802374 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/arch/mips/Kconfig 2014-11-29 21:42:38.015594440 +0200
|
||||
@@ -2709,3 +2709,5 @@ source "crypto/Kconfig"
|
||||
diff -Nurp linux-4.1/arch/mips/Kconfig linux-4.1-3rd/arch/mips/Kconfig
|
||||
--- linux-4.1/arch/mips/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/mips/Kconfig 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -2893,3 +2893,5 @@ source "crypto/Kconfig"
|
||||
source "lib/Kconfig"
|
||||
|
||||
source "arch/mips/kvm/Kconfig"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/arch/powerpc/Kconfig linux-3.18-rc6-3rdparty/arch/powerpc/Kconfig
|
||||
--- linux-3.18-rc6/arch/powerpc/Kconfig 2014-11-29 21:37:34.446802445 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/arch/powerpc/Kconfig 2014-11-29 21:42:38.016594446 +0200
|
||||
@@ -1081,3 +1081,5 @@ config PPC_LIB_RHEAP
|
||||
diff -Nurp linux-4.1/arch/powerpc/Kconfig linux-4.1-3rd/arch/powerpc/Kconfig
|
||||
--- linux-4.1/arch/powerpc/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/powerpc/Kconfig 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -1090,3 +1090,5 @@ config PPC_LIB_RHEAP
|
||||
bool
|
||||
|
||||
source "arch/powerpc/kvm/Kconfig"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/arch/sparc/Kconfig linux-3.18-rc6-3rdparty/arch/sparc/Kconfig
|
||||
--- linux-3.18-rc6/arch/sparc/Kconfig 2014-11-29 21:37:34.478802634 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/arch/sparc/Kconfig 2014-11-29 21:42:38.016594446 +0200
|
||||
@@ -562,3 +562,5 @@ source "security/Kconfig"
|
||||
diff -Nurp linux-4.1/arch/sparc/Kconfig linux-4.1-3rd/arch/sparc/Kconfig
|
||||
--- linux-4.1/arch/sparc/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/sparc/Kconfig 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -569,3 +569,5 @@ source "security/Kconfig"
|
||||
source "crypto/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/arch/x86/Kconfig linux-3.18-rc6-3rdparty/arch/x86/Kconfig
|
||||
--- linux-3.18-rc6/arch/x86/Kconfig 2014-11-29 21:37:34.488802693 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/arch/x86/Kconfig 2014-11-29 21:42:38.016594446 +0200
|
||||
@@ -2509,3 +2509,5 @@ source "crypto/Kconfig"
|
||||
diff -Nurp linux-4.1/arch/x86/Kconfig linux-4.1-3rd/arch/x86/Kconfig
|
||||
--- linux-4.1/arch/x86/Kconfig 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/arch/x86/Kconfig 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -2594,3 +2594,5 @@ source "crypto/Kconfig"
|
||||
source "arch/x86/kvm/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-3.18-rc6/Makefile linux-3.18-rc6-3rdparty/Makefile
|
||||
--- linux-3.18-rc6/Makefile 2014-11-29 21:37:34.352801890 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/Makefile 2014-11-29 21:42:38.016594446 +0200
|
||||
diff -Nurp linux-4.1/Makefile linux-4.1-3rd/Makefile
|
||||
--- linux-4.1/Makefile 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/Makefile 2015-06-25 20:44:03.231647227 +0200
|
||||
@@ -556,7 +556,7 @@ scripts: scripts_basic include/config/au
|
||||
|
||||
# Objects we will link into vmlinux / subdirs we need to visit
|
||||
@@ -83,87 +83,93 @@ diff -Nurp linux-3.18-rc6/Makefile linux-3.18-rc6-3rdparty/Makefile
|
||||
net-y := net/
|
||||
libs-y := lib/
|
||||
core-y := usr/
|
||||
diff -Nurp linux-3.18-rc6/scripts/kconfig/Makefile linux-3.18-rc6-3rdparty/scripts/kconfig/Makefile
|
||||
--- linux-3.18-rc6/scripts/kconfig/Makefile 2014-11-29 21:37:35.487808590 +0200
|
||||
+++ linux-3.18-rc6-3rdparty/scripts/kconfig/Makefile 2014-11-29 21:46:48.227071462 +0200
|
||||
@@ -14,29 +14,29 @@ endif
|
||||
diff -Nurp linux-4.1/scripts/kconfig/Makefile linux-4.1-3rd/scripts/kconfig/Makefile
|
||||
--- linux-4.1/scripts/kconfig/Makefile 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-3rd/scripts/kconfig/Makefile 2015-06-25 20:47:50.109596717 +0200
|
||||
@@ -18,26 +18,26 @@ endif
|
||||
# We need this, in case the user has it in its environment
|
||||
unexport CONFIG_
|
||||
|
||||
-xconfig: $(obj)/qconf
|
||||
+xconfig: $(obj)/qconf 3rdparty/Makefile
|
||||
$< $(Kconfig)
|
||||
$< $(silent) $(Kconfig)
|
||||
|
||||
-gconfig: $(obj)/gconf
|
||||
+gconfig: $(obj)/gconf 3rdparty/Makefile
|
||||
$< $(Kconfig)
|
||||
$< $(silent) $(Kconfig)
|
||||
|
||||
-menuconfig: $(obj)/mconf
|
||||
+menuconfig: $(obj)/mconf 3rdparty/Makefile
|
||||
$< $(Kconfig)
|
||||
$< $(silent) $(Kconfig)
|
||||
|
||||
-config: $(obj)/conf
|
||||
+config: $(obj)/conf 3rdparty/Makefile
|
||||
$< --oldaskconfig $(Kconfig)
|
||||
$< $(silent) --oldaskconfig $(Kconfig)
|
||||
|
||||
-nconfig: $(obj)/nconf
|
||||
+nconfig: $(obj)/nconf 3rdparty/Makefile
|
||||
$< $(Kconfig)
|
||||
|
||||
-oldconfig: $(obj)/conf
|
||||
+oldconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$< --$@ $(Kconfig)
|
||||
$< $(silent) $(Kconfig)
|
||||
|
||||
-silentoldconfig: $(obj)/conf
|
||||
+silentoldconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$(Q)mkdir -p include/config include/generated
|
||||
$< --$@ $(Kconfig)
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
-localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||
+localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf 3rdparty/Makefile
|
||||
$(Q)mkdir -p include/config include/generated
|
||||
$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
@@ -76,24 +76,24 @@ update-po-config: $(obj)/kxgettext $(obj
|
||||
@@ -80,7 +80,7 @@ simple-targets := oldconfig allnoconfig
|
||||
alldefconfig randconfig listnewconfig olddefconfig
|
||||
PHONY += $(simple-targets)
|
||||
|
||||
PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
|
||||
|
||||
-allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
|
||||
+allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$< --$@ $(Kconfig)
|
||||
|
||||
PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
|
||||
|
||||
-listnewconfig olddefconfig: $(obj)/conf
|
||||
+listnewconfig olddefconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$< --$@ $(Kconfig)
|
||||
-$(simple-targets): $(obj)/conf
|
||||
+$(simple-targets): $(obj)/conf 3rdparty/Makefile
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
PHONY += oldnoconfig savedefconfig defconfig
|
||||
@@ -88,12 +88,12 @@ PHONY += oldnoconfig savedefconfig defco
|
||||
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||
# on its behavior(sets new symbols to their default value but not 'n') with the
|
||||
# counter-intuitive name.
|
||||
-oldnoconfig: $(obj)/conf
|
||||
+oldnoconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$< --olddefconfig $(Kconfig)
|
||||
-oldnoconfig: olddefconfig
|
||||
+oldnoconfig: olddefconfig 3rdparty/Makefile
|
||||
|
||||
-savedefconfig: $(obj)/conf
|
||||
+savedefconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$< --$@=defconfig $(Kconfig)
|
||||
$< $(silent) --$@=defconfig $(Kconfig)
|
||||
|
||||
-defconfig: $(obj)/conf
|
||||
+defconfig: $(obj)/conf 3rdparty/Makefile
|
||||
ifeq ($(KBUILD_DEFCONFIG),)
|
||||
$< --defconfig $(Kconfig)
|
||||
$< $(silent) --defconfig $(Kconfig)
|
||||
else
|
||||
@@ -101,7 +101,7 @@ else
|
||||
$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
|
||||
$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
|
||||
endif
|
||||
|
||||
-%_defconfig: $(obj)/conf
|
||||
+%_defconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
|
||||
$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
|
||||
|
||||
configfiles=$(wildcard $(srctree)/kernel/configs/$(1).config $(srctree)/arch/$(SRCARCH)/configs/$(1).config)
|
||||
@@ -178,6 +178,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
|
||||
@@ -112,12 +112,12 @@ configfiles=$(wildcard $(srctree)/kernel
|
||||
+$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
|
||||
|
||||
PHONY += kvmconfig
|
||||
-kvmconfig: kvm_guest.config
|
||||
+kvmconfig: kvm_guest.config 3rdparty/Makefile
|
||||
@:
|
||||
|
||||
PHONY += tinyconfig
|
||||
tinyconfig:
|
||||
- $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
|
||||
+ $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config 3rdparty/Makefile
|
||||
|
||||
# Help text used by make help
|
||||
help:
|
||||
@@ -176,6 +176,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
|
||||
hostprogs-y := conf nconf mconf kxgettext qconf gconf
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
Adapt for strnicmp has been replaced by strncasecmp,
|
||||
and removed upstream in v4.0-rc1~98:
|
||||
|
||||
From af3cd13501eb04ca61d017ff4406f1cbffafdc04 Mon Sep 17 00:00:00 2001
|
||||
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
|
||||
Date: Thu, 12 Feb 2015 15:02:15 -0800
|
||||
Subject: lib/string.c: remove strnicmp()
|
||||
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/3rdparty/ndiswrapper/ndis.c.orig
|
||||
+++ linux/3rdparty/ndiswrapper/ndis.c
|
||||
@@ -438,7 +438,7 @@ static int read_setting(struct nt_list *
|
||||
struct wrap_device_setting *setting;
|
||||
mutex_lock(&loader_mutex);
|
||||
nt_list_for_each_entry(setting, setting_list, list) {
|
||||
- if (strnicmp(keyname, setting->name, length) == 0) {
|
||||
+ if (strncasecmp(keyname, setting->name, length) == 0) {
|
||||
TRACE2("setting %s='%s'", keyname, setting->value);
|
||||
mutex_unlock(&loader_mutex);
|
||||
*param = ndis_encode_setting(setting, type);
|
||||
@@ -502,7 +502,7 @@ wstdcall void WIN_FUNC(NdisWriteConfigur
|
||||
|
||||
mutex_lock(&loader_mutex);
|
||||
nt_list_for_each_entry(setting, &nmb->wnd->wd->settings, list) {
|
||||
- if (strnicmp(keyname, setting->name, ansi.length) == 0) {
|
||||
+ if (strncasecmp(keyname, setting->name, ansi.length) == 0) {
|
||||
mutex_unlock(&loader_mutex);
|
||||
if (ndis_decode_setting(setting, param))
|
||||
*status = NDIS_STATUS_FAILURE;
|
||||
@@ -1,73 +0,0 @@
|
||||
|
||||
This reverts the parts of:
|
||||
|
||||
commit 86fe2db84ba7b9a83b60323cd805198ff43136ec
|
||||
Author: Bastien Nocera <hadess@hadess.net>
|
||||
Date: Fri Mar 20 18:28:08 2015 +0100
|
||||
|
||||
cfg80211: Update for newest mac80211 API
|
||||
|
||||
|
||||
that breaks building with 3.19 series kernels.
|
||||
|
||||
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
|
||||
diff -Nurp linux/3rdparty/rtl8723bs.rev/include/ioctl_cfg80211.h linux/3rdparty/rtl8723bs/include/ioctl_cfg80211.h
|
||||
--- linux/3rdparty/rtl8723bs.rev/include/ioctl_cfg80211.h 2015-05-07 17:46:55.000000000 +0300
|
||||
+++ linux/3rdparty/rtl8723bs/include/ioctl_cfg80211.h 2015-05-10 14:55:44.744038033 +0300
|
||||
@@ -22,10 +22,6 @@
|
||||
|
||||
#include <linux/version.h>
|
||||
|
||||
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
|
||||
-#error This driver only works with kernel 4.0
|
||||
-#endif
|
||||
-
|
||||
struct rtw_wdev_invit_info {
|
||||
u8 state; /* 0: req, 1:rep */
|
||||
u8 peer_mac[ETH_ALEN];
|
||||
diff -Nurp linux/3rdparty/rtl8723bs.rev/os_dep/ioctl_cfg80211.c linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c
|
||||
--- linux/3rdparty/rtl8723bs.rev/os_dep/ioctl_cfg80211.c 2015-05-10 14:54:53.241616597 +0300
|
||||
+++ linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c 2015-05-10 14:49:42.766354711 +0300
|
||||
@@ -1289,16 +1289,16 @@ static int cfg80211_rtw_get_station(stru
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
|
||||
+ sinfo->filled |= STATION_INFO_SIGNAL;
|
||||
sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
|
||||
|
||||
- sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
|
||||
+ sinfo->filled |= STATION_INFO_TX_BITRATE;
|
||||
sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
|
||||
|
||||
- sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
|
||||
+ sinfo->filled |= STATION_INFO_RX_PACKETS;
|
||||
sinfo->rx_packets = sta_rx_data_pkts(psta);
|
||||
|
||||
- sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS);
|
||||
+ sinfo->filled |= STATION_INFO_TX_PACKETS;
|
||||
sinfo->tx_packets = psta->sta_stats.tx_pkts;
|
||||
|
||||
}
|
||||
@@ -2473,6 +2473,7 @@ void rtw_cfg80211_indicate_sta_assoc(_ad
|
||||
ie_offset = _REASOCREQ_IE_OFFSET_;
|
||||
|
||||
sinfo.filled = 0;
|
||||
+ sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
|
||||
sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
|
||||
sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
|
||||
cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
|
||||
@@ -3078,7 +3079,8 @@ static int cfg80211_rtw_dump_station(str
|
||||
goto exit;
|
||||
}
|
||||
memcpy(mac, psta->hwaddr, ETH_ALEN);
|
||||
- sinfo->filled = BIT(NL80211_STA_INFO_SIGNAL);
|
||||
+ sinfo->filled = 0;
|
||||
+ sinfo->filled |= STATION_INFO_SIGNAL;
|
||||
sinfo->signal = psta->rssi;
|
||||
|
||||
exit:
|
||||
-128
@@ -1,128 +0,0 @@
|
||||
From 4ec212f003d2430b0b2748b8a3008255f39cfe13 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:31:45 -0800
|
||||
Subject: [PATCH 3/4] Input: psmouse - disable changing resolution/rate/scale
|
||||
for FocalTech
|
||||
|
||||
These PS/2 commands make some touchpads stop responding, so this commit
|
||||
adds some dummy functions to replace the generic implementation. Because
|
||||
scale changes were not encapsulated in a method of struct psmouse yet, this
|
||||
commit adds a method set_scale to psmouse.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 25 +++++++++++++++++++++++++
|
||||
drivers/input/mouse/psmouse-base.c | 14 +++++++++++++-
|
||||
drivers/input/mouse/psmouse.h | 6 ++++++
|
||||
3 files changed, 44 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index c66e0e0..891a271 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -386,6 +386,23 @@ static int focaltech_read_size(struct psmouse *psmouse)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+void focaltech_set_resolution(struct psmouse *psmouse, unsigned int resolution)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_rate(struct psmouse *psmouse, unsigned int rate)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_scale(struct psmouse *psmouse,
|
||||
+ enum psmouse_scale scale)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
int focaltech_init(struct psmouse *psmouse)
|
||||
{
|
||||
struct focaltech_data *priv;
|
||||
@@ -420,6 +437,14 @@ int focaltech_init(struct psmouse *psmouse)
|
||||
psmouse->cleanup = focaltech_reset;
|
||||
/* resync is not supported yet */
|
||||
psmouse->resync_time = 0;
|
||||
+ /*
|
||||
+ * rate/resolution/scale changes are not supported yet, and
|
||||
+ * the generic implementations of these functions seem to
|
||||
+ * confuse some touchpads
|
||||
+ */
|
||||
+ psmouse->set_resolution = focaltech_set_resolution;
|
||||
+ psmouse->set_rate = focaltech_set_rate;
|
||||
+ psmouse->set_scale = focaltech_set_scale;
|
||||
|
||||
return 0;
|
||||
|
||||
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
|
||||
index 4ccd01d..8bc6123 100644
|
||||
--- a/drivers/input/mouse/psmouse-base.c
|
||||
+++ b/drivers/input/mouse/psmouse-base.c
|
||||
@@ -454,6 +454,17 @@ static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Here we set the mouse scaling.
|
||||
+ */
|
||||
+
|
||||
+static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale)
|
||||
+{
|
||||
+ ps2_command(&psmouse->ps2dev, NULL,
|
||||
+ scale == PSMOUSE_SCALE21 ? PSMOUSE_CMD_SETSCALE21 :
|
||||
+ PSMOUSE_CMD_SETSCALE11);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* psmouse_poll() - default poll handler. Everyone except for ALPS uses it.
|
||||
*/
|
||||
|
||||
@@ -689,6 +700,7 @@ static void psmouse_apply_defaults(struct psmouse *psmouse)
|
||||
|
||||
psmouse->set_rate = psmouse_set_rate;
|
||||
psmouse->set_resolution = psmouse_set_resolution;
|
||||
+ psmouse->set_scale = psmouse_set_scale;
|
||||
psmouse->poll = psmouse_poll;
|
||||
psmouse->protocol_handler = psmouse_process_byte;
|
||||
psmouse->pktsize = 3;
|
||||
@@ -1160,7 +1172,7 @@ static void psmouse_initialize(struct psmouse *psmouse)
|
||||
if (psmouse_max_proto != PSMOUSE_PS2) {
|
||||
psmouse->set_rate(psmouse, psmouse->rate);
|
||||
psmouse->set_resolution(psmouse, psmouse->resolution);
|
||||
- ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11);
|
||||
+ psmouse->set_scale(psmouse, PSMOUSE_SCALE11);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
|
||||
index c2ff137..d02e1bd 100644
|
||||
--- a/drivers/input/mouse/psmouse.h
|
||||
+++ b/drivers/input/mouse/psmouse.h
|
||||
@@ -36,6 +36,11 @@ typedef enum {
|
||||
PSMOUSE_FULL_PACKET
|
||||
} psmouse_ret_t;
|
||||
|
||||
+enum psmouse_scale {
|
||||
+ PSMOUSE_SCALE11,
|
||||
+ PSMOUSE_SCALE21
|
||||
+};
|
||||
+
|
||||
struct psmouse {
|
||||
void *private;
|
||||
struct input_dev *dev;
|
||||
@@ -67,6 +72,7 @@ struct psmouse {
|
||||
psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
|
||||
void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
|
||||
void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
|
||||
+ void (*set_scale)(struct psmouse *psmouse, enum psmouse_scale scale);
|
||||
|
||||
int (*reconnect)(struct psmouse *psmouse);
|
||||
void (*disconnect)(struct psmouse *psmouse);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
From 4eb8d6e7e5aa14572bc389e554aad9869188cdcd Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:38:27 -0800
|
||||
Subject: [PATCH 4/4] Input: psmouse - disable "palm detection" in the
|
||||
focaltech driver
|
||||
|
||||
Apparently, the threshold for large contact area seems to be rather low on
|
||||
some devices, causing the touchpad to frequently freeze during normal
|
||||
usage. Because we do now know how we are supposed to use the value in
|
||||
question, this commit just drops the related code completely.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 10 ----------
|
||||
1 file changed, 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index 891a271..23d2594 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -185,16 +185,6 @@ static void focaltech_process_abs_packet(struct psmouse *psmouse,
|
||||
|
||||
state->pressed = (packet[0] >> 4) & 1;
|
||||
|
||||
- /*
|
||||
- * packet[5] contains some kind of tool size in the most
|
||||
- * significant nibble. 0xff is a special value (latching) that
|
||||
- * signals a large contact area.
|
||||
- */
|
||||
- if (packet[5] == 0xff) {
|
||||
- state->fingers[finger].valid = false;
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
|
||||
state->fingers[finger].y = (packet[3] << 8) | packet[4];
|
||||
state->fingers[finger].valid = true;
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
From 679d83ea9390636ded518f533af0cefbade317c7 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:26:43 -0800
|
||||
Subject: [PATCH 2/4] Input: psmouse - ensure that focaltech reports consistent
|
||||
coordinates
|
||||
|
||||
We don't know whether x_max or y_max really hold the maximum possible
|
||||
coordinates, and we don't know for sure whether we correctly interpret the
|
||||
coordinates sent by the touchpad, so we clamp the reported values to
|
||||
prevent confusion in userspace code.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index e8fafe8..c66e0e0 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -126,9 +126,17 @@ static void focaltech_report_state(struct psmouse *psmouse)
|
||||
input_mt_slot(dev, i);
|
||||
input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
|
||||
if (active) {
|
||||
- input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
+ unsigned int clamped_x, clamped_y;
|
||||
+ /*
|
||||
+ * The touchpad might report invalid data, so we clamp
|
||||
+ * the resulting values so that we do not confuse
|
||||
+ * userspace.
|
||||
+ */
|
||||
+ clamped_x = clamp(finger->x, 0U, priv->x_max);
|
||||
+ clamped_y = clamp(finger->y, 0U, priv->y_max);
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
|
||||
input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
- priv->y_max - finger->y);
|
||||
+ priv->y_max - clamped_y);
|
||||
}
|
||||
}
|
||||
input_mt_report_pointer_emulation(dev, true);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
From 3e9845251926723319fb60c9e546fe42d3d11687 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:26:06 -0800
|
||||
Subject: [PATCH 1/4] Input: psmouse - remove hardcoded touchpad size from the
|
||||
focaltech driver
|
||||
|
||||
The size has in most cases already been fetched from the touchpad, the
|
||||
hardcoded values should have been removed.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index 757f78a..e8fafe8 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -67,9 +67,6 @@ static void focaltech_reset(struct psmouse *psmouse)
|
||||
|
||||
#define FOC_MAX_FINGERS 5
|
||||
|
||||
-#define FOC_MAX_X 2431
|
||||
-#define FOC_MAX_Y 1663
|
||||
-
|
||||
/*
|
||||
* Current state of a single finger on the touchpad.
|
||||
*/
|
||||
@@ -131,7 +128,7 @@ static void focaltech_report_state(struct psmouse *psmouse)
|
||||
if (active) {
|
||||
input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
- FOC_MAX_Y - finger->y);
|
||||
+ priv->y_max - finger->y);
|
||||
}
|
||||
}
|
||||
input_mt_report_pointer_emulation(dev, true);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-585
@@ -1,585 +0,0 @@
|
||||
From 05be1d079ec0b3691783e4384b1ada82149ff7d2 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Mon, 29 Dec 2014 09:26:10 -0800
|
||||
Subject: [PATCH] Input: psmouse - support for the FocalTech PS/2 protocol
|
||||
extensions
|
||||
|
||||
Most of the protocol for these touchpads has been reverse engineered. This
|
||||
commit adds a basic multitouch-capable driver.
|
||||
|
||||
A lot of the protocol is still unknown. Especially, we don't know how to
|
||||
identify the device yet apart from the PNP ID.
|
||||
|
||||
The previous workaround for these devices has been left in place in case
|
||||
the driver is not compiled into the kernel or in case some other device
|
||||
with the same PNP ID is not recognized by the driver yet still has the same
|
||||
problems with the device probing code.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/Kconfig | 10 +
|
||||
drivers/input/mouse/focaltech.c | 408 ++++++++++++++++++++++++++++++++++++-
|
||||
drivers/input/mouse/focaltech.h | 2 +
|
||||
drivers/input/mouse/psmouse-base.c | 32 ++-
|
||||
drivers/input/mouse/psmouse.h | 1 +
|
||||
5 files changed, 436 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
|
||||
index d8b46b0..2541bfa 100644
|
||||
--- a/drivers/input/mouse/Kconfig
|
||||
+++ b/drivers/input/mouse/Kconfig
|
||||
@@ -146,6 +146,16 @@ config MOUSE_PS2_OLPC
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config MOUSE_PS2_FOCALTECH
|
||||
+ bool "FocalTech PS/2 mouse protocol extension" if EXPERT
|
||||
+ default y
|
||||
+ depends on MOUSE_PS2
|
||||
+ help
|
||||
+ Say Y here if you have a FocalTech PS/2 TouchPad connected to
|
||||
+ your system.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config MOUSE_SERIAL
|
||||
tristate "Serial mouse"
|
||||
select SERIO
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index f4d657e..fca38ba 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -2,6 +2,7 @@
|
||||
* Focaltech TouchPad PS/2 mouse driver
|
||||
*
|
||||
* Copyright (c) 2014 Red Hat Inc.
|
||||
+ * Copyright (c) 2014 Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@@ -13,15 +14,14 @@
|
||||
* Hans de Goede <hdegoede@redhat.com>
|
||||
*/
|
||||
|
||||
-/*
|
||||
- * The Focaltech PS/2 touchpad protocol is unknown. This drivers deals with
|
||||
- * detection only, to avoid further detection attempts confusing the touchpad
|
||||
- * this way it at least works in PS/2 mouse compatibility mode.
|
||||
- */
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/libps2.h>
|
||||
+#include <linux/input/mt.h>
|
||||
+#include <linux/serio.h>
|
||||
+#include <linux/slab.h>
|
||||
#include "psmouse.h"
|
||||
+#include "focaltech.h"
|
||||
|
||||
static const char * const focaltech_pnp_ids[] = {
|
||||
"FLT0101",
|
||||
@@ -30,6 +30,12 @@ static const char * const focaltech_pnp_ids[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Even if the kernel is built without support for Focaltech PS/2 touchpads (or
|
||||
+ * when the real driver fails to recognize the device), we still have to detect
|
||||
+ * them in order to avoid further detection attempts confusing the touchpad.
|
||||
+ * This way it at least works in PS/2 mouse compatibility mode.
|
||||
+ */
|
||||
int focaltech_detect(struct psmouse *psmouse, bool set_properties)
|
||||
{
|
||||
if (!psmouse_matches_pnp_id(psmouse, focaltech_pnp_ids))
|
||||
@@ -37,16 +43,404 @@ int focaltech_detect(struct psmouse *psmouse, bool set_properties)
|
||||
|
||||
if (set_properties) {
|
||||
psmouse->vendor = "FocalTech";
|
||||
- psmouse->name = "FocalTech Touchpad in mouse emulation mode";
|
||||
+ psmouse->name = "FocalTech Touchpad";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int focaltech_init(struct psmouse *psmouse)
|
||||
+static void focaltech_reset(struct psmouse *psmouse)
|
||||
{
|
||||
ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
|
||||
psmouse_reset(psmouse);
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_MOUSE_PS2_FOCALTECH
|
||||
+
|
||||
+/*
|
||||
+ * Packet types - the numbers are not consecutive, so we might be missing
|
||||
+ * something here.
|
||||
+ */
|
||||
+#define FOC_TOUCH 0x3 /* bitmap of active fingers */
|
||||
+#define FOC_ABS 0x6 /* absolute position of one finger */
|
||||
+#define FOC_REL 0x9 /* relative position of 1-2 fingers */
|
||||
+
|
||||
+#define FOC_MAX_FINGERS 5
|
||||
+
|
||||
+#define FOC_MAX_X 2431
|
||||
+#define FOC_MAX_Y 1663
|
||||
+
|
||||
+/*
|
||||
+ * Current state of a single finger on the touchpad.
|
||||
+ */
|
||||
+struct focaltech_finger_state {
|
||||
+ /* The touchpad has generated a touch event for the finger */
|
||||
+ bool active;
|
||||
+
|
||||
+ /*
|
||||
+ * The touchpad has sent position data for the finger. The
|
||||
+ * flag is 0 when the finger is not active, and there is a
|
||||
+ * time between the first touch event for the finger and the
|
||||
+ * following absolute position packet for the finger where the
|
||||
+ * touchpad has declared the finger to be valid, but we do not
|
||||
+ * have any valid position yet.
|
||||
+ */
|
||||
+ bool valid;
|
||||
+
|
||||
+ /*
|
||||
+ * Absolute position (from the bottom left corner) of the
|
||||
+ * finger.
|
||||
+ */
|
||||
+ unsigned int x;
|
||||
+ unsigned int y;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Description of the current state of the touchpad hardware.
|
||||
+ */
|
||||
+struct focaltech_hw_state {
|
||||
+ /*
|
||||
+ * The touchpad tracks the positions of the fingers for us,
|
||||
+ * the array indices correspond to the finger indices returned
|
||||
+ * in the report packages.
|
||||
+ */
|
||||
+ struct focaltech_finger_state fingers[FOC_MAX_FINGERS];
|
||||
+
|
||||
+ /* True if the clickpad has been pressed. */
|
||||
+ bool pressed;
|
||||
+};
|
||||
+
|
||||
+struct focaltech_data {
|
||||
+ unsigned int x_max, y_max;
|
||||
+ struct focaltech_hw_state state;
|
||||
+};
|
||||
+
|
||||
+static void focaltech_report_state(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ struct input_dev *dev = psmouse->dev;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < FOC_MAX_FINGERS; i++) {
|
||||
+ struct focaltech_finger_state *finger = &state->fingers[i];
|
||||
+ bool active = finger->active && finger->valid;
|
||||
+
|
||||
+ input_mt_slot(dev, i);
|
||||
+ input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
|
||||
+ if (active) {
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
+ FOC_MAX_Y - finger->y);
|
||||
+ }
|
||||
+ }
|
||||
+ input_mt_report_pointer_emulation(dev, true);
|
||||
+
|
||||
+ input_report_key(psmouse->dev, BTN_LEFT, state->pressed);
|
||||
+ input_sync(psmouse->dev);
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_touch_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ unsigned char fingers = packet[1];
|
||||
+ int i;
|
||||
+
|
||||
+ state->pressed = (packet[0] >> 4) & 1;
|
||||
+
|
||||
+ /* the second byte contains a bitmap of all fingers touching the pad */
|
||||
+ for (i = 0; i < FOC_MAX_FINGERS; i++) {
|
||||
+ state->fingers[i].active = fingers & 0x1;
|
||||
+ if (!state->fingers[i].active) {
|
||||
+ /*
|
||||
+ * Even when the finger becomes active again, we still
|
||||
+ * will have to wait for the first valid position.
|
||||
+ */
|
||||
+ state->fingers[i].valid = false;
|
||||
+ }
|
||||
+ fingers >>= 1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_abs_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ unsigned int finger;
|
||||
+
|
||||
+ finger = (packet[1] >> 4) - 1;
|
||||
+ if (finger >= FOC_MAX_FINGERS) {
|
||||
+ psmouse_err(psmouse, "Invalid finger in abs packet: %d\n",
|
||||
+ finger);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ state->pressed = (packet[0] >> 4) & 1;
|
||||
+
|
||||
+ /*
|
||||
+ * packet[5] contains some kind of tool size in the most
|
||||
+ * significant nibble. 0xff is a special value (latching) that
|
||||
+ * signals a large contact area.
|
||||
+ */
|
||||
+ if (packet[5] == 0xff) {
|
||||
+ state->fingers[finger].valid = false;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
|
||||
+ state->fingers[finger].y = (packet[3] << 8) | packet[4];
|
||||
+ state->fingers[finger].valid = true;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_rel_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ int finger1, finger2;
|
||||
+
|
||||
+ state->pressed = packet[0] >> 7;
|
||||
+ finger1 = ((packet[0] >> 4) & 0x7) - 1;
|
||||
+ if (finger1 < FOC_MAX_FINGERS) {
|
||||
+ state->fingers[finger1].x += (char)packet[1];
|
||||
+ state->fingers[finger1].y += (char)packet[2];
|
||||
+ } else {
|
||||
+ psmouse_err(psmouse, "First finger in rel packet invalid: %d\n",
|
||||
+ finger1);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * If there is an odd number of fingers, the last relative
|
||||
+ * packet only contains one finger. In this case, the second
|
||||
+ * finger index in the packet is 0 (we subtract 1 in the lines
|
||||
+ * above to create array indices, so the finger will overflow
|
||||
+ * and be above FOC_MAX_FINGERS).
|
||||
+ */
|
||||
+ finger2 = ((packet[3] >> 4) & 0x7) - 1;
|
||||
+ if (finger2 < FOC_MAX_FINGERS) {
|
||||
+ state->fingers[finger2].x += (char)packet[4];
|
||||
+ state->fingers[finger2].y += (char)packet[5];
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_packet(struct psmouse *psmouse)
|
||||
+{
|
||||
+ unsigned char *packet = psmouse->packet;
|
||||
+
|
||||
+ switch (packet[0] & 0xf) {
|
||||
+ case FOC_TOUCH:
|
||||
+ focaltech_process_touch_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ case FOC_ABS:
|
||||
+ focaltech_process_abs_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ case FOC_REL:
|
||||
+ focaltech_process_rel_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ psmouse_err(psmouse, "Unknown packet type: %02x\n", packet[0]);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ focaltech_report_state(psmouse);
|
||||
+}
|
||||
+
|
||||
+static psmouse_ret_t focaltech_process_byte(struct psmouse *psmouse)
|
||||
+{
|
||||
+ if (psmouse->pktcnt >= 6) { /* Full packet received */
|
||||
+ focaltech_process_packet(psmouse);
|
||||
+ return PSMOUSE_FULL_PACKET;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * We might want to do some validation of the data here, but
|
||||
+ * we do not know the protocol well enough
|
||||
+ */
|
||||
+ return PSMOUSE_GOOD_DATA;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_switch_protocol(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
+ unsigned char param[3];
|
||||
+
|
||||
+ param[0] = 0;
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = 1;
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETSCALE11))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_ENABLE))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_disconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ focaltech_reset(psmouse);
|
||||
+ kfree(psmouse->private);
|
||||
+ psmouse->private = NULL;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_reconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ error = focaltech_switch_protocol(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse, "Unable to initialize the device\n");
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_input_params(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct input_dev *dev = psmouse->dev;
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+
|
||||
+ /*
|
||||
+ * Undo part of setup done for us by psmouse core since touchpad
|
||||
+ * is not a relative device.
|
||||
+ */
|
||||
+ __clear_bit(EV_REL, dev->evbit);
|
||||
+ __clear_bit(REL_X, dev->relbit);
|
||||
+ __clear_bit(REL_Y, dev->relbit);
|
||||
+ __clear_bit(BTN_RIGHT, dev->keybit);
|
||||
+ __clear_bit(BTN_MIDDLE, dev->keybit);
|
||||
+
|
||||
+ /*
|
||||
+ * Now set up our capabilities.
|
||||
+ */
|
||||
+ __set_bit(EV_ABS, dev->evbit);
|
||||
+ input_set_abs_params(dev, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
|
||||
+ input_set_abs_params(dev, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
|
||||
+ input_mt_init_slots(dev, 5, INPUT_MT_POINTER);
|
||||
+ __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
|
||||
+}
|
||||
+
|
||||
+static int focaltech_read_register(struct ps2dev *ps2dev, int reg,
|
||||
+ unsigned char *param)
|
||||
+{
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETSCALE11))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = 0;
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = reg;
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_read_size(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ char param[3];
|
||||
+
|
||||
+ if (focaltech_read_register(ps2dev, 2, param))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ /* not sure whether this is 100% correct */
|
||||
+ priv->x_max = (unsigned char)param[1] * 128;
|
||||
+ priv->y_max = (unsigned char)param[2] * 128;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+int focaltech_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct focaltech_data *priv;
|
||||
+ int error;
|
||||
+
|
||||
+ psmouse->private = priv = kzalloc(sizeof(struct focaltech_data),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!priv)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ error = focaltech_read_size(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse,
|
||||
+ "Unable to read the size of the touchpad\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ error = focaltech_switch_protocol(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse, "Unable to initialize the device\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ focaltech_set_input_params(psmouse);
|
||||
+
|
||||
+ psmouse->protocol_handler = focaltech_process_byte;
|
||||
+ psmouse->pktsize = 6;
|
||||
+ psmouse->disconnect = focaltech_disconnect;
|
||||
+ psmouse->reconnect = focaltech_reconnect;
|
||||
+ psmouse->cleanup = focaltech_reset;
|
||||
+ /* resync is not supported yet */
|
||||
+ psmouse->resync_time = 0;
|
||||
|
||||
return 0;
|
||||
+
|
||||
+fail:
|
||||
+ focaltech_reset(psmouse);
|
||||
+ kfree(priv);
|
||||
+ return error;
|
||||
}
|
||||
+
|
||||
+bool focaltech_supported(void)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+#else /* CONFIG_MOUSE_PS2_FOCALTECH */
|
||||
+
|
||||
+int focaltech_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+bool focaltech_supported(void)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+#endif /* CONFIG_MOUSE_PS2_FOCALTECH */
|
||||
diff --git a/drivers/input/mouse/focaltech.h b/drivers/input/mouse/focaltech.h
|
||||
index 498650c..71870a9 100644
|
||||
--- a/drivers/input/mouse/focaltech.h
|
||||
+++ b/drivers/input/mouse/focaltech.h
|
||||
@@ -2,6 +2,7 @@
|
||||
* Focaltech TouchPad PS/2 mouse driver
|
||||
*
|
||||
* Copyright (c) 2014 Red Hat Inc.
|
||||
+ * Copyright (c) 2014 Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@@ -18,5 +19,6 @@
|
||||
|
||||
int focaltech_detect(struct psmouse *psmouse, bool set_properties);
|
||||
int focaltech_init(struct psmouse *psmouse);
|
||||
+bool focaltech_supported(void);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
|
||||
index 26994f6..4a9de33 100644
|
||||
--- a/drivers/input/mouse/psmouse-base.c
|
||||
+++ b/drivers/input/mouse/psmouse-base.c
|
||||
@@ -725,16 +725,19 @@ static int psmouse_extensions(struct psmouse *psmouse,
|
||||
|
||||
/* Always check for focaltech, this is safe as it uses pnp-id matching */
|
||||
if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) {
|
||||
- if (!set_properties || focaltech_init(psmouse) == 0) {
|
||||
- /*
|
||||
- * Not supported yet, use bare protocol.
|
||||
- * Note that we need to also restrict
|
||||
- * psmouse_max_proto so that psmouse_initialize()
|
||||
- * does not try to reset rate and resolution,
|
||||
- * because even that upsets the device.
|
||||
- */
|
||||
- psmouse_max_proto = PSMOUSE_PS2;
|
||||
- return PSMOUSE_PS2;
|
||||
+ if (max_proto > PSMOUSE_IMEX) {
|
||||
+ if (!set_properties || focaltech_init(psmouse) == 0) {
|
||||
+ if (focaltech_supported())
|
||||
+ return PSMOUSE_FOCALTECH;
|
||||
+ /*
|
||||
+ * Note that we need to also restrict
|
||||
+ * psmouse_max_proto so that psmouse_initialize()
|
||||
+ * does not try to reset rate and resolution,
|
||||
+ * because even that upsets the device.
|
||||
+ */
|
||||
+ psmouse_max_proto = PSMOUSE_PS2;
|
||||
+ return PSMOUSE_PS2;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1063,6 +1066,15 @@ static const struct psmouse_protocol psmouse_protocols[] = {
|
||||
.alias = "cortps",
|
||||
.detect = cortron_detect,
|
||||
},
|
||||
+#ifdef CONFIG_MOUSE_PS2_FOCALTECH
|
||||
+ {
|
||||
+ .type = PSMOUSE_FOCALTECH,
|
||||
+ .name = "FocalTechPS/2",
|
||||
+ .alias = "focaltech",
|
||||
+ .detect = focaltech_detect,
|
||||
+ .init = focaltech_init,
|
||||
+ },
|
||||
+#endif
|
||||
{
|
||||
.type = PSMOUSE_AUTO,
|
||||
.name = "auto",
|
||||
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
|
||||
index f4cf664..c2ff137 100644
|
||||
--- a/drivers/input/mouse/psmouse.h
|
||||
+++ b/drivers/input/mouse/psmouse.h
|
||||
@@ -96,6 +96,7 @@ enum psmouse_type {
|
||||
PSMOUSE_FSP,
|
||||
PSMOUSE_SYNAPTICS_RELATIVE,
|
||||
PSMOUSE_CYPRESS,
|
||||
+ PSMOUSE_FOCALTECH,
|
||||
PSMOUSE_AUTO /* This one should always be last */
|
||||
};
|
||||
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
From 6557bada461afeaa920a189fae2cff7c8fdce39f Mon Sep 17 00:00:00 2001
|
||||
From: Mike Frysinger <vapier@gentoo.org>
|
||||
Date: Mon, 9 Feb 2015 14:24:47 -0500
|
||||
Subject: [PATCH] KVM: ia64: drop kvm.h from installed user headers
|
||||
|
||||
The header was deleted, so stop trying to install it.
|
||||
|
||||
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
---
|
||||
arch/ia64/include/uapi/asm/Kbuild | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/arch/ia64/include/uapi/asm/Kbuild b/arch/ia64/include/uapi/asm/Kbuild
|
||||
index 1b3f5eb..891002b 100644
|
||||
--- a/arch/ia64/include/uapi/asm/Kbuild
|
||||
+++ b/arch/ia64/include/uapi/asm/Kbuild
|
||||
@@ -18,7 +18,6 @@ header-y += intrinsics.h
|
||||
header-y += ioctl.h
|
||||
header-y += ioctls.h
|
||||
header-y += ipcbuf.h
|
||||
-header-y += kvm.h
|
||||
header-y += kvm_para.h
|
||||
header-y += mman.h
|
||||
header-y += msgbuf.h
|
||||
--
|
||||
2.3.0
|
||||
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
From 796888e942b34cbbd738d9e5478b7d103ee38061 Mon Sep 17 00:00:00 2001
|
||||
From: Bob Moore <robert.moore@intel.com>
|
||||
Date: Mon, 13 Apr 2015 11:50:37 +0800
|
||||
Subject: [PATCH] ACPICA: Add "Windows 2015" string to _OSI support.
|
||||
|
||||
ACPICA commit b293f602a67da478ae0bec129e68bd99787d9908
|
||||
|
||||
This change adds this string for Windows 10.
|
||||
|
||||
Link: https://github.com/acpica/acpica/commit/b293f602
|
||||
Signed-off-by: Bob Moore <robert.moore@intel.com>
|
||||
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/acpica/utosi.c | 1 +
|
||||
include/acpi/actypes.h | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/acpi/acpica/utosi.c b/drivers/acpi/acpica/utosi.c
|
||||
index 574cd31..44035ab 100644
|
||||
--- a/drivers/acpi/acpica/utosi.c
|
||||
+++ b/drivers/acpi/acpica/utosi.c
|
||||
@@ -100,6 +100,7 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = {
|
||||
{"Windows 2009", NULL, 0, ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */
|
||||
{"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */
|
||||
{"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */
|
||||
+ {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */
|
||||
|
||||
/* Feature Group Strings */
|
||||
|
||||
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
|
||||
index f18b7a8..ace520f 100644
|
||||
--- a/include/acpi/actypes.h
|
||||
+++ b/include/acpi/actypes.h
|
||||
@@ -1274,6 +1274,7 @@ struct acpi_memory_list {
|
||||
#define ACPI_OSI_WIN_VISTA_SP2 0x0A
|
||||
#define ACPI_OSI_WIN_7 0x0B
|
||||
#define ACPI_OSI_WIN_8 0x0C
|
||||
+#define ACPI_OSI_WIN_10 0x0D
|
||||
|
||||
/* Definitions of file IO */
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
From 622532bb2fad8fe342fb685727ae0be566f6be5d Mon Sep 17 00:00:00 2001
|
||||
From: Witold Szczeponik <Witold.Szczeponik@gmx.net>
|
||||
Date: Fri, 1 May 2015 19:05:20 +0200
|
||||
Subject: [PATCH] ACPI / PNP: add two IDs to list for PNPACPI device
|
||||
enumeration
|
||||
|
||||
Commit eec15edbb0e1 (ACPI / PNP: use device ID list for PNPACPI device
|
||||
enumeration) changed the way how ACPI devices are enumerated and when
|
||||
they are added to the PNP bus.
|
||||
|
||||
However, it broke the sound card support on (at least) a vintage
|
||||
IBM ThinkPad 600E: with said commit applied, two of the necessary
|
||||
"CSC01xx" devices are not added to the PNP bus and hence can not be
|
||||
found during the initialization of the "snd-cs4236" module. As a
|
||||
consequence, loading "snd-cs4236" causes null pointer exceptions.
|
||||
The attached patch fixes the problem end re-enables sound on the
|
||||
IBM ThinkPad 600E.
|
||||
|
||||
Fixes: eec15edbb0e1 (ACPI / PNP: use device ID list for PNPACPI device enumeration)
|
||||
Signed-off-by: Witold Szczeponik <Witold.Szczeponik@gmx.net>
|
||||
Cc: 3.16+ <stable@vger.kernel.org> # 3.16+
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/acpi_pnp.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/acpi/acpi_pnp.c b/drivers/acpi/acpi_pnp.c
|
||||
index b193f84..ff6d8ad 100644
|
||||
--- a/drivers/acpi/acpi_pnp.c
|
||||
+++ b/drivers/acpi/acpi_pnp.c
|
||||
@@ -304,6 +304,8 @@ static const struct acpi_device_id acpi_pnp_device_ids[] = {
|
||||
{"PNPb006"},
|
||||
/* cs423x-pnpbios */
|
||||
{"CSC0100"},
|
||||
+ {"CSC0103"},
|
||||
+ {"CSC0110"},
|
||||
{"CSC0000"},
|
||||
{"GIM0100"}, /* Guillemot Turtlebeach something appears to be cs4232 compatible */
|
||||
/* es18xx-pnpbios */
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-85
@@ -1,85 +0,0 @@
|
||||
From 3349fb64b2927407017d970dd5c4daf3c5ad69f8 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Bainbridge <chris.bainbridge@gmail.com>
|
||||
Date: Wed, 29 Apr 2015 21:21:40 +0100
|
||||
Subject: [PATCH] ACPI / SBS: Add 5 us delay to fix SBS hangs on MacBook
|
||||
|
||||
Commit 7bc5a2bad0b8 'ACPI: Support _OSI("Darwin") correctly' caused
|
||||
the MacBook firmware to expose the SBS, resulting in intermittent
|
||||
hangs of several minutes on boot, and failure to detect or report
|
||||
the battery. Fix this by adding a 5 us delay to the start of each
|
||||
SMBUS transaction. This timing is the result of experimentation -
|
||||
hangs were observed with 3 us but never with 5 us.
|
||||
|
||||
Fixes: 7bc5a2bad0b8 'ACPI: Support _OSI("Darwin") correctly'
|
||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=94651
|
||||
Signed-off-by: Chris Bainbridge <chris.bainbridge@gmail.com>
|
||||
Cc: 3.18+ <stable@vger.kernel.org> # 3.18+
|
||||
[ rjw: Subject and changelog ]
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/sbshc.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
|
||||
index 26e5b50..bf034f8 100644
|
||||
--- a/drivers/acpi/sbshc.c
|
||||
+++ b/drivers/acpi/sbshc.c
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
+#include <linux/dmi.h>
|
||||
#include "sbshc.h"
|
||||
|
||||
#define PREFIX "ACPI: "
|
||||
@@ -87,6 +88,8 @@ enum acpi_smb_offset {
|
||||
ACPI_SMB_ALARM_DATA = 0x26, /* 2 bytes alarm data */
|
||||
};
|
||||
|
||||
+static bool macbook;
|
||||
+
|
||||
static inline int smb_hc_read(struct acpi_smb_hc *hc, u8 address, u8 *data)
|
||||
{
|
||||
return ec_read(hc->offset + address, data);
|
||||
@@ -132,6 +135,8 @@ static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol,
|
||||
}
|
||||
|
||||
mutex_lock(&hc->lock);
|
||||
+ if (macbook)
|
||||
+ udelay(5);
|
||||
if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp))
|
||||
goto end;
|
||||
if (temp) {
|
||||
@@ -257,12 +262,29 @@ extern int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
|
||||
acpi_handle handle, acpi_ec_query_func func,
|
||||
void *data);
|
||||
|
||||
+static int macbook_dmi_match(const struct dmi_system_id *d)
|
||||
+{
|
||||
+ pr_debug("Detected MacBook, enabling workaround\n");
|
||||
+ macbook = true;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct dmi_system_id acpi_smbus_dmi_table[] = {
|
||||
+ { macbook_dmi_match, "Apple MacBook", {
|
||||
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBook") },
|
||||
+ },
|
||||
+ { },
|
||||
+};
|
||||
+
|
||||
static int acpi_smbus_hc_add(struct acpi_device *device)
|
||||
{
|
||||
int status;
|
||||
unsigned long long val;
|
||||
struct acpi_smb_hc *hc;
|
||||
|
||||
+ dmi_check_system(acpi_smbus_dmi_table);
|
||||
+
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
From b9a5e5e18fbf223502c0b2264c15024e393da928 Mon Sep 17 00:00:00 2001
|
||||
From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
|
||||
Date: Thu, 7 May 2015 21:19:39 +0200
|
||||
Subject: ACPI / init: Fix the ordering of acpi_reserve_resources()
|
||||
|
||||
Since acpi_reserve_resources() is defined as a device_initcall(),
|
||||
there's no guarantee that it will be executed in the right order
|
||||
with respect to the rest of the ACPI initialization code. On some
|
||||
systems this leads to breakage if, for example, the address range
|
||||
that should be reserved for the ACPI fixed registers is given to
|
||||
the PCI host bridge instead if the race is won by the wrong code
|
||||
path.
|
||||
|
||||
Fix this by turning acpi_reserve_resources() into a void function
|
||||
and calling it directly from within the ACPI initialization sequence.
|
||||
|
||||
Reported-and-tested-by: George McCollister <george.mccollister@gmail.com>
|
||||
Link: http://marc.info/?t=143092384600002&r=1&w=2
|
||||
Cc: All applicable <stable@vger.kernel.org>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
|
||||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
|
||||
index 39748bb..7ccba39 100644
|
||||
--- a/drivers/acpi/osl.c
|
||||
+++ b/drivers/acpi/osl.c
|
||||
@@ -182,7 +182,7 @@ static void __init acpi_request_region (struct acpi_generic_address *gas,
|
||||
request_mem_region(addr, length, desc);
|
||||
}
|
||||
|
||||
-static int __init acpi_reserve_resources(void)
|
||||
+static void __init acpi_reserve_resources(void)
|
||||
{
|
||||
acpi_request_region(&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length,
|
||||
"ACPI PM1a_EVT_BLK");
|
||||
@@ -211,10 +211,7 @@ static int __init acpi_reserve_resources(void)
|
||||
if (!(acpi_gbl_FADT.gpe1_block_length & 0x1))
|
||||
acpi_request_region(&acpi_gbl_FADT.xgpe1_block,
|
||||
acpi_gbl_FADT.gpe1_block_length, "ACPI GPE1_BLK");
|
||||
-
|
||||
- return 0;
|
||||
}
|
||||
-device_initcall(acpi_reserve_resources);
|
||||
|
||||
void acpi_os_printf(const char *fmt, ...)
|
||||
{
|
||||
@@ -1845,6 +1842,7 @@ acpi_status __init acpi_os_initialize(void)
|
||||
|
||||
acpi_status __init acpi_os_initialize1(void)
|
||||
{
|
||||
+ acpi_reserve_resources();
|
||||
kacpid_wq = alloc_workqueue("kacpid", 0, 1);
|
||||
kacpi_notify_wq = alloc_workqueue("kacpi_notify", 0, 1);
|
||||
kacpi_hotplug_wq = alloc_ordered_workqueue("kacpi_hotplug", 0);
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From 61f8ff693923e4b19748b0e8287b99778f2661c7 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Bainbridge <chris.bainbridge@gmail.com>
|
||||
Date: Wed, 22 Apr 2015 16:40:21 +0100
|
||||
Subject: ACPI / SBS: Enable battery manager when present
|
||||
|
||||
From: Chris Bainbridge <chris.bainbridge@gmail.com>
|
||||
|
||||
commit 61f8ff693923e4b19748b0e8287b99778f2661c7 upstream.
|
||||
|
||||
Commit 9faf6136ff46 (ACPI / SBS: Disable smart battery manager on
|
||||
Apple) introduced a regression disabling the SBS battery manager.
|
||||
The battery manager should be marked as present when
|
||||
acpi_manager_get_info() returns 0.
|
||||
|
||||
Fixes: 9faf6136ff46 (ACPI / SBS: Disable smart battery manager on Apple)
|
||||
Signed-off-by: Chris Bainbridge <chris.bainbridge@gmail.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/acpi/sbs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/acpi/sbs.c
|
||||
+++ b/drivers/acpi/sbs.c
|
||||
@@ -670,7 +670,7 @@ static int acpi_sbs_add(struct acpi_devi
|
||||
if (!sbs_manager_broken) {
|
||||
result = acpi_manager_get_info(sbs);
|
||||
if (!result) {
|
||||
- sbs->manager_present = 0;
|
||||
+ sbs->manager_present = 1;
|
||||
for (id = 0; id < MAX_SBS_BAT; ++id)
|
||||
if ((sbs->batteries_supported & (1 << id)))
|
||||
acpi_battery_add(sbs, id);
|
||||
-106
@@ -1,106 +0,0 @@
|
||||
From 07f438df22886432ff50772446768f65fbbf3ee0 Mon Sep 17 00:00:00 2001
|
||||
From: Hanjun Guo <hanjun.guo@linaro.org>
|
||||
Date: Tue, 24 Mar 2015 14:02:34 +0000
|
||||
Subject: [PATCH] ACPI / table: Use pr_debug() instead of pr_info() for MADT
|
||||
table scanning
|
||||
|
||||
For a normal 8 cpu sockets system, it will up to 240 cpu threads (Xeon E7
|
||||
v2 family for now), and we need 240 entries for local apic or local x2apic
|
||||
in MADT table, so it will be much verbose information printed with a slow
|
||||
uart console when system booted, this will be even worse with large system
|
||||
with 16/32 cpu sockets.
|
||||
|
||||
This patch just use pr_debug() instead of pr_info() for ioapic/iosapic,
|
||||
local apic/x2apic/sapic structures when scanning the MADT table to remove
|
||||
those verbose information, but leave other structures unchanged.
|
||||
|
||||
CC: Rafael J Wysocki <rjw@rjwysocki.net>
|
||||
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Acked-by: Olof Johansson <olof@lixom.net>
|
||||
Acked-by: Grant Likely <grant.likely@linaro.org>
|
||||
Tested-by: Timur Tabi <timur@codeaurora.org>
|
||||
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
|
||||
Signed-off-by: Will Deacon <will.deacon@arm.com>
|
||||
---
|
||||
drivers/acpi/tables.c | 30 ++++++++++++++++--------------
|
||||
1 file changed, 16 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
|
||||
index 93b8152..f4e5b88 100644
|
||||
--- a/drivers/acpi/tables.c
|
||||
+++ b/drivers/acpi/tables.c
|
||||
@@ -23,6 +23,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+/* Uncomment next line to get verbose printout */
|
||||
+/* #define DEBUG */
|
||||
#define pr_fmt(fmt) "ACPI: " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
@@ -61,9 +63,9 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
|
||||
{
|
||||
struct acpi_madt_local_apic *p =
|
||||
(struct acpi_madt_local_apic *)header;
|
||||
- pr_info("LAPIC (acpi_id[0x%02x] lapic_id[0x%02x] %s)\n",
|
||||
- p->processor_id, p->id,
|
||||
- (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
+ pr_debug("LAPIC (acpi_id[0x%02x] lapic_id[0x%02x] %s)\n",
|
||||
+ p->processor_id, p->id,
|
||||
+ (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -71,9 +73,9 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
|
||||
{
|
||||
struct acpi_madt_local_x2apic *p =
|
||||
(struct acpi_madt_local_x2apic *)header;
|
||||
- pr_info("X2APIC (apic_id[0x%02x] uid[0x%02x] %s)\n",
|
||||
- p->local_apic_id, p->uid,
|
||||
- (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
+ pr_debug("X2APIC (apic_id[0x%02x] uid[0x%02x] %s)\n",
|
||||
+ p->local_apic_id, p->uid,
|
||||
+ (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -81,8 +83,8 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
|
||||
{
|
||||
struct acpi_madt_io_apic *p =
|
||||
(struct acpi_madt_io_apic *)header;
|
||||
- pr_info("IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n",
|
||||
- p->id, p->address, p->global_irq_base);
|
||||
+ pr_debug("IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n",
|
||||
+ p->id, p->address, p->global_irq_base);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -155,9 +157,9 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
|
||||
{
|
||||
struct acpi_madt_io_sapic *p =
|
||||
(struct acpi_madt_io_sapic *)header;
|
||||
- pr_info("IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n",
|
||||
- p->id, (void *)(unsigned long)p->address,
|
||||
- p->global_irq_base);
|
||||
+ pr_debug("IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n",
|
||||
+ p->id, (void *)(unsigned long)p->address,
|
||||
+ p->global_irq_base);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -165,9 +167,9 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
|
||||
{
|
||||
struct acpi_madt_local_sapic *p =
|
||||
(struct acpi_madt_local_sapic *)header;
|
||||
- pr_info("LSAPIC (acpi_id[0x%02x] lsapic_id[0x%02x] lsapic_eid[0x%02x] %s)\n",
|
||||
- p->processor_id, p->id, p->eid,
|
||||
- (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
+ pr_debug("LSAPIC (acpi_id[0x%02x] lsapic_id[0x%02x] lsapic_eid[0x%02x] %s)\n",
|
||||
+ p->processor_id, p->id, p->eid,
|
||||
+ (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled");
|
||||
}
|
||||
break;
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-77
@@ -1,77 +0,0 @@
|
||||
From ff92cfe7cbc05c6c62f5b06c7d9090f4c853cd51 Mon Sep 17 00:00:00 2001
|
||||
From: Aaron Lu <aaron.lu@intel.com>
|
||||
Date: Wed, 11 Mar 2015 22:09:57 +0100
|
||||
Subject: [PATCH] ACPI / video: Allow forcing native backlight on non win8
|
||||
machines
|
||||
|
||||
The native backlight behavior (so not registering both the acpi-video
|
||||
and the vendor backlight driver) can be useful on some non win8 machines
|
||||
too, so change the behavior of the video.use_native_backlight=1 or 0
|
||||
kernel cmdline option to be: if user has set video.use_native_backlight=1
|
||||
or 0, use that no matter if it is a win8 system or not. Also, we will
|
||||
put some known systems into the DMI table to make them either use native
|
||||
backlight interface or not, and the use_native_backlight_dmi is used to
|
||||
reflect that.
|
||||
|
||||
Original-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/video.c | 19 +++++++++++++------
|
||||
1 file changed, 13 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
|
||||
index 26eb70c..2f45dca 100644
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -82,9 +82,15 @@ module_param(allow_duplicates, bool, 0644);
|
||||
* For Windows 8 systems: used to decide if video module
|
||||
* should skip registering backlight interface of its own.
|
||||
*/
|
||||
-static int use_native_backlight_param = -1;
|
||||
+enum {
|
||||
+ NATIVE_BACKLIGHT_NOT_SET = -1,
|
||||
+ NATIVE_BACKLIGHT_OFF,
|
||||
+ NATIVE_BACKLIGHT_ON,
|
||||
+};
|
||||
+
|
||||
+static int use_native_backlight_param = NATIVE_BACKLIGHT_NOT_SET;
|
||||
module_param_named(use_native_backlight, use_native_backlight_param, int, 0444);
|
||||
-static bool use_native_backlight_dmi = true;
|
||||
+static int use_native_backlight_dmi = NATIVE_BACKLIGHT_NOT_SET;
|
||||
|
||||
static int register_count;
|
||||
static struct mutex video_list_lock;
|
||||
@@ -237,15 +243,16 @@ static void acpi_video_switch_brightness(struct work_struct *work);
|
||||
|
||||
static bool acpi_video_use_native_backlight(void)
|
||||
{
|
||||
- if (use_native_backlight_param != -1)
|
||||
+ if (use_native_backlight_param != NATIVE_BACKLIGHT_NOT_SET)
|
||||
return use_native_backlight_param;
|
||||
- else
|
||||
+ else if (use_native_backlight_dmi != NATIVE_BACKLIGHT_NOT_SET)
|
||||
return use_native_backlight_dmi;
|
||||
+ return acpi_osi_is_win8();
|
||||
}
|
||||
|
||||
bool acpi_video_verify_backlight_support(void)
|
||||
{
|
||||
- if (acpi_osi_is_win8() && acpi_video_use_native_backlight() &&
|
||||
+ if (acpi_video_use_native_backlight() &&
|
||||
backlight_device_registered(BACKLIGHT_RAW))
|
||||
return false;
|
||||
return acpi_video_backlight_support();
|
||||
@@ -414,7 +421,7 @@ static int __init video_set_bqc_offset(const struct dmi_system_id *d)
|
||||
|
||||
static int __init video_disable_native_backlight(const struct dmi_system_id *d)
|
||||
{
|
||||
- use_native_backlight_dmi = false;
|
||||
+ use_native_backlight_dmi = NATIVE_BACKLIGHT_OFF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
@@ -1,205 +0,0 @@
|
||||
From 7241ea558c6715501e777396b5fc312c372e11d9 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zubaj <pzubaj@marticonet.sk>
|
||||
Date: Tue, 28 Apr 2015 21:57:29 +0200
|
||||
Subject: ALSA: emu10k1: Emu10k2 32 bit DMA mode
|
||||
|
||||
From: Peter Zubaj <pzubaj@marticonet.sk>
|
||||
|
||||
commit 7241ea558c6715501e777396b5fc312c372e11d9 upstream.
|
||||
|
||||
Looks like audigy emu10k2 (probably emu10k1 - sb live too) support two
|
||||
modes for DMA. Second mode is useful for 64 bit os with more then 2 GB
|
||||
of ram (fixes problems with big soundfont loading)
|
||||
|
||||
1) 32MB from 2 GB address space using 8192 pages (used now as default)
|
||||
2) 16MB from 4 GB address space using 4096 pages
|
||||
|
||||
Mode is set using HCFG_EXPANDED_MEM flag in HCFG register.
|
||||
Also format of emu10k2 page table is then different.
|
||||
|
||||
Signed-off-by: Peter Zubaj <pzubaj@marticonet.sk>
|
||||
Tested-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
include/sound/emu10k1.h | 14 +++++++++-----
|
||||
sound/pci/emu10k1/emu10k1_callback.c | 4 ++--
|
||||
sound/pci/emu10k1/emu10k1_main.c | 17 ++++++++++++-----
|
||||
sound/pci/emu10k1/emupcm.c | 2 +-
|
||||
sound/pci/emu10k1/memory.c | 11 ++++++-----
|
||||
5 files changed, 30 insertions(+), 18 deletions(-)
|
||||
|
||||
--- a/include/sound/emu10k1.h
|
||||
+++ b/include/sound/emu10k1.h
|
||||
@@ -41,7 +41,8 @@
|
||||
|
||||
#define EMUPAGESIZE 4096
|
||||
#define MAXREQVOICES 8
|
||||
-#define MAXPAGES 8192
|
||||
+#define MAXPAGES0 4096 /* 32 bit mode */
|
||||
+#define MAXPAGES1 8192 /* 31 bit mode */
|
||||
#define RESERVED 0
|
||||
#define NUM_MIDI 16
|
||||
#define NUM_G 64 /* use all channels */
|
||||
@@ -50,8 +51,7 @@
|
||||
|
||||
/* FIXME? - according to the OSS driver the EMU10K1 needs a 29 bit DMA mask */
|
||||
#define EMU10K1_DMA_MASK 0x7fffffffUL /* 31bit */
|
||||
-#define AUDIGY_DMA_MASK 0x7fffffffUL /* 31bit FIXME - 32 should work? */
|
||||
- /* See ALSA bug #1276 - rlrevell */
|
||||
+#define AUDIGY_DMA_MASK 0xffffffffUL /* 32bit mode */
|
||||
|
||||
#define TMEMSIZE 256*1024
|
||||
#define TMEMSIZEREG 4
|
||||
@@ -466,8 +466,11 @@
|
||||
|
||||
#define MAPB 0x0d /* Cache map B */
|
||||
|
||||
-#define MAP_PTE_MASK 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */
|
||||
-#define MAP_PTI_MASK 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */
|
||||
+#define MAP_PTE_MASK0 0xfffff000 /* The 20 MSBs of the PTE indexed by the PTI */
|
||||
+#define MAP_PTI_MASK0 0x00000fff /* The 12 bit index to one of the 4096 PTE dwords */
|
||||
+
|
||||
+#define MAP_PTE_MASK1 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */
|
||||
+#define MAP_PTI_MASK1 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */
|
||||
|
||||
/* 0x0e, 0x0f: Not used */
|
||||
|
||||
@@ -1704,6 +1707,7 @@ struct snd_emu10k1 {
|
||||
unsigned short model; /* subsystem id */
|
||||
unsigned int card_type; /* EMU10K1_CARD_* */
|
||||
unsigned int ecard_ctrl; /* ecard control bits */
|
||||
+ unsigned int address_mode; /* address mode */
|
||||
unsigned long dma_mask; /* PCI DMA mask */
|
||||
unsigned int delay_pcm_irq; /* in samples */
|
||||
int max_cache_pages; /* max memory size / PAGE_SIZE */
|
||||
--- a/sound/pci/emu10k1/emu10k1_callback.c
|
||||
+++ b/sound/pci/emu10k1/emu10k1_callback.c
|
||||
@@ -415,7 +415,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
snd_emu10k1_ptr_write(hw, Z2, ch, 0);
|
||||
|
||||
/* invalidate maps */
|
||||
- temp = (hw->silent_page.addr << 1) | MAP_PTI_MASK;
|
||||
+ temp = (hw->silent_page.addr << hw->address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
|
||||
snd_emu10k1_ptr_write(hw, MAPA, ch, temp);
|
||||
snd_emu10k1_ptr_write(hw, MAPB, ch, temp);
|
||||
#if 0
|
||||
@@ -436,7 +436,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
snd_emu10k1_ptr_write(hw, CDF, ch, sample);
|
||||
|
||||
/* invalidate maps */
|
||||
- temp = ((unsigned int)hw->silent_page.addr << 1) | MAP_PTI_MASK;
|
||||
+ temp = ((unsigned int)hw->silent_page.addr << hw_address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
|
||||
snd_emu10k1_ptr_write(hw, MAPA, ch, temp);
|
||||
snd_emu10k1_ptr_write(hw, MAPB, ch, temp);
|
||||
|
||||
--- a/sound/pci/emu10k1/emu10k1_main.c
|
||||
+++ b/sound/pci/emu10k1/emu10k1_main.c
|
||||
@@ -282,7 +282,7 @@ static int snd_emu10k1_init(struct snd_e
|
||||
snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */
|
||||
snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
|
||||
|
||||
- silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
|
||||
+ silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
|
||||
for (ch = 0; ch < NUM_G; ch++) {
|
||||
snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
|
||||
snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
|
||||
@@ -348,6 +348,11 @@ static int snd_emu10k1_init(struct snd_e
|
||||
outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
|
||||
}
|
||||
|
||||
+ if (emu->address_mode == 0) {
|
||||
+ /* use 16M in 4G */
|
||||
+ outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1877,8 +1882,10 @@ int snd_emu10k1_create(struct snd_card *
|
||||
|
||||
is_audigy = emu->audigy = c->emu10k2_chip;
|
||||
|
||||
+ /* set addressing mode */
|
||||
+ emu->address_mode = is_audigy ? 0 : 1;
|
||||
/* set the DMA transfer mask */
|
||||
- emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK;
|
||||
+ emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
|
||||
if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
|
||||
pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
|
||||
dev_err(card->dev,
|
||||
@@ -1903,7 +1910,7 @@ int snd_emu10k1_create(struct snd_card *
|
||||
|
||||
emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
|
||||
if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
|
||||
- 32 * 1024, &emu->ptb_pages) < 0) {
|
||||
+ (emu->address_mode ? 32 : 16) * 1024, &emu->ptb_pages) < 0) {
|
||||
err = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
@@ -2002,8 +2009,8 @@ int snd_emu10k1_create(struct snd_card *
|
||||
|
||||
/* Clear silent pages and set up pointers */
|
||||
memset(emu->silent_page.area, 0, PAGE_SIZE);
|
||||
- silent_page = emu->silent_page.addr << 1;
|
||||
- for (idx = 0; idx < MAXPAGES; idx++)
|
||||
+ silent_page = emu->silent_page.addr << emu->address_mode;
|
||||
+ for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
|
||||
((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
|
||||
|
||||
/* set up voice indices */
|
||||
--- a/sound/pci/emu10k1/emupcm.c
|
||||
+++ b/sound/pci/emu10k1/emupcm.c
|
||||
@@ -380,7 +380,7 @@ static void snd_emu10k1_pcm_init_voice(s
|
||||
snd_emu10k1_ptr_write(emu, Z1, voice, 0);
|
||||
snd_emu10k1_ptr_write(emu, Z2, voice, 0);
|
||||
/* invalidate maps */
|
||||
- silent_page = ((unsigned int)emu->silent_page.addr << 1) | MAP_PTI_MASK;
|
||||
+ silent_page = ((unsigned int)emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
|
||||
snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
|
||||
snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
|
||||
/* modulation envelope */
|
||||
--- a/sound/pci/emu10k1/memory.c
|
||||
+++ b/sound/pci/emu10k1/memory.c
|
||||
@@ -34,10 +34,11 @@
|
||||
* aligned pages in others
|
||||
*/
|
||||
#define __set_ptb_entry(emu,page,addr) \
|
||||
- (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << 1) | (page)))
|
||||
+ (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << (emu->address_mode)) | (page)))
|
||||
|
||||
#define UNIT_PAGES (PAGE_SIZE / EMUPAGESIZE)
|
||||
-#define MAX_ALIGN_PAGES (MAXPAGES / UNIT_PAGES)
|
||||
+#define MAX_ALIGN_PAGES0 (MAXPAGES0 / UNIT_PAGES)
|
||||
+#define MAX_ALIGN_PAGES1 (MAXPAGES1 / UNIT_PAGES)
|
||||
/* get aligned page from offset address */
|
||||
#define get_aligned_page(offset) ((offset) >> PAGE_SHIFT)
|
||||
/* get offset address from aligned page */
|
||||
@@ -124,7 +125,7 @@ static int search_empty_map_area(struct
|
||||
}
|
||||
page = blk->mapped_page + blk->pages;
|
||||
}
|
||||
- size = MAX_ALIGN_PAGES - page;
|
||||
+ size = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0) - page;
|
||||
if (size >= max_size) {
|
||||
*nextp = pos;
|
||||
return page;
|
||||
@@ -181,7 +182,7 @@ static int unmap_memblk(struct snd_emu10
|
||||
q = get_emu10k1_memblk(p, mapped_link);
|
||||
end_page = q->mapped_page;
|
||||
} else
|
||||
- end_page = MAX_ALIGN_PAGES;
|
||||
+ end_page = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0);
|
||||
|
||||
/* remove links */
|
||||
list_del(&blk->mapped_link);
|
||||
@@ -307,7 +308,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10
|
||||
if (snd_BUG_ON(!emu))
|
||||
return NULL;
|
||||
if (snd_BUG_ON(runtime->dma_bytes <= 0 ||
|
||||
- runtime->dma_bytes >= MAXPAGES * EMUPAGESIZE))
|
||||
+ runtime->dma_bytes >= (emu->address_mode ? MAXPAGES1 : MAXPAGES0) * EMUPAGESIZE))
|
||||
return NULL;
|
||||
hdr = emu->memhdr;
|
||||
if (snd_BUG_ON(!hdr))
|
||||
-62
@@ -1,62 +0,0 @@
|
||||
From d02260824e2cad626fb2a9d62e27006d34b6dedc Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Mon, 27 Apr 2015 13:00:09 +0200
|
||||
Subject: ALSA: emu10k1: Fix card shortname string buffer overflow
|
||||
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
commit d02260824e2cad626fb2a9d62e27006d34b6dedc upstream.
|
||||
|
||||
Some models provide too long string for the shortname that has 32bytes
|
||||
including the terminator, and it results in a non-terminated string
|
||||
exposed to the user-space. This isn't too critical, though, as the
|
||||
string is stopped at the succeeding longname string.
|
||||
|
||||
This patch fixes such entries by dropping "SB" prefix (it's enough to
|
||||
fit within 32 bytes, so far). Meanwhile, it also changes strcpy()
|
||||
with strlcpy() to make sure that this kind of problem won't happen in
|
||||
future, too.
|
||||
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
sound/pci/emu10k1/emu10k1.c | 6 ++++--
|
||||
sound/pci/emu10k1/emu10k1_main.c | 4 ++--
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/sound/pci/emu10k1/emu10k1.c
|
||||
+++ b/sound/pci/emu10k1/emu10k1.c
|
||||
@@ -183,8 +183,10 @@ static int snd_card_emu10k1_probe(struct
|
||||
}
|
||||
#endif
|
||||
|
||||
- strcpy(card->driver, emu->card_capabilities->driver);
|
||||
- strcpy(card->shortname, emu->card_capabilities->name);
|
||||
+ strlcpy(card->driver, emu->card_capabilities->driver,
|
||||
+ sizeof(card->driver));
|
||||
+ strlcpy(card->shortname, emu->card_capabilities->name,
|
||||
+ sizeof(card->shortname));
|
||||
snprintf(card->longname, sizeof(card->longname),
|
||||
"%s (rev.%d, serial:0x%x) at 0x%lx, irq %i",
|
||||
card->shortname, emu->revision, emu->serial, emu->port, emu->irq);
|
||||
--- a/sound/pci/emu10k1/emu10k1_main.c
|
||||
+++ b/sound/pci/emu10k1/emu10k1_main.c
|
||||
@@ -1421,7 +1421,7 @@ static struct snd_emu_chip_details emu_c
|
||||
*
|
||||
*/
|
||||
{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
|
||||
- .driver = "Audigy2", .name = "SB Audigy 2 ZS Notebook [SB0530]",
|
||||
+ .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
|
||||
.id = "Audigy2",
|
||||
.emu10k2_chip = 1,
|
||||
.ca0108_chip = 1,
|
||||
@@ -1571,7 +1571,7 @@ static struct snd_emu_chip_details emu_c
|
||||
.adc_1361t = 1, /* 24 bit capture instead of 16bit */
|
||||
.ac97_chip = 1} ,
|
||||
{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
|
||||
- .driver = "Audigy2", .name = "SB Audigy 2 Platinum EX [SB0280]",
|
||||
+ .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]",
|
||||
.id = "Audigy2",
|
||||
.emu10k2_chip = 1,
|
||||
.ca0102_chip = 1,
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
From 9ba52e5812e53f20f23600d79449a3ec05a0254f Mon Sep 17 00:00:00 2001
|
||||
From: Shaohua Li <shli@fb.com>
|
||||
Date: Mon, 4 May 2015 14:32:48 -0600
|
||||
Subject: [PATCH] blk-mq: don't lose requests if a stopped queue restarts
|
||||
|
||||
Normally if driver is busy to dispatch a request the logic is like below:
|
||||
block layer: driver:
|
||||
__blk_mq_run_hw_queue
|
||||
a. blk_mq_stop_hw_queue
|
||||
b. rq add to ctx->dispatch
|
||||
|
||||
later:
|
||||
1. blk_mq_start_hw_queue
|
||||
2. __blk_mq_run_hw_queue
|
||||
|
||||
But it's possible step 1-2 runs between a and b. And since rq isn't in
|
||||
ctx->dispatch yet, step 2 will not run rq. The rq might get lost if
|
||||
there are no subsequent requests kick in.
|
||||
|
||||
Signed-off-by: Shaohua Li <shli@fb.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
block/blk-mq.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
||||
index 76f460e..e68b71b 100644
|
||||
--- a/block/blk-mq.c
|
||||
+++ b/block/blk-mq.c
|
||||
@@ -858,6 +858,16 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
|
||||
spin_lock(&hctx->lock);
|
||||
list_splice(&rq_list, &hctx->dispatch);
|
||||
spin_unlock(&hctx->lock);
|
||||
+ /*
|
||||
+ * the queue is expected stopped with BLK_MQ_RQ_QUEUE_BUSY, but
|
||||
+ * it's possible the queue is stopped and restarted again
|
||||
+ * before this. Queue restart will dispatch requests. And since
|
||||
+ * requests in rq_list aren't added into hctx->dispatch yet,
|
||||
+ * the requests in rq_list might get lost.
|
||||
+ *
|
||||
+ * blk_mq_run_hw_queue() already checks the STOPPED bit
|
||||
+ **/
|
||||
+ blk_mq_run_hw_queue(hctx, true);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
From 2a34c0872adf252f23a6fef2d051a169ac796cef Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@canonical.com>
|
||||
Date: Tue, 21 Apr 2015 10:00:20 +0800
|
||||
Subject: [PATCH] blk-mq: fix CPU hotplug handling
|
||||
|
||||
hctx->tags has to be set as NULL in case that it is to be unmapped
|
||||
no matter if set->tags[hctx->queue_num] is NULL or not in blk_mq_map_swqueue()
|
||||
because shared tags can be freed already from another request queue.
|
||||
|
||||
The same situation has to be considered during handling CPU online too.
|
||||
Unmapped hw queue can be remapped after CPU topo is changed, so we need
|
||||
to allocate tags for the hw queue in blk_mq_map_swqueue(). Then tags
|
||||
allocation for hw queue can be removed in hctx cpu online notifier, and it
|
||||
is reasonable to do that after mapping is updated.
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Reported-by: Dongsu Park <dongsu.park@profitbricks.com>
|
||||
Tested-by: Dongsu Park <dongsu.park@profitbricks.com>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
block/blk-mq.c | 34 +++++++++++++---------------------
|
||||
1 file changed, 13 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
||||
index 1fccb98..76f460e 100644
|
||||
--- a/block/blk-mq.c
|
||||
+++ b/block/blk-mq.c
|
||||
@@ -1574,22 +1574,6 @@ static int blk_mq_hctx_cpu_offline(struc
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
-static int blk_mq_hctx_cpu_online(struct blk_mq_hw_ctx *hctx, int cpu)
|
||||
-{
|
||||
- struct request_queue *q = hctx->queue;
|
||||
- struct blk_mq_tag_set *set = q->tag_set;
|
||||
-
|
||||
- if (set->tags[hctx->queue_num])
|
||||
- return NOTIFY_OK;
|
||||
-
|
||||
- set->tags[hctx->queue_num] = blk_mq_init_rq_map(set, hctx->queue_num);
|
||||
- if (!set->tags[hctx->queue_num])
|
||||
- return NOTIFY_STOP;
|
||||
-
|
||||
- hctx->tags = set->tags[hctx->queue_num];
|
||||
- return NOTIFY_OK;
|
||||
-}
|
||||
-
|
||||
static int blk_mq_hctx_notify(void *data, unsigned long action,
|
||||
unsigned int cpu)
|
||||
{
|
||||
@@ -1597,8 +1581,11 @@ static int blk_mq_hctx_notify(void *data
|
||||
|
||||
if (action == CPU_DEAD || action == CPU_DEAD_FROZEN)
|
||||
return blk_mq_hctx_cpu_offline(hctx, cpu);
|
||||
- else if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN)
|
||||
- return blk_mq_hctx_cpu_online(hctx, cpu);
|
||||
+
|
||||
+ /*
|
||||
+ * In case of CPU online, tags may be reallocated
|
||||
+ * in blk_mq_map_swqueue() after mapping is updated.
|
||||
+ */
|
||||
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
@@ -1780,6 +1767,7 @@ static void blk_mq_map_swqueue(struct re
|
||||
unsigned int i;
|
||||
struct blk_mq_hw_ctx *hctx;
|
||||
struct blk_mq_ctx *ctx;
|
||||
+ struct blk_mq_tag_set *set = q->tag_set;
|
||||
|
||||
queue_for_each_hw_ctx(q, hctx, i) {
|
||||
cpumask_clear(hctx->cpumask);
|
||||
@@ -1806,16 +1794,20 @@ static void blk_mq_map_swqueue(struct re
|
||||
* disable it and free the request entries.
|
||||
*/
|
||||
if (!hctx->nr_ctx) {
|
||||
- struct blk_mq_tag_set *set = q->tag_set;
|
||||
-
|
||||
if (set->tags[i]) {
|
||||
blk_mq_free_rq_map(set, set->tags[i], i);
|
||||
set->tags[i] = NULL;
|
||||
- hctx->tags = NULL;
|
||||
}
|
||||
+ hctx->tags = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
+ /* unmapped hw queue can be remapped after CPU topo changed */
|
||||
+ if (!set->tags[i])
|
||||
+ set->tags[i] = blk_mq_init_rq_map(set, i);
|
||||
+ hctx->tags = set->tags[i];
|
||||
+ WARN_ON(!hctx->tags);
|
||||
+
|
||||
/*
|
||||
* Initialize batch roundrobin counts
|
||||
*/
|
||||
@@ -1,38 +0,0 @@
|
||||
From b2387ddcced8de3e6471a2fb16a409577063016f Mon Sep 17 00:00:00 2001
|
||||
From: Shaohua Li <shli@fb.com>
|
||||
Date: Fri, 1 May 2015 09:59:44 -0700
|
||||
Subject: [PATCH] blk-mq: fix FUA request hang
|
||||
|
||||
When a FUA request enters its DATA stage of flush pipeline, the
|
||||
request is added to mq requeue list, the request will then be added to
|
||||
ctx->rq_list. blk_mq_attempt_merge() might merge the request with a bio.
|
||||
Later when the request is finished the flush pipeline, the
|
||||
request->__data_len is 0. Then I only saw the bio gets endio called, the
|
||||
original request never finish.
|
||||
|
||||
Adding REQ_FLUSH_SEQ into REQ_NOMERGE_FLAGS looks an easy fix.
|
||||
|
||||
stable: 3.15+
|
||||
|
||||
Signed-off-by: Shaohua Li <shli@fb.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
include/linux/blk_types.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
|
||||
index a1b25e3..b7299fe 100644
|
||||
--- a/include/linux/blk_types.h
|
||||
+++ b/include/linux/blk_types.h
|
||||
@@ -220,7 +220,7 @@ enum rq_flag_bits {
|
||||
|
||||
/* This mask is used for both bio and request merge checking */
|
||||
#define REQ_NOMERGE_FLAGS \
|
||||
- (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA)
|
||||
+ (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA | REQ_FLUSH_SEQ)
|
||||
|
||||
#define REQ_RAHEAD (1ULL << __REQ_RAHEAD)
|
||||
#define REQ_THROTTLED (1ULL << __REQ_THROTTLED)
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-62
@@ -1,62 +0,0 @@
|
||||
From f054b56c951bf1731ba7314a4c7f1cc0b2977cc9 Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@canonical.com>
|
||||
Date: Tue, 21 Apr 2015 10:00:19 +0800
|
||||
Subject: [PATCH] blk-mq: fix race between timeout and CPU hotplug
|
||||
|
||||
Firstly during CPU hotplug, even queue is freezed, timeout
|
||||
handler still may come and access hctx->tags, which may cause
|
||||
use after free, so this patch deactivates timeout handler
|
||||
inside CPU hotplug notifier.
|
||||
|
||||
Secondly, tags can be shared by more than one queues, so we
|
||||
have to check if the hctx has been unmapped, otherwise
|
||||
still use-after-free on tags can be triggered.
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Reported-by: Dongsu Park <dongsu.park@profitbricks.com>
|
||||
Tested-by: Dongsu Park <dongsu.park@profitbricks.com>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
block/blk-mq.c | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
||||
index ade8a2d..1fccb98 100644
|
||||
--- a/block/blk-mq.c
|
||||
+++ b/block/blk-mq.c
|
||||
@@ -677,8 +677,11 @@ static void blk_mq_rq_timer(unsigned long priv)
|
||||
data.next = blk_rq_timeout(round_jiffies_up(data.next));
|
||||
mod_timer(&q->timeout, data.next);
|
||||
} else {
|
||||
- queue_for_each_hw_ctx(q, hctx, i)
|
||||
- blk_mq_tag_idle(hctx);
|
||||
+ queue_for_each_hw_ctx(q, hctx, i) {
|
||||
+ /* the hctx may be unmapped, so check it here */
|
||||
+ if (blk_mq_hw_queue_mapped(hctx))
|
||||
+ blk_mq_tag_idle(hctx);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2090,9 +2093,16 @@ static int blk_mq_queue_reinit_notify(struct notifier_block *nb,
|
||||
*/
|
||||
list_for_each_entry(q, &all_q_list, all_q_node)
|
||||
blk_mq_freeze_queue_start(q);
|
||||
- list_for_each_entry(q, &all_q_list, all_q_node)
|
||||
+ list_for_each_entry(q, &all_q_list, all_q_node) {
|
||||
blk_mq_freeze_queue_wait(q);
|
||||
|
||||
+ /*
|
||||
+ * timeout handler can't touch hw queue during the
|
||||
+ * reinitialization
|
||||
+ */
|
||||
+ del_timer_sync(&q->timeout);
|
||||
+ }
|
||||
+
|
||||
list_for_each_entry(q, &all_q_list, all_q_node)
|
||||
blk_mq_queue_reinit(q);
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
From 41c0126b3f22ef36b97b3c38b8f29569848a5ce2 Mon Sep 17 00:00:00 2001
|
||||
From: Tahsin Erdogan <tahsin@google.com>
|
||||
Date: Tue, 19 May 2015 13:55:21 -0700
|
||||
Subject: block: Make CFQ default to IOPS mode on SSDs
|
||||
|
||||
CFQ idling causes reduced IOPS throughput on non-rotational disks.
|
||||
Since disk head seeking is not applicable to SSDs, it doesn't really
|
||||
help performance by anticipating future near-by IO requests.
|
||||
|
||||
By turning off idling (and switching to IOPS mode), we allow other
|
||||
processes to dispatch IO requests down to the driver and so increase IO
|
||||
throughput.
|
||||
|
||||
Following FIO benchmark results were taken on a cloud SSD offering with
|
||||
idling on and off:
|
||||
|
||||
Idling iops avg-lat(ms) stddev bw
|
||||
------------------------------------------------------
|
||||
On 7054 90.107 38.697 28217KB/s
|
||||
Off 29255 21.836 11.730 117022KB/s
|
||||
|
||||
fio --name=temp --size=100G --time_based --ioengine=libaio \
|
||||
--randrepeat=0 --direct=1 --invalidate=1 --verify=0 \
|
||||
--verify_fatal=0 --rw=randread --blocksize=4k --group_reporting=1 \
|
||||
--filename=/dev/sdb --runtime=10 --iodepth=64 --numjobs=10
|
||||
|
||||
And the following is from a local SSD run:
|
||||
|
||||
Idling iops avg-lat(ms) stddev bw
|
||||
------------------------------------------------------
|
||||
On 19320 33.043 14.068 77281KB/s
|
||||
Off 21626 29.465 12.662 86507KB/s
|
||||
|
||||
fio --name=temp --size=5G --time_based --ioengine=libaio \
|
||||
--randrepeat=0 --direct=1 --invalidate=1 --verify=0 \
|
||||
--verify_fatal=0 --rw=randread --blocksize=4k --group_reporting=1 \
|
||||
--filename=/fio_data --runtime=10 --iodepth=64 --numjobs=10
|
||||
|
||||
Reviewed-by: Nauman Rafique <nauman@google.com>
|
||||
Signed-off-by: Tahsin Erdogan <tahsin@google.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
|
||||
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
|
||||
index 5da8e6e..402be01 100644
|
||||
--- a/block/cfq-iosched.c
|
||||
+++ b/block/cfq-iosched.c
|
||||
@@ -4460,7 +4460,7 @@ static int cfq_init_queue(struct request_queue *q, struct elevator_type *e)
|
||||
cfqd->cfq_slice[1] = cfq_slice_sync;
|
||||
cfqd->cfq_target_latency = cfq_target_latency;
|
||||
cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
|
||||
- cfqd->cfq_slice_idle = cfq_slice_idle;
|
||||
+ cfqd->cfq_slice_idle = blk_queue_nonrot(q) ? 0 : cfq_slice_idle;
|
||||
cfqd->cfq_group_idle = cfq_group_idle;
|
||||
cfqd->cfq_latency = 1;
|
||||
cfqd->hw_tag = -1;
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
From 0bb979472a7401022109e81dd89d777adea58710 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@fb.com>
|
||||
Date: Wed, 10 Jun 2015 08:01:20 -0600
|
||||
Subject: cfq-iosched: fix the setting of IOPS mode on SSDs
|
||||
|
||||
A previous commit wanted to make CFQ default to IOPS mode on
|
||||
non-rotational storage, however it did so when the queue was
|
||||
initialized and the non-rotational flag is only set later on
|
||||
in the probe.
|
||||
|
||||
Add an elevator hook that gets called off the add_disk() path,
|
||||
at that point we know that feature probing has finished, and
|
||||
we can reliably check for the various flags that drivers can
|
||||
set.
|
||||
|
||||
Fixes: 41c0126b ("block: Make CFQ default to IOPS mode on SSDs")
|
||||
Tested-by: Romain Francoise <romain@orebokech.com>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
|
||||
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
|
||||
index c808ad8..d1d0cb2 100644
|
||||
--- a/block/cfq-iosched.c
|
||||
+++ b/block/cfq-iosched.c
|
||||
@@ -4508,7 +4508,7 @@ static int cfq_init_queue(struct request_queue *q, struct elevator_type *e)
|
||||
cfqd->cfq_slice[1] = cfq_slice_sync;
|
||||
cfqd->cfq_target_latency = cfq_target_latency;
|
||||
cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
|
||||
- cfqd->cfq_slice_idle = blk_queue_nonrot(q) ? 0 : cfq_slice_idle;
|
||||
+ cfqd->cfq_slice_idle = cfq_slice_idle;
|
||||
cfqd->cfq_group_idle = cfq_group_idle;
|
||||
cfqd->cfq_latency = 1;
|
||||
cfqd->hw_tag = -1;
|
||||
@@ -4525,6 +4525,18 @@ out_free:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static void cfq_registered_queue(struct request_queue *q)
|
||||
+{
|
||||
+ struct elevator_queue *e = q->elevator;
|
||||
+ struct cfq_data *cfqd = e->elevator_data;
|
||||
+
|
||||
+ /*
|
||||
+ * Default to IOPS mode with no idling for SSDs
|
||||
+ */
|
||||
+ if (blk_queue_nonrot(q))
|
||||
+ cfqd->cfq_slice_idle = 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* sysfs parts below -->
|
||||
*/
|
||||
@@ -4640,6 +4652,7 @@ static struct elevator_type iosched_cfq = {
|
||||
.elevator_may_queue_fn = cfq_may_queue,
|
||||
.elevator_init_fn = cfq_init_queue,
|
||||
.elevator_exit_fn = cfq_exit_queue,
|
||||
+ .elevator_registered_fn = cfq_registered_queue,
|
||||
},
|
||||
.icq_size = sizeof(struct cfq_io_cq),
|
||||
.icq_align = __alignof__(struct cfq_io_cq),
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 59794d0..5f04527 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -810,6 +810,8 @@ int elv_register_queue(struct request_queue *q)
|
||||
}
|
||||
kobject_uevent(&e->kobj, KOBJ_ADD);
|
||||
e->registered = 1;
|
||||
+ if (e->type->ops.elevator_registered_fn)
|
||||
+ e->type->ops.elevator_registered_fn(q);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
|
||||
index 45a9147..638b324 100644
|
||||
--- a/include/linux/elevator.h
|
||||
+++ b/include/linux/elevator.h
|
||||
@@ -39,6 +39,7 @@ typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct reques
|
||||
typedef int (elevator_init_fn) (struct request_queue *,
|
||||
struct elevator_type *e);
|
||||
typedef void (elevator_exit_fn) (struct elevator_queue *);
|
||||
+typedef void (elevator_registered_fn) (struct request_queue *);
|
||||
|
||||
struct elevator_ops
|
||||
{
|
||||
@@ -68,6 +69,7 @@ struct elevator_ops
|
||||
|
||||
elevator_init_fn *elevator_init_fn;
|
||||
elevator_exit_fn *elevator_exit_fn;
|
||||
+ elevator_registered_fn *elevator_registered_fn;
|
||||
};
|
||||
|
||||
#define ELV_NAME_MAX (16)
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
Add quirk to disable ISOC transfers for device
|
||||
"ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter"
|
||||
http://qa.mandriva.com/show_bug.cgi?id=30638
|
||||
|
||||
Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
|
||||
---
|
||||
drivers/bluetooth/btusb.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
(status: submitted upstream to bluez-devel ML on 2007-09-29)
|
||||
|
||||
--- linux-2.6.28/drivers/bluetooth/btusb.c.orig 2009-02-11 10:29:20.000000000 -0500
|
||||
+++ linux-2.6.28/drivers/bluetooth/btusb.c 2009-02-11 10:30:27.000000000 -0500
|
||||
@@ -120,6 +120,9 @@ static struct usb_device_id blacklist_ta
|
||||
/* Kensington Bluetooth USB adapter */
|
||||
{ USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
|
||||
|
||||
+ /* ISSC Bluetooth Adapter v3.1 */
|
||||
+ { USB_DEVICE(0x1131, 0x1001), .driver_info = BTUSB_BROKEN_ISOC },
|
||||
+
|
||||
/* RTX Telecom based adapters with buggy SCO support */
|
||||
{ USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
|
||||
{ USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
From d67e199611b986b345ea3087ee2e4a15da1c98b3 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Date: Tue, 21 Apr 2015 16:46:28 +0300
|
||||
Subject: [PATCH] efi: Fix error handling in add_sysfs_runtime_map_entry()
|
||||
|
||||
I spotted two (difficult to hit) bugs while reviewing this.
|
||||
|
||||
1) There is a double free bug because we unregister "map_kset" in
|
||||
add_sysfs_runtime_map_entry() and also efi_runtime_map_init().
|
||||
2) If we fail to allocate "entry" then we should return
|
||||
ERR_PTR(-ENOMEM) instead of NULL.
|
||||
|
||||
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Cc: Dave Young <dyoung@redhat.com>
|
||||
Cc: Guangyu Sun <guangyu.sun@oracle.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
drivers/firmware/efi/runtime-map.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/firmware/efi/runtime-map.c b/drivers/firmware/efi/runtime-map.c
|
||||
index 87b8e3b..5c55227 100644
|
||||
--- a/drivers/firmware/efi/runtime-map.c
|
||||
+++ b/drivers/firmware/efi/runtime-map.c
|
||||
@@ -120,7 +120,8 @@ add_sysfs_runtime_map_entry(struct kobject *kobj, int nr)
|
||||
entry = kzalloc(sizeof(*entry), GFP_KERNEL);
|
||||
if (!entry) {
|
||||
kset_unregister(map_kset);
|
||||
- return entry;
|
||||
+ map_kset = NULL;
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
memcpy(&entry->md, efi_runtime_map + nr * efi_memdesc_size,
|
||||
@@ -132,6 +133,7 @@ add_sysfs_runtime_map_entry(struct kobject *kobj, int nr)
|
||||
if (ret) {
|
||||
kobject_put(&entry->kobj);
|
||||
kset_unregister(map_kset);
|
||||
+ map_kset = NULL;
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
@@ -195,8 +197,6 @@ out_add_entry:
|
||||
entry = *(map_entries + j);
|
||||
kobject_put(&entry->kobj);
|
||||
}
|
||||
- if (map_kset)
|
||||
- kset_unregister(map_kset);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.3.2
|
||||
|
||||
+103
-55
@@ -1,20 +1,22 @@
|
||||
|
||||
fs/aufs/Kconfig | 2 +-
|
||||
fs/dcache.c | 1 +
|
||||
fs/file_table.c | 2 ++
|
||||
fs/inode.c | 2 ++
|
||||
fs/namespace.c | 2 ++
|
||||
fs/notify/group.c | 4 ++++
|
||||
fs/notify/mark.c | 4 ++++
|
||||
fs/open.c | 1 +
|
||||
fs/open.c | 2 ++
|
||||
fs/read_write.c | 2 ++
|
||||
fs/splice.c | 2 ++
|
||||
security/commoncap.c | 2 ++
|
||||
security/device_cgroup.c | 2 ++
|
||||
security/security.c | 10 ++++++++++
|
||||
11 files changed, 31 insertions(+), 1 deletion(-)
|
||||
13 files changed, 36 insertions(+), 1 deletion(-)
|
||||
|
||||
diff -Nurp linux-3.19-aufs/fs/aufs/Kconfig linux-3.19-aufs-modular/fs/aufs/Kconfig
|
||||
--- linux-3.19-aufs/fs/aufs/Kconfig 2015-02-22 23:16:18.302926737 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/aufs/Kconfig 2015-02-22 23:23:41.617919334 +0200
|
||||
diff -Nurp linux-4.1-aufs4/fs/aufs/Kconfig linux-4.1-aufs4-mod/fs/aufs/Kconfig
|
||||
--- linux-4.1-aufs4/fs/aufs/Kconfig 2015-06-25 20:09:18.250319377 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/aufs/Kconfig 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -1,5 +1,5 @@
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
@@ -22,10 +24,10 @@ diff -Nurp linux-3.19-aufs/fs/aufs/Kconfig linux-3.19-aufs-modular/fs/aufs/Kconf
|
||||
help
|
||||
Aufs is a stackable unification filesystem such as Unionfs,
|
||||
which unifies several directories and provides a merged single
|
||||
diff -Nurp linux-3.19-aufs/fs/dcache.c linux-3.19-aufs-modular/fs/dcache.c
|
||||
--- linux-3.19-aufs/fs/dcache.c 2015-02-22 23:16:18.313926786 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/dcache.c 2015-02-22 23:23:41.620919348 +0200
|
||||
@@ -1124,6 +1124,7 @@ rename_retry:
|
||||
diff -Nurp linux-4.1-aufs4/fs/dcache.c linux-4.1-aufs4-mod/fs/dcache.c
|
||||
--- linux-4.1-aufs4/fs/dcache.c 2015-06-25 20:09:18.280319109 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/dcache.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -1269,6 +1269,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
@@ -33,10 +35,29 @@ diff -Nurp linux-3.19-aufs/fs/dcache.c linux-3.19-aufs-modular/fs/dcache.c
|
||||
|
||||
/*
|
||||
* Search for at least 1 mount point in the dentry's subdirs.
|
||||
diff -Nurp linux-3.19-aufs/fs/inode.c linux-3.19-aufs-modular/fs/inode.c
|
||||
--- linux-3.19-aufs/fs/inode.c 2015-02-22 23:16:18.314926790 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/inode.c 2015-02-22 23:23:41.617919334 +0200
|
||||
@@ -57,6 +57,7 @@ static struct hlist_head *inode_hashtabl
|
||||
diff -Nurp linux-4.1-aufs4/fs/file_table.c linux-4.1-aufs4-mod/fs/file_table.c
|
||||
--- linux-4.1-aufs4/fs/file_table.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/file_table.c 2015-06-25 23:47:57.011958835 +0200
|
||||
@@ -147,6 +147,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
}
|
||||
+EXPORT_SYMBOL(get_empty_filp);
|
||||
|
||||
/**
|
||||
* alloc_file - allocate and initialize a 'struct file'
|
||||
@@ -308,6 +309,7 @@ void put_filp(struct file *file)
|
||||
file_free(file);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL(put_filp);
|
||||
|
||||
void __init files_init(unsigned long mempages)
|
||||
{
|
||||
diff -Nurp linux-4.1-aufs4/fs/inode.c linux-4.1-aufs4-mod/fs/inode.c
|
||||
--- linux-4.1-aufs4/fs/inode.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/inode.c 2015-06-25 22:45:45.000000000 +0200
|
||||
@@ -58,6 +58,7 @@ static struct hlist_head *inode_hashtabl
|
||||
static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
|
||||
|
||||
__cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
|
||||
@@ -44,18 +65,18 @@ diff -Nurp linux-3.19-aufs/fs/inode.c linux-3.19-aufs-modular/fs/inode.c
|
||||
|
||||
/*
|
||||
* Empty aops. Can be used for the cases where the user does not
|
||||
@@ -1515,6 +1516,7 @@ int update_time(struct inode *inode, str
|
||||
mark_inode_dirty_sync(inode);
|
||||
return 0;
|
||||
@@ -1575,6 +1576,7 @@ static int update_time(struct inode *ino
|
||||
|
||||
return update_time(inode, time, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL(update_time);
|
||||
|
||||
/**
|
||||
* touch_atime - update the access time
|
||||
diff -Nurp linux-3.19-aufs/fs/namespace.c linux-3.19-aufs-modular/fs/namespace.c
|
||||
--- linux-3.19-aufs/fs/namespace.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/namespace.c 2015-02-22 23:23:41.618919339 +0200
|
||||
@@ -454,6 +454,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
diff -Nurp linux-4.1-aufs4/fs/namespace.c linux-4.1-aufs4-mod/fs/namespace.c
|
||||
--- linux-4.1-aufs4/fs/namespace.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/namespace.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -463,6 +463,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
@@ -63,7 +84,7 @@ diff -Nurp linux-3.19-aufs/fs/namespace.c linux-3.19-aufs-modular/fs/namespace.c
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -1728,6 +1729,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
@@ -1768,6 +1769,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -71,9 +92,9 @@ diff -Nurp linux-3.19-aufs/fs/namespace.c linux-3.19-aufs-modular/fs/namespace.c
|
||||
|
||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
||||
{
|
||||
diff -Nurp linux-3.19-aufs/fs/notify/group.c linux-3.19-aufs-modular/fs/notify/group.c
|
||||
--- linux-3.19-aufs/fs/notify/group.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/notify/group.c 2015-02-22 23:23:41.618919339 +0200
|
||||
diff -Nurp linux-4.1-aufs4/fs/notify/group.c linux-4.1-aufs4-mod/fs/notify/group.c
|
||||
--- linux-4.1-aufs4/fs/notify/group.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/notify/group.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
@@ -106,9 +127,9 @@ diff -Nurp linux-3.19-aufs/fs/notify/group.c linux-3.19-aufs-modular/fs/notify/g
|
||||
|
||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
diff -Nurp linux-3.19-aufs/fs/notify/mark.c linux-3.19-aufs-modular/fs/notify/mark.c
|
||||
--- linux-3.19-aufs/fs/notify/mark.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/notify/mark.c 2015-02-22 23:23:41.618919339 +0200
|
||||
diff -Nurp linux-4.1-aufs4/fs/notify/mark.c linux-4.1-aufs4-mod/fs/notify/mark.c
|
||||
--- linux-4.1-aufs4/fs/notify/mark.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/notify/mark.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -109,6 +109,7 @@ void fsnotify_put_mark(struct fsnotify_m
|
||||
mark->free_mark(mark);
|
||||
}
|
||||
@@ -141,9 +162,9 @@ diff -Nurp linux-3.19-aufs/fs/notify/mark.c linux-3.19-aufs-modular/fs/notify/ma
|
||||
|
||||
static int fsnotify_mark_destroy(void *ignored)
|
||||
{
|
||||
diff -Nurp linux-3.19-aufs/fs/open.c linux-3.19-aufs-modular/fs/open.c
|
||||
--- linux-3.19-aufs/fs/open.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/open.c 2015-02-22 23:23:41.618919339 +0200
|
||||
diff -Nurp linux-4.1-aufs4/fs/open.c linux-4.1-aufs4-mod/fs/open.c
|
||||
--- linux-4.1-aufs4/fs/open.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/open.c 2015-06-25 23:49:02.741362661 +0200
|
||||
@@ -62,6 +62,7 @@ int do_truncate(struct dentry *dentry, l
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
return ret;
|
||||
@@ -152,10 +173,37 @@ diff -Nurp linux-3.19-aufs/fs/open.c linux-3.19-aufs-modular/fs/open.c
|
||||
|
||||
long vfs_truncate(struct path *path, loff_t length)
|
||||
{
|
||||
diff -Nurp linux-3.19-aufs/fs/splice.c linux-3.19-aufs-modular/fs/splice.c
|
||||
--- linux-3.19-aufs/fs/splice.c 2015-02-22 23:16:18.315926795 +0200
|
||||
+++ linux-3.19-aufs-modular/fs/splice.c 2015-02-22 23:23:41.619919343 +0200
|
||||
@@ -1127,6 +1127,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
@@ -676,6 +677,7 @@ int open_check_o_direct(struct file *f)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(open_check_o_direct);
|
||||
|
||||
static int do_dentry_open(struct file *f,
|
||||
int (*open)(struct inode *, struct file *),
|
||||
diff -Nurp linux-4.1-aufs4/fs/read_write.c linux-4.1-aufs4-mod/fs/read_write.c
|
||||
--- linux-4.1-aufs4/fs/read_write.c 2015-06-25 20:09:18.280319109 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/read_write.c 2015-06-25 23:43:56.804138140 +0200
|
||||
@@ -504,6 +504,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
return new_sync_read;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL(vfs_readf);
|
||||
|
||||
vfs_writef_t vfs_writef(struct file *file)
|
||||
{
|
||||
@@ -515,6 +516,7 @@ vfs_writef_t vfs_writef(struct file *fil
|
||||
return new_sync_write;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL(vfs_writef);
|
||||
|
||||
ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
|
||||
{
|
||||
diff -Nurp linux-4.1-aufs4/fs/splice.c linux-4.1-aufs4-mod/fs/splice.c
|
||||
--- linux-4.1-aufs4/fs/splice.c 2015-06-25 20:09:18.280319109 +0200
|
||||
+++ linux-4.1-aufs4-mod/fs/splice.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -1114,6 +1114,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
|
||||
return splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
@@ -163,7 +211,7 @@ diff -Nurp linux-3.19-aufs/fs/splice.c linux-3.19-aufs-modular/fs/splice.c
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -1153,6 +1154,7 @@ long do_splice_to(struct file *in, loff_
|
||||
@@ -1140,6 +1141,7 @@ long do_splice_to(struct file *in, loff_
|
||||
|
||||
return splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
@@ -171,10 +219,10 @@ diff -Nurp linux-3.19-aufs/fs/splice.c linux-3.19-aufs-modular/fs/splice.c
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-3.19-aufs/security/commoncap.c linux-3.19-aufs-modular/security/commoncap.c
|
||||
--- linux-3.19-aufs/security/commoncap.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/security/commoncap.c 2015-02-22 23:23:41.619919343 +0200
|
||||
@@ -979,9 +979,11 @@ int cap_mmap_addr(unsigned long addr)
|
||||
diff -Nurp linux-4.1-aufs4/security/commoncap.c linux-4.1-aufs4-mod/security/commoncap.c
|
||||
--- linux-4.1-aufs4/security/commoncap.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/security/commoncap.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -975,9 +975,11 @@ int cap_mmap_addr(unsigned long addr)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -186,9 +234,9 @@ diff -Nurp linux-3.19-aufs/security/commoncap.c linux-3.19-aufs-modular/security
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(cap_mmap_file);
|
||||
diff -Nurp linux-3.19-aufs/security/device_cgroup.c linux-3.19-aufs-modular/security/device_cgroup.c
|
||||
--- linux-3.19-aufs/security/device_cgroup.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/security/device_cgroup.c 2015-02-22 23:23:41.619919343 +0200
|
||||
diff -Nurp linux-4.1-aufs4/security/device_cgroup.c linux-4.1-aufs4-mod/security/device_cgroup.c
|
||||
--- linux-4.1-aufs4/security/device_cgroup.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/security/device_cgroup.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/device_cgroup.h>
|
||||
#include <linux/cgroup.h>
|
||||
@@ -205,10 +253,10 @@ diff -Nurp linux-3.19-aufs/security/device_cgroup.c linux-3.19-aufs-modular/secu
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/security.c
|
||||
--- linux-3.19-aufs/security/security.c 2015-02-09 04:54:22.000000000 +0200
|
||||
+++ linux-3.19-aufs-modular/security/security.c 2015-02-22 23:23:41.619919343 +0200
|
||||
@@ -407,6 +407,7 @@ int security_path_rmdir(struct path *dir
|
||||
diff -Nurp linux-4.1-aufs4/security/security.c linux-4.1-aufs4-mod/security/security.c
|
||||
--- linux-4.1-aufs4/security/security.c 2015-06-22 07:05:43.000000000 +0200
|
||||
+++ linux-4.1-aufs4-mod/security/security.c 2015-06-25 20:11:30.629136790 +0200
|
||||
@@ -430,6 +430,7 @@ int security_path_rmdir(struct path *dir
|
||||
return 0;
|
||||
return security_ops->path_rmdir(dir, dentry);
|
||||
}
|
||||
@@ -216,7 +264,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_unlink(struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -423,6 +424,7 @@ int security_path_symlink(struct path *d
|
||||
@@ -446,6 +447,7 @@ int security_path_symlink(struct path *d
|
||||
return 0;
|
||||
return security_ops->path_symlink(dir, dentry, old_name);
|
||||
}
|
||||
@@ -224,7 +272,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -431,6 +433,7 @@ int security_path_link(struct dentry *ol
|
||||
@@ -454,6 +456,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return security_ops->path_link(old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
@@ -232,7 +280,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||
struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -458,6 +461,7 @@ int security_path_truncate(struct path *
|
||||
@@ -481,6 +484,7 @@ int security_path_truncate(struct path *
|
||||
return 0;
|
||||
return security_ops->path_truncate(path);
|
||||
}
|
||||
@@ -240,7 +288,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -465,6 +469,7 @@ int security_path_chmod(struct path *pat
|
||||
@@ -488,6 +492,7 @@ int security_path_chmod(struct path *pat
|
||||
return 0;
|
||||
return security_ops->path_chmod(path, mode);
|
||||
}
|
||||
@@ -248,7 +296,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -472,6 +477,7 @@ int security_path_chown(struct path *pat
|
||||
@@ -495,6 +500,7 @@ int security_path_chown(struct path *pat
|
||||
return 0;
|
||||
return security_ops->path_chown(path, uid, gid);
|
||||
}
|
||||
@@ -256,7 +304,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_path_chroot(struct path *path)
|
||||
{
|
||||
@@ -557,6 +563,7 @@ int security_inode_readlink(struct dentr
|
||||
@@ -580,6 +586,7 @@ int security_inode_readlink(struct dentr
|
||||
return 0;
|
||||
return security_ops->inode_readlink(dentry);
|
||||
}
|
||||
@@ -264,7 +312,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
@@ -571,6 +578,7 @@ int security_inode_permission(struct ino
|
||||
@@ -594,6 +601,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return security_ops->inode_permission(inode, mask);
|
||||
}
|
||||
@@ -272,7 +320,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -693,6 +701,7 @@ int security_file_permission(struct file
|
||||
@@ -716,6 +724,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
@@ -280,7 +328,7 @@ diff -Nurp linux-3.19-aufs/security/security.c linux-3.19-aufs-modular/security/
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -753,6 +762,7 @@ int security_mmap_file(struct file *file
|
||||
@@ -775,6 +784,7 @@ int security_mmap_file(struct file *file
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
+1806
-1680
File diff suppressed because it is too large
Load Diff
-96
@@ -1,96 +0,0 @@
|
||||
From 3d84be799194147e04c0e3129ed44a948773b80a Mon Sep 17 00:00:00 2001
|
||||
From: Forrest Liu <forrestl@synology.com>
|
||||
Date: Wed, 11 Feb 2015 14:23:47 +0800
|
||||
Subject: [PATCH] Btrfs: fix BUG_ON in btrfs_orphan_add() when delete unused
|
||||
block group
|
||||
|
||||
Removing large amount of block group in a transaction may encounters
|
||||
BUG_ON() in btrfs_orphan_add(). That is because btrfs_orphan_reserve_metadata()
|
||||
will grab metadata reservation from transaction handle, and
|
||||
btrfs_delete_unused_bgs() didn't reserve metadata for trnasaction handle when
|
||||
delete unused block group.
|
||||
|
||||
The problem can be reproduce by following script
|
||||
|
||||
mntpath=/btrfs
|
||||
loopdev=/dev/loop0
|
||||
filepath=/home/forrest/image
|
||||
|
||||
umount $mntpath
|
||||
losetup -d $loopdev
|
||||
truncate --size 1000g $filepath
|
||||
losetup $loopdev $filepath
|
||||
mkfs.btrfs -f $loopdev
|
||||
mount $loopdev $mntpath
|
||||
|
||||
for j in `seq 1 1 1000`; do
|
||||
fallocate -l 1g $mntpath/$j
|
||||
done
|
||||
# wait cleaner thread remove unused block group
|
||||
sleep 300
|
||||
|
||||
The call trace that results from the BUG_ON() is:
|
||||
|
||||
[ 613.093084] ------------[ cut here ]------------
|
||||
[ 613.097928] kernel BUG at fs/btrfs/inode.c:3142!
|
||||
[ 613.105855] invalid opcode: 0000 [#1] SMP
|
||||
[ 613.112702] Modules linked in: coretemp(E) crc32_pclmul(E) ghash_clmulni_intel(E) aesni_intel(E) snd_ens1371(E) snd_ac97_codec(E) aes_x86_64(E) lrw(E) gf128mul(E) glue_helper(E) ppdev(E) ac97_bus(E) ablk_helper(E) gameport(E) cryptd(E) snd_rawmidi(E) snd_seq_device(E) snd_pcm(E) vmw_balloon(E) snd_timer(E) snd(E) soundcore(E) serio_raw(E) vmwgfx(E) ttm(E) drm_kms_helper(E) drm(E) vmw_vmci(E) parport_pc(E) shpchp(E) i2c_piix4(E) mac_hid(E) lp(E) parport(E) btrfs(E) xor(E) raid6_pq(E) hid_generic(E) usbhid(E) hid(E) psmouse(E) ahci(E) libahci(E) e1000(E) mptspi(E) mptscsih(E) mptbase(E) floppy(E) vmw_pvscsi(E) vmxnet3(E)
|
||||
[ 613.144196] CPU: 0 PID: 1480 Comm: btrfs-cleaner Tainted: G E 3.19.0-rc7-custom #2
|
||||
[ 613.148501] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/31/2013
|
||||
[ 613.152694] task: ffff880035cdb1a0 ti: ffff880039cf4000 task.ti: ffff880039cf4000
|
||||
[ 613.154969] RIP: 0010:[<ffffffffa01441c2>] [<ffffffffa01441c2>] btrfs_orphan_add+0x1d2/0x1e0 [btrfs]
|
||||
[ 613.157780] RSP: 0018:ffff880039cf7c48 EFLAGS: 00010286
|
||||
[ 613.159560] RAX: 00000000ffffffe4 RBX: ffff88003bd981a0 RCX: ffff88003c9e4000
|
||||
[ 613.161904] RDX: 0000000000002244 RSI: 0000000000040000 RDI: ffff88003c9e4138
|
||||
[ 613.164264] RBP: ffff880039cf7c88 R08: 000060ffc0000850 R09: 0000000000000000
|
||||
[ 613.166507] R10: ffff88003bc4b7a0 R11: ffffea0000eb6740 R12: ffff88003c9c0000
|
||||
[ 613.168681] R13: ffff88003c102160 R14: ffff88003c9c0458 R15: 0000000000000001
|
||||
[ 613.170932] FS: 0000000000000000(0000) GS:ffff88003f600000(0000) knlGS:0000000000000000
|
||||
[ 613.173316] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
|
||||
[ 613.175227] CR2: 00007f6343537000 CR3: 0000000036329000 CR4: 00000000000407f0
|
||||
[ 613.177554] Stack:
|
||||
[ 613.178712] ffff880039cf7c88 ffffffffa0182a54 ffff88003c9e4b04 ffff88003c9c7800
|
||||
[ 613.181297] ffff88003bc4b7a0 ffff88003bd981a0 ffff88003c8db200 ffff88003c2fcc60
|
||||
[ 613.183782] ffff880039cf7d18 ffffffffa012da97 ffff88003bc4b7a4 ffff88003bc4b7a0
|
||||
[ 613.186171] Call Trace:
|
||||
[ 613.187493] [<ffffffffa0182a54>] ? lookup_free_space_inode+0x44/0x100 [btrfs]
|
||||
[ 613.189801] [<ffffffffa012da97>] btrfs_remove_block_group+0x137/0x740 [btrfs]
|
||||
[ 613.192126] [<ffffffffa0166912>] btrfs_remove_chunk+0x672/0x780 [btrfs]
|
||||
[ 613.194267] [<ffffffffa012e2ff>] btrfs_delete_unused_bgs+0x25f/0x280 [btrfs]
|
||||
[ 613.196567] [<ffffffffa0135e4c>] cleaner_kthread+0x12c/0x190 [btrfs]
|
||||
[ 613.198687] [<ffffffffa0135d20>] ? check_leaf+0x350/0x350 [btrfs]
|
||||
[ 613.200758] [<ffffffff8108f232>] kthread+0xd2/0xf0
|
||||
[ 613.202616] [<ffffffff8108f160>] ? kthread_create_on_node+0x180/0x180
|
||||
[ 613.204738] [<ffffffff8175dabc>] ret_from_fork+0x7c/0xb0
|
||||
[ 613.206652] [<ffffffff8108f160>] ? kthread_create_on_node+0x180/0x180
|
||||
[ 613.208741] Code: ff ff 0f 1f 80 00 00 00 00 89 45 c8 3e 80 63 80 fd 48 89 df e8 d0 23 fe ff 8b 45 c8 e9 14 ff ff ff b8 f4 ff ff ff e9 12 ff ff ff <0f> 0b 66 66 66 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 55 48
|
||||
[ 613.216562] RIP [<ffffffffa01441c2>] btrfs_orphan_add+0x1d2/0x1e0 [btrfs]
|
||||
[ 613.218828] RSP <ffff880039cf7c48>
|
||||
[ 613.220382] ---[ end trace 71073106deb8a457 ]---
|
||||
|
||||
This patch replace btrfs_join_transaction() with btrfs_start_transaction() in
|
||||
btrfs_delete_unused_bgs() to revent BUG_ON() in btrfs_orphan_add()
|
||||
|
||||
Signed-off-by: Forrest Liu <forrestl@synology.com>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
---
|
||||
fs/btrfs/extent-tree.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
|
||||
index 0f67370..28ce5c8 100644
|
||||
--- a/fs/btrfs/extent-tree.c
|
||||
+++ b/fs/btrfs/extent-tree.c
|
||||
@@ -9555,7 +9555,8 @@ void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)
|
||||
* Want to do this before we do anything else so we can recover
|
||||
* properly if we fail to join the transaction.
|
||||
*/
|
||||
- trans = btrfs_join_transaction(root);
|
||||
+ /* 1 for btrfs_orphan_reserve_metadata() */
|
||||
+ trans = btrfs_start_transaction(root, 1);
|
||||
if (IS_ERR(trans)) {
|
||||
btrfs_set_block_group_rw(root, block_group);
|
||||
ret = PTR_ERR(trans);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
From 909e26dce3f7600f5e293ac0522c28790a0c8c9c Mon Sep 17 00:00:00 2001
|
||||
From: Omar Sandoval <osandov@osandov.com>
|
||||
Date: Fri, 10 Apr 2015 14:20:40 -0700
|
||||
Subject: btrfs: unlock i_mutex after attempting to delete subvolume during send
|
||||
|
||||
From: Omar Sandoval <osandov@osandov.com>
|
||||
|
||||
commit 909e26dce3f7600f5e293ac0522c28790a0c8c9c upstream.
|
||||
|
||||
Whenever the check for a send in progress introduced in commit
|
||||
521e0546c970 (btrfs: protect snapshots from deleting during send) is
|
||||
hit, we return without unlocking inode->i_mutex. This is easy to see
|
||||
with lockdep enabled:
|
||||
|
||||
[ +0.000059] ================================================
|
||||
[ +0.000028] [ BUG: lock held when returning to user space! ]
|
||||
[ +0.000029] 4.0.0-rc5-00096-g3c435c1 #93 Not tainted
|
||||
[ +0.000026] ------------------------------------------------
|
||||
[ +0.000029] btrfs/211 is leaving the kernel with locks still held!
|
||||
[ +0.000029] 1 lock held by btrfs/211:
|
||||
[ +0.000023] #0: (&type->i_mutex_dir_key){+.+.+.}, at: [<ffffffff8135b8df>] btrfs_ioctl_snap_destroy+0x2df/0x7a0
|
||||
|
||||
Make sure we unlock it in the error path.
|
||||
|
||||
Reviewed-by: Filipe Manana <fdmanana@suse.com>
|
||||
Reviewed-by: David Sterba <dsterba@suse.cz>
|
||||
Signed-off-by: Omar Sandoval <osandov@osandov.com>
|
||||
Signed-off-by: Chris Mason <clm@fb.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
fs/btrfs/ioctl.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/fs/btrfs/ioctl.c
|
||||
+++ b/fs/btrfs/ioctl.c
|
||||
@@ -2403,7 +2403,7 @@ static noinline int btrfs_ioctl_snap_des
|
||||
"Attempt to delete subvolume %llu during send",
|
||||
dest->root_key.objectid);
|
||||
err = -EPERM;
|
||||
- goto out_dput;
|
||||
+ goto out_unlock_inode;
|
||||
}
|
||||
|
||||
d_invalidate(dentry);
|
||||
@@ -2498,6 +2498,7 @@ out_up_write:
|
||||
root_flags & ~BTRFS_ROOT_SUBVOL_DEAD);
|
||||
spin_unlock(&dest->root_item_lock);
|
||||
}
|
||||
+out_unlock_inode:
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
if (!err) {
|
||||
shrink_dcache_sb(root->fs_info->sb);
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
From: Ross Lagerwall <ross.lagerwall-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org>
|
||||
Subject: [PATCH RESEND] efivarfs: Ensure VariableName is NUL-terminated
|
||||
Date: Thu, 2 Apr 2015 08:39:00 +0100
|
||||
|
||||
Some buggy firmware implementations update VariableNameSize on success
|
||||
such that it does not include the final NUL character which results in
|
||||
garbage in the efivarfs name entries. Use kzalloc on the efivar_entry
|
||||
(as is done in efivars.c) to ensure that the name is always
|
||||
NUL-terminated.
|
||||
|
||||
The buggy firmware is:
|
||||
BIOS Information
|
||||
Vendor: Intel Corp.
|
||||
Version: S1200RP.86B.02.02.0005.102320140911
|
||||
Release Date: 10/23/2014
|
||||
BIOS Revision: 4.6
|
||||
System Information
|
||||
Manufacturer: Intel Corporation
|
||||
Product Name: S1200RP_SE
|
||||
|
||||
Signed-off-by: Ross Lagerwall <ross.lagerwall-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org>
|
||||
---
|
||||
fs/efivarfs/super.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
|
||||
index ddbce42..acf9a67 100644
|
||||
--- a/fs/efivarfs/super.c
|
||||
+++ b/fs/efivarfs/super.c
|
||||
@@ -121,7 +121,7 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
|
||||
int len, i;
|
||||
int err = -ENOMEM;
|
||||
|
||||
- entry = kmalloc(sizeof(*entry), GFP_KERNEL);
|
||||
+ entry = kzalloc(sizeof(*entry), GFP_KERNEL);
|
||||
if (!entry)
|
||||
return err;
|
||||
|
||||
--
|
||||
2.1.0
|
||||
|
||||
-93
@@ -1,93 +0,0 @@
|
||||
From d2dc317d564a46dfc683978a2e5a4f91434e9711 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Sat, 2 May 2015 21:36:55 -0400
|
||||
Subject: [PATCH] ext4: fix data corruption caused by unwritten and delayed
|
||||
extents
|
||||
|
||||
Currently it is possible to lose whole file system block worth of data
|
||||
when we hit the specific interaction with unwritten and delayed extents
|
||||
in status extent tree.
|
||||
|
||||
The problem is that when we insert delayed extent into extent status
|
||||
tree the only way to get rid of it is when we write out delayed buffer.
|
||||
However there is a limitation in the extent status tree implementation
|
||||
so that when inserting unwritten extent should there be even a single
|
||||
delayed block the whole unwritten extent would be marked as delayed.
|
||||
|
||||
At this point, there is no way to get rid of the delayed extents,
|
||||
because there are no delayed buffers to write out. So when a we write
|
||||
into said unwritten extent we will convert it to written, but it still
|
||||
remains delayed.
|
||||
|
||||
When we try to write into that block later ext4_da_map_blocks() will set
|
||||
the buffer new and delayed and map it to invalid block which causes
|
||||
the rest of the block to be zeroed loosing already written data.
|
||||
|
||||
For now we can fix this by simply not allowing to set delayed status on
|
||||
written extent in the extent status tree. Also add WARN_ON() to make
|
||||
sure that we notice if this happens in the future.
|
||||
|
||||
This problem can be easily reproduced by running the following xfs_io.
|
||||
|
||||
xfs_io -f -c "pwrite -S 0xaa 4096 2048" \
|
||||
-c "falloc 0 131072" \
|
||||
-c "pwrite -S 0xbb 65536 2048" \
|
||||
-c "fsync" /mnt/test/fff
|
||||
|
||||
echo 3 > /proc/sys/vm/drop_caches
|
||||
xfs_io -c "pwrite -S 0xdd 67584 2048" /mnt/test/fff
|
||||
|
||||
This can be theoretically also reproduced by at random by running fsx,
|
||||
but it's not very reliable, though on machines with bigger page size
|
||||
(like ppc) this can be seen more often (especially xfstest generic/127)
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
fs/ext4/extents_status.c | 8 ++++++++
|
||||
fs/ext4/inode.c | 2 ++
|
||||
2 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
|
||||
index d33d5a6..26724ae 100644
|
||||
--- a/fs/ext4/extents_status.c
|
||||
+++ b/fs/ext4/extents_status.c
|
||||
@@ -703,6 +703,14 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
|
||||
|
||||
BUG_ON(end < lblk);
|
||||
|
||||
+ if ((status & EXTENT_STATUS_DELAYED) &&
|
||||
+ (status & EXTENT_STATUS_WRITTEN)) {
|
||||
+ ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as "
|
||||
+ " delayed and written which can potentially "
|
||||
+ " cause data loss.\n", lblk, len);
|
||||
+ WARN_ON(1);
|
||||
+ }
|
||||
+
|
||||
newes.es_lblk = lblk;
|
||||
newes.es_len = len;
|
||||
ext4_es_store_pblock_status(&newes, pblk, status);
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index f6b35d8..4415cea 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -532,6 +532,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
|
||||
status = map->m_flags & EXT4_MAP_UNWRITTEN ?
|
||||
EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
|
||||
if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
|
||||
+ !(status & EXTENT_STATUS_WRITTEN) &&
|
||||
ext4_find_delalloc_range(inode, map->m_lblk,
|
||||
map->m_lblk + map->m_len - 1))
|
||||
status |= EXTENT_STATUS_DELAYED;
|
||||
@@ -636,6 +637,7 @@ found:
|
||||
status = map->m_flags & EXT4_MAP_UNWRITTEN ?
|
||||
EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
|
||||
if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
|
||||
+ !(status & EXTENT_STATUS_WRITTEN) &&
|
||||
ext4_find_delalloc_range(inode, map->m_lblk,
|
||||
map->m_lblk + map->m_len - 1))
|
||||
status |= EXTENT_STATUS_DELAYED;
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
From 280227a75b56ab5d35854f3a77ef74a7ad56a203 Mon Sep 17 00:00:00 2001
|
||||
From: Davide Italiano <dccitaliano@gmail.com>
|
||||
Date: Sat, 2 May 2015 23:21:15 -0400
|
||||
Subject: ext4: move check under lock scope to close a race.
|
||||
|
||||
From: Davide Italiano <dccitaliano@gmail.com>
|
||||
|
||||
commit 280227a75b56ab5d35854f3a77ef74a7ad56a203 upstream.
|
||||
|
||||
fallocate() checks that the file is extent-based and returns
|
||||
EOPNOTSUPP in case is not. Other tasks can convert from and to
|
||||
indirect and extent so it's safe to check only after grabbing
|
||||
the inode mutex.
|
||||
|
||||
Signed-off-by: Davide Italiano <dccitaliano@gmail.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
fs/ext4/extents.c | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4934,13 +4934,6 @@ long ext4_fallocate(struct file *file, i
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- /*
|
||||
- * currently supporting (pre)allocate mode for extent-based
|
||||
- * files _only_
|
||||
- */
|
||||
- if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
|
||||
- return -EOPNOTSUPP;
|
||||
-
|
||||
if (mode & FALLOC_FL_COLLAPSE_RANGE)
|
||||
return ext4_collapse_range(inode, offset, len);
|
||||
|
||||
@@ -4962,6 +4955,14 @@ long ext4_fallocate(struct file *file, i
|
||||
|
||||
mutex_lock(&inode->i_mutex);
|
||||
|
||||
+ /*
|
||||
+ * We only support preallocation for extent-based files only
|
||||
+ */
|
||||
+ if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
|
||||
+ ret = -EOPNOTSUPP;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
if (!(mode & FALLOC_FL_KEEP_SIZE) &&
|
||||
offset + len > i_size_read(inode)) {
|
||||
new_size = offset + len;
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
From cd4a40174b71acd021877341684d8bb1dc8ea4ae Mon Sep 17 00:00:00 2001
|
||||
From: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
Date: Wed, 7 Jan 2015 14:28:26 -0600
|
||||
Subject: [PATCH] mnt: Fail collect_mounts when applied to unmounted mounts
|
||||
|
||||
The only users of collect_mounts are in audit_tree.c
|
||||
|
||||
In audit_trim_trees and audit_add_tree_rule the path passed into
|
||||
collect_mounts is generated from kern_path passed an audit_tree
|
||||
pathname which is guaranteed to be an absolute path. In those cases
|
||||
collect_mounts is obviously intended to work on mounted paths and
|
||||
if a race results in paths that are unmounted when collect_mounts
|
||||
it is reasonable to fail early.
|
||||
|
||||
The paths passed into audit_tag_tree don't have the absolute path
|
||||
check. But are used to play with fsnotify and otherwise interact with
|
||||
the audit_trees, so again operating only on mounted paths appears
|
||||
reasonable.
|
||||
|
||||
Avoid having to worry about what happens when we try and audit
|
||||
unmounted filesystems by restricting collect_mounts to mounts
|
||||
that appear in the mount tree.
|
||||
|
||||
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
---
|
||||
fs/namespace.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index 2b12b7a..acc5583 100644
|
||||
--- a/fs/namespace.c
|
||||
+++ b/fs/namespace.c
|
||||
@@ -1669,8 +1669,11 @@ struct vfsmount *collect_mounts(struct path *path)
|
||||
{
|
||||
struct mount *tree;
|
||||
namespace_lock();
|
||||
- tree = copy_tree(real_mount(path->mnt), path->dentry,
|
||||
- CL_COPY_ALL | CL_PRIVATE);
|
||||
+ if (!check_mnt(real_mount(path->mnt)))
|
||||
+ tree = ERR_PTR(-EINVAL);
|
||||
+ else
|
||||
+ tree = copy_tree(real_mount(path->mnt), path->dentry,
|
||||
+ CL_COPY_ALL | CL_PRIVATE);
|
||||
namespace_unlock();
|
||||
if (IS_ERR(tree))
|
||||
return ERR_CAST(tree);
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
From 7e96c1b0e0f495c5a7450dc4aa7c9a24ba4305bd Mon Sep 17 00:00:00 2001
|
||||
From: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
Date: Fri, 8 May 2015 16:36:50 -0500
|
||||
Subject: [PATCH] mnt: Fix fs_fully_visible to verify the root directory is
|
||||
visible
|
||||
|
||||
This fixes a dumb bug in fs_fully_visible that allows proc or sys to
|
||||
be mounted if there is a bind mount of part of /proc/ or /sys/ visible.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Reported-by: Eric Windisch <ewindisch@docker.com>
|
||||
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
---
|
||||
fs/namespace.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index 1f4f9da..1b9e111 100644
|
||||
--- a/fs/namespace.c
|
||||
+++ b/fs/namespace.c
|
||||
@@ -3179,6 +3179,12 @@ bool fs_fully_visible(struct file_system_type *type)
|
||||
if (mnt->mnt.mnt_sb->s_type != type)
|
||||
continue;
|
||||
|
||||
+ /* This mount is not fully visible if it's root directory
|
||||
+ * is not the root directory of the filesystem.
|
||||
+ */
|
||||
+ if (mnt->mnt.mnt_root != mnt->mnt.mnt_sb->s_root)
|
||||
+ continue;
|
||||
+
|
||||
/* This mount is not fully visible if there are any child mounts
|
||||
* that cover anything except for empty directories.
|
||||
*/
|
||||
--
|
||||
2.3.2
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
From f15133df088ecadd141ea1907f2c96df67c729f0 Mon Sep 17 00:00:00 2001
|
||||
From: Al Viro <viro@zeniv.linux.org.uk>
|
||||
Date: Fri, 8 May 2015 22:53:15 -0400
|
||||
Subject: [PATCH] path_openat(): fix double fput()
|
||||
|
||||
path_openat() jumps to the wrong place after do_tmpfile() - it has
|
||||
already done path_cleanup() (as part of path_lookupat() called by
|
||||
do_tmpfile()), so doing that again can lead to double fput().
|
||||
|
||||
Cc: stable@vger.kernel.org # v3.11+
|
||||
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
||||
---
|
||||
fs/namei.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/namei.c b/fs/namei.c
|
||||
index f67cf6c..fe30d3b 100644
|
||||
--- a/fs/namei.c
|
||||
+++ b/fs/namei.c
|
||||
@@ -3209,7 +3209,7 @@ static struct file *path_openat(int dfd,
|
||||
|
||||
if (unlikely(file->f_flags & __O_TMPFILE)) {
|
||||
error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
|
||||
- goto out;
|
||||
+ goto out2;
|
||||
}
|
||||
|
||||
error = path_init(dfd, pathname->name, flags, nd);
|
||||
@@ -3239,6 +3239,7 @@ static struct file *path_openat(int dfd,
|
||||
}
|
||||
out:
|
||||
path_cleanup(nd);
|
||||
+out2:
|
||||
if (!(opened & FILE_OPENED)) {
|
||||
BUG_ON(!error);
|
||||
put_filp(file);
|
||||
-136
@@ -1,136 +0,0 @@
|
||||
From 0ff28d9f4674d781e492bcff6f32f0fe48cf0fed Mon Sep 17 00:00:00 2001
|
||||
From: Christophe Leroy <christophe.leroy@c-s.fr>
|
||||
Date: Wed, 6 May 2015 17:26:47 +0200
|
||||
Subject: [PATCH] splice: sendfile() at once fails for big files
|
||||
|
||||
Using sendfile with below small program to get MD5 sums of some files,
|
||||
it appear that big files (over 64kbytes with 4k pages system) get a
|
||||
wrong MD5 sum while small files get the correct sum.
|
||||
This program uses sendfile() to send a file to an AF_ALG socket
|
||||
for hashing.
|
||||
|
||||
/* md5sum2.c */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <linux/if_alg.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int sk = socket(AF_ALG, SOCK_SEQPACKET, 0);
|
||||
struct stat st;
|
||||
struct sockaddr_alg sa = {
|
||||
.salg_family = AF_ALG,
|
||||
.salg_type = "hash",
|
||||
.salg_name = "md5",
|
||||
};
|
||||
int n;
|
||||
|
||||
bind(sk, (struct sockaddr*)&sa, sizeof(sa));
|
||||
|
||||
for (n = 1; n < argc; n++) {
|
||||
int size;
|
||||
int offset = 0;
|
||||
char buf[4096];
|
||||
int fd;
|
||||
int sko;
|
||||
int i;
|
||||
|
||||
fd = open(argv[n], O_RDONLY);
|
||||
sko = accept(sk, NULL, 0);
|
||||
fstat(fd, &st);
|
||||
size = st.st_size;
|
||||
sendfile(sko, fd, &offset, size);
|
||||
size = read(sko, buf, sizeof(buf));
|
||||
for (i = 0; i < size; i++)
|
||||
printf("%2.2x", buf[i]);
|
||||
printf(" %s\n", argv[n]);
|
||||
close(fd);
|
||||
close(sko);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
Test below is done using official linux patch files. First result is
|
||||
with a software based md5sum. Second result is with the program above.
|
||||
|
||||
root@vgoip:~# ls -l patch-3.6.*
|
||||
-rw-r--r-- 1 root root 64011 Aug 24 12:01 patch-3.6.2.gz
|
||||
-rw-r--r-- 1 root root 94131 Aug 24 12:01 patch-3.6.3.gz
|
||||
|
||||
root@vgoip:~# md5sum patch-3.6.*
|
||||
b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
|
||||
c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz
|
||||
|
||||
root@vgoip:~# ./md5sum2 patch-3.6.*
|
||||
b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
|
||||
5fd77b24e68bb24dcc72d6e57c64790e patch-3.6.3.gz
|
||||
|
||||
After investivation, it appears that sendfile() sends the files by blocks
|
||||
of 64kbytes (16 times PAGE_SIZE). The problem is that at the end of each
|
||||
block, the SPLICE_F_MORE flag is missing, therefore the hashing operation
|
||||
is reset as if it was the end of the file.
|
||||
|
||||
This patch adds SPLICE_F_MORE to the flags when more data is pending.
|
||||
|
||||
With the patch applied, we get the correct sums:
|
||||
|
||||
root@vgoip:~# md5sum patch-3.6.*
|
||||
b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
|
||||
c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz
|
||||
|
||||
root@vgoip:~# ./md5sum2 patch-3.6.*
|
||||
b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
|
||||
c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz
|
||||
|
||||
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
fs/splice.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 476024b..bfe62ae 100644
|
||||
--- a/fs/splice.c
|
||||
+++ b/fs/splice.c
|
||||
@@ -1161,7 +1161,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
|
||||
long ret, bytes;
|
||||
umode_t i_mode;
|
||||
size_t len;
|
||||
- int i, flags;
|
||||
+ int i, flags, more;
|
||||
|
||||
/*
|
||||
* We require the input being a regular file, as we don't want to
|
||||
@@ -1204,6 +1204,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
|
||||
* Don't block on output, we have to drain the direct pipe.
|
||||
*/
|
||||
sd->flags &= ~SPLICE_F_NONBLOCK;
|
||||
+ more = sd->flags & SPLICE_F_MORE;
|
||||
|
||||
while (len) {
|
||||
size_t read_len;
|
||||
@@ -1217,6 +1218,15 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
|
||||
sd->total_len = read_len;
|
||||
|
||||
/*
|
||||
+ * If more data is pending, set SPLICE_F_MORE
|
||||
+ * If this is the last data and SPLICE_F_MORE was not set
|
||||
+ * initially, clears it.
|
||||
+ */
|
||||
+ if (read_len < len)
|
||||
+ sd->flags |= SPLICE_F_MORE;
|
||||
+ else if (!more)
|
||||
+ sd->flags &= ~SPLICE_F_MORE;
|
||||
+ /*
|
||||
* NOTE: nonblocking mode only applies to the input. We
|
||||
* must not do the output in nonblocking mode as then we
|
||||
* could get stuck data in the internal pipe:
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-37
@@ -1,37 +0,0 @@
|
||||
From 4fe7ffb7e17ca6ad9173b8de35f260c9c8fc2f79 Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Brandeburg <jesse.brandeburg@intel.com>
|
||||
Date: Wed, 28 Jan 2015 10:57:14 -0800
|
||||
Subject: [PATCH] genirq: Fix null pointer reference in irq_set_affinity_hint()
|
||||
|
||||
The recent set_affinity commit by me introduced some null
|
||||
pointer dereferences on driver unload, because some drivers
|
||||
call this function with a NULL argument. This fixes the issue
|
||||
by just checking for null before setting the affinity mask.
|
||||
|
||||
Fixes: e2e64a932556 ("genirq: Set initial affinity in irq_set_affinity_hint()")
|
||||
Reported-by: Yinghai Lu <yinghai@kernel.org>
|
||||
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
|
||||
CC: netdev@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/20150128185739.9689.84588.stgit@jbrandeb-cp2.jf.intel.com
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
kernel/irq/manage.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
|
||||
index f038e58..196a06f 100644
|
||||
--- a/kernel/irq/manage.c
|
||||
+++ b/kernel/irq/manage.c
|
||||
@@ -244,7 +244,8 @@ int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
|
||||
desc->affinity_hint = m;
|
||||
irq_put_desc_unlock(desc, flags);
|
||||
/* set the initial affinity to prevent every interrupt being on CPU0 */
|
||||
- __irq_set_affinity(irq, m, false);
|
||||
+ if (m)
|
||||
+ __irq_set_affinity(irq, m, false);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
From e2e64a932556cdfae455497dbe94a8db151fc9fa Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Brandeburg <jesse.brandeburg@intel.com>
|
||||
Date: Thu, 18 Dec 2014 17:21:41 -0800
|
||||
Subject: [PATCH] genirq: Set initial affinity in irq_set_affinity_hint()
|
||||
|
||||
Problem:
|
||||
The default behavior of the kernel is somewhat undesirable as all
|
||||
requested interrupts end up on CPU0 after registration. A user can
|
||||
run irqbalance daemon, or can manually configure smp_affinity via the
|
||||
proc filesystem, but the default affinity of the interrupts for all
|
||||
devices is always CPU zero, this can cause performance problems or
|
||||
very heavy cpu use of only one core if not noticed and fixed by the
|
||||
user.
|
||||
|
||||
Solution:
|
||||
Enable the setting of the initial affinity directly when the driver
|
||||
sets a hint.
|
||||
|
||||
This enabling means that kernel drivers can include an initial
|
||||
affinity setting for the interrupt, instead of all interrupts starting
|
||||
out life on CPU0. Of course if irqbalance is still running then the
|
||||
interrupts will get moved as before.
|
||||
|
||||
This function is currently called by drivers in block, crypto,
|
||||
infiniband, ethernet and scsi trees, but only a handful, so these will
|
||||
be the devices affected by this change.
|
||||
|
||||
Tested on i40e, and default interrupts were spread across the CPUs
|
||||
according to the hint.
|
||||
|
||||
drivers/block/mtip32xx/mtip32xx.c:3
|
||||
drivers/block/nvme-core.c:2
|
||||
drivers/crypto/qat/qat_dh895xcc/adf_isr.c:3
|
||||
drivers/infiniband/hw/qib/qib_iba7322.c:2
|
||||
drivers/net/ethernet/intel/i40e/i40e_main.c:3
|
||||
drivers/net/ethernet/intel/i40evf/i40evf_main.c:3
|
||||
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c:3
|
||||
drivers/net/ethernet/mellanox/mlx4/en_cq.c:2
|
||||
drivers/scsi/hpsa.c:3
|
||||
drivers/scsi/lpfc/lpfc_init.c:3
|
||||
drivers/scsi/megaraid/megaraid_sas_base.c:8
|
||||
drivers/soc/ti/knav_qmss_acc.c:1
|
||||
drivers/soc/ti/knav_qmss_queue.c:2
|
||||
drivers/virtio/virtio_pci_common.c:2
|
||||
|
||||
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
|
||||
Cc: netdev@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/20141219012206.4220.27491.stgit@jbrandeb-cp2.jf.intel.com
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/irq/manage.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
|
||||
index 8069237..f038e58 100644
|
||||
--- a/kernel/irq/manage.c
|
||||
+++ b/kernel/irq/manage.c
|
||||
@@ -243,6 +243,8 @@ int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
|
||||
return -EINVAL;
|
||||
desc->affinity_hint = m;
|
||||
irq_put_desc_unlock(desc, flags);
|
||||
+ /* set the initial affinity to prevent every interrupt being on CPU0 */
|
||||
+ __irq_set_affinity(irq, m, false);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
From 2701fc43562b55f5db0139ef6a7b13c2518ed6c0 Mon Sep 17 00:00:00 2001
|
||||
From: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Date: Tue, 13 Jan 2015 12:46:52 -0800
|
||||
Subject: drm/i915: Enable the HiZ RAW Stall Optimization on Broadwell.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is an important optimization for avoiding read-after-write (RAW)
|
||||
stalls in the HiZ buffer. Certain workloads would run very slowly with
|
||||
HiZ enabled, but run much faster with the "hiz=false" driconf option.
|
||||
With this patch, they run at full speed even with HiZ.
|
||||
|
||||
Improves performance in OglVSInstancing by 3.2x on Broadwell GT3e
|
||||
(Iris Pro 6200).
|
||||
|
||||
Thanks to Jesse Barnes and Ben Widawsky for their help in tracking this
|
||||
down. Thanks to Chris Wilson for showing me the new workarounds system.
|
||||
|
||||
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index dabc1d8..0df15a4 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -767,6 +767,16 @@ static int bdw_init_workarounds(struct i
|
||||
HDC_FORCE_NON_COHERENT |
|
||||
(IS_BDW_GT3(dev) ? HDC_FENCE_DEST_SLM_DISABLE : 0));
|
||||
|
||||
+ /* From the Haswell PRM, Command Reference: Registers, CACHE_MODE_0:
|
||||
+ * "The Hierarchical Z RAW Stall Optimization allows non-overlapping
|
||||
+ * polygons in the same 8x4 pixel/sample area to be processed without
|
||||
+ * stalling waiting for the earlier ones to write to Hierarchical Z
|
||||
+ * buffer."
|
||||
+ *
|
||||
+ * This optimization is off by default for Broadwell; turn it on.
|
||||
+ */
|
||||
+ WA_CLR_BIT_MASKED(CACHE_MODE_0_GEN7, HIZ_RAW_STALL_OPT_DISABLE);
|
||||
+
|
||||
/* Wa4x4STCOptimizationDisable:bdw */
|
||||
WA_SET_BIT_MASKED(CACHE_MODE_1,
|
||||
GEN8_4x4_STC_OPTIMIZATION_DISABLE);
|
||||
-35
@@ -1,35 +0,0 @@
|
||||
From 973a5b06a096f1a9494ebe94c78d809459f4dc74 Mon Sep 17 00:00:00 2001
|
||||
From: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Date: Tue, 13 Jan 2015 12:46:53 -0800
|
||||
Subject: drm/i915: Ensure the HiZ RAW Stall Optimization is on for Cherryview.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is an important optimization for avoiding read-after-write (RAW)
|
||||
stalls in the HiZ buffer. Certain workloads would run very slowly with
|
||||
HiZ enabled, but run much faster with the "hiz=false" driconf option.
|
||||
With this patch, they run at full speed even with HiZ.
|
||||
|
||||
Increases performance in OglVSInstancing by about 2.7x on Braswell.
|
||||
|
||||
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 0df15a4..23020d6 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -817,6 +817,11 @@ static int chv_init_workarounds(struct i
|
||||
HDC_FORCE_NON_COHERENT |
|
||||
HDC_DONOT_FETCH_MEM_WHEN_MASKED);
|
||||
|
||||
+ /* According to the CACHE_MODE_0 default value documentation, some
|
||||
+ * CHV platforms disable this optimization by default. Turn it on.
|
||||
+ */
|
||||
+ WA_CLR_BIT_MASKED(CACHE_MODE_0_GEN7, HIZ_RAW_STALL_OPT_DISABLE);
|
||||
+
|
||||
/* Improve HiZ throughput on CHV. */
|
||||
WA_SET_BIT_MASKED(HIZ_CHICKEN, CHV_HZ_8X8_MODE_IN_1X);
|
||||
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
From d60de81da48aa25b06a015b839906243710e7253 Mon Sep 17 00:00:00 2001
|
||||
From: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Date: Sat, 10 Jan 2015 18:02:22 -0800
|
||||
Subject: drm/i915: Improve HiZ throughput on Cherryview.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Found by reading the HIZ_CHICKEN documentation.
|
||||
|
||||
Improves performance in a HiZ microbenchmark by around 50%.
|
||||
Improves performance in OglZBuffer by around 18%.
|
||||
|
||||
Thanks to Chris Wilson for helping me figure out where to put this.
|
||||
|
||||
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
||||
index 0f32fd1a..a39bb03 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
||||
@@ -5158,6 +5158,9 @@ enum punit_power_well {
|
||||
#define COMMON_SLICE_CHICKEN2 0x7014
|
||||
# define GEN8_CSC2_SBE_VUE_CACHE_CONSERVATIVE (1<<0)
|
||||
|
||||
+#define HIZ_CHICKEN 0x7018
|
||||
+# define CHV_HZ_8X8_MODE_IN_1X (1<<15)
|
||||
+
|
||||
#define GEN7_L3SQCREG1 0xB010
|
||||
#define VLV_B0_WA_L3SQCREG1_VALUE 0x00D30000
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 12a36f0..dabc1d8 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -807,6 +807,9 @@ static int chv_init_workarounds(struct i
|
||||
HDC_FORCE_NON_COHERENT |
|
||||
HDC_DONOT_FETCH_MEM_WHEN_MASKED);
|
||||
|
||||
+ /* Improve HiZ throughput on CHV. */
|
||||
+ WA_SET_BIT_MASKED(HIZ_CHICKEN, CHV_HZ_8X8_MODE_IN_1X);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
From c44c70983107257f33f2b9d1c6a5aaf3d2eb670a Mon Sep 17 00:00:00 2001
|
||||
From: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Date: Wed, 31 Dec 2014 16:23:00 -0800
|
||||
Subject: drm/i915: Make sample_c messages go faster on Haswell.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Haswell significantly improved the performance of sampler_c messages,
|
||||
but the optimization appears to be off by default. Later platforms
|
||||
remove this bit, and apparently always enable the optimization.
|
||||
|
||||
Improves performance in "Counter Strike: Global Offensive" by 18%
|
||||
at default settings on Iris Pro.
|
||||
|
||||
This may break sampling of paletted formats (P8/A8P8/P8A8). It's
|
||||
unclear whether it affects sampling of paletted formats in general,
|
||||
or just the sample_c message (which is never used).
|
||||
|
||||
While libva does have support for using paletted formats (primarily
|
||||
for OSDs), that support appears to have been broken for at least a
|
||||
year, so I couldn't observe a regression from this:
|
||||
|
||||
I tried to get libva-intel to use paletted formats, and observe a
|
||||
regression...but the only thing I found that used it was mplayer's OSD
|
||||
(on screen display). Even without my patch, the colors were totally
|
||||
wrong with that, and it's according to a few distro wikis, that's been
|
||||
the case for over a year.
|
||||
|
||||
If libva's code for paletted formats /is/ broken, they could always
|
||||
add code to disable this bit using the command validator when fixing
|
||||
it.
|
||||
|
||||
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
[danvet: Add wa name from Ville's review to the comment and copypaste
|
||||
the explanation why we don't care about libva (already broken) from
|
||||
Ken.]
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
||||
index 1fdda42..0cb0067 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
||||
@@ -6119,6 +6119,7 @@ enum punit_power_well {
|
||||
#define HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE (1 << 6)
|
||||
|
||||
#define HALF_SLICE_CHICKEN3 0xe184
|
||||
+#define HSW_SAMPLE_C_PERFORMANCE (1<<9)
|
||||
#define GEN8_CENTROID_PIXEL_OPT_DIS (1<<8)
|
||||
#define GEN8_SAMPLER_POWER_BYPASS_DIS (1<<1)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 4254e91..0918604 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -6710,6 +6710,10 @@ static void haswell_init_clock_gating(st
|
||||
I915_WRITE(GEN7_GT_MODE,
|
||||
_MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
|
||||
|
||||
+ /* WaSampleCChickenBitEnable:hsw */
|
||||
+ I915_WRITE(HALF_SLICE_CHICKEN3,
|
||||
+ _MASKED_BIT_ENABLE(HSW_SAMPLE_C_PERFORMANCE));
|
||||
+
|
||||
/* WaSwitchSolVfFArbitrationPriority:hsw */
|
||||
I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL);
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
@@ -1,24 +0,0 @@
|
||||
|
||||
Revert back to legacy turbo for vlv, fixes random crashes.
|
||||
|
||||
Reported by Timothée Giet <animtim@gmail.com> on dev@ ml.
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=88012#c33
|
||||
|
||||
|
||||
--- linux/drivers/gpu/drm/i915/i915_irq.c.orig
|
||||
+++ linux/drivers/gpu/drm/i915/i915_irq.c
|
||||
@@ -4361,12 +4361,7 @@ void intel_irq_init(struct drm_i915_priv
|
||||
INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
|
||||
INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
|
||||
|
||||
- /* Let's track the enabled rps events */
|
||||
- if (IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
|
||||
- /* WaGsvRC0ResidencyMethod:vlv */
|
||||
- dev_priv->pm_rps_events = GEN6_PM_RP_UP_EI_EXPIRED;
|
||||
- else
|
||||
- dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
|
||||
+ dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
|
||||
|
||||
setup_timer(&dev_priv->gpu_error.hangcheck_timer,
|
||||
i915_hangcheck_elapsed,
|
||||
@@ -1,29 +0,0 @@
|
||||
From 509fca899d5682a6eee3d1fb70bba7c89439034b Mon Sep 17 00:00:00 2001
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
Date: Mon, 23 Mar 2015 19:49:56 -0600
|
||||
Subject: [PATCH] iommu/vt-d: Remove unused variable
|
||||
|
||||
Unused after commit 71684406905f ("iommu/vt-d: Detach domain *only*
|
||||
from attached iommus"). Reported by 0-day builder.
|
||||
|
||||
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
||||
Signed-off-by: Joerg Roedel <jroedel@suse.de>
|
||||
---
|
||||
drivers/iommu/intel-iommu.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
|
||||
index a83c965..2d1e05b 100644
|
||||
--- a/drivers/iommu/intel-iommu.c
|
||||
+++ b/drivers/iommu/intel-iommu.c
|
||||
@@ -1742,7 +1742,6 @@ static int domain_init(struct dmar_domain *domain, int guest_width)
|
||||
|
||||
static void domain_exit(struct dmar_domain *domain)
|
||||
{
|
||||
- struct dmar_drhd_unit *drhd;
|
||||
struct page *freelist = NULL;
|
||||
int i;
|
||||
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
From: NeilBrown <neilb@suse.de>
|
||||
Subject: [PATCH 5/7] md/raid5: don't record new size if resize_stripes fails.
|
||||
Date: Fri, 08 May 2015 18:56:11 +1000
|
||||
|
||||
If any memory allocation in resize_stripes fails we will return
|
||||
-ENOMEM, but in some cases we update conf->pool_size anyway.
|
||||
|
||||
This means that if we try again, the allocations will be assumed
|
||||
to be larger than they are, and badness results.
|
||||
|
||||
So only update pool_size if there is no error.
|
||||
|
||||
This bug was introduced in 2.6.17 and the patch is suitable for
|
||||
-stable.
|
||||
|
||||
Fixes: ad01c9e3752f ("[PATCH] md: Allow stripes to be expanded in preparation for expanding an array")
|
||||
Cc: stable@vger.kernel.org (v2.6.17+)
|
||||
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||
---
|
||||
drivers/md/raid5.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
|
||||
index 85dc0e67fb88..9748e525e4c0 100644
|
||||
--- a/drivers/md/raid5.c
|
||||
+++ b/drivers/md/raid5.c
|
||||
@@ -2216,7 +2216,8 @@ static int resize_stripes(struct r5conf *conf, int newsize)
|
||||
|
||||
conf->slab_cache = sc;
|
||||
conf->active_name = 1-conf->active_name;
|
||||
- conf->pool_size = newsize;
|
||||
+ if (!err)
|
||||
+ conf->pool_size = newsize;
|
||||
return err;
|
||||
}
|
||||
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
From: Thomas Reitmayr <treitmayr@devbase.at>
|
||||
Date: Fri, 1 May 2015 20:18:04 -0300
|
||||
Subject: [PATCH] media: Fix regression in some more dib0700 based devices
|
||||
|
||||
Fix an oops during device initialization by correctly setting size_of_priv
|
||||
instead of leaving it 0.
|
||||
The regression was introduced by 8abe4a0a3f6d4217b16a ("[media] dib7000:
|
||||
export just one symbol") and only fixed for one type of dib0700 based
|
||||
devices in 9e334c75642b6e5bfb95 ("[media] Fix regression in some dib0700
|
||||
based devices").
|
||||
|
||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=92301
|
||||
|
||||
Fixes: 8abe4a0a3f6d4217b16a ("[media] dib7000: export just one symbol")
|
||||
|
||||
Cc: stable@vger.kernel.org # for version 3.17+
|
||||
Signed-off-by: Thomas Reitmayr <treitmayr@devbase.at>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
||||
---
|
||||
drivers/media/usb/dvb-usb/dib0700_devices.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
|
||||
index d7d55a20e959..c170523226aa 100644
|
||||
--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
|
||||
+++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
|
||||
@@ -3944,6 +3944,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
|
||||
DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
|
||||
}},
|
||||
+ .size_of_priv = sizeof(struct
|
||||
+ dib0700_adapter_state),
|
||||
}, {
|
||||
.num_frontends = 1,
|
||||
.fe = {{
|
||||
@@ -3956,6 +3958,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
|
||||
DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
|
||||
}},
|
||||
+ .size_of_priv = sizeof(struct
|
||||
+ dib0700_adapter_state),
|
||||
}
|
||||
},
|
||||
|
||||
@@ -4009,6 +4013,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
|
||||
DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
|
||||
}},
|
||||
+ .size_of_priv = sizeof(struct
|
||||
+ dib0700_adapter_state),
|
||||
},
|
||||
},
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
From cfc511557945812280699a92f171ddd2d254aca6 Mon Sep 17 00:00:00 2001
|
||||
From: Vlastimil Babka <vbabka@suse.cz>
|
||||
Date: Wed, 11 Feb 2015 15:24:47 -0800
|
||||
Subject: [PATCH] mm, vmscan: wake up all pfmemalloc-throttled processes at
|
||||
once
|
||||
|
||||
Kswapd in balance_pgdate() currently uses wake_up() on processes waiting
|
||||
in throttle_direct_reclaim(), which only wakes up a single process. This
|
||||
might leave processes waiting for longer than necessary, until the check
|
||||
is reached in the next loop iteration. Processes might also be left
|
||||
waiting if zone was fully balanced in single iteration. Note that the
|
||||
comment in balance_pgdat() also says "Wake them", so waking up a single
|
||||
process does not seem intentional.
|
||||
|
||||
Thus, replace wake_up() with wake_up_all().
|
||||
|
||||
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
|
||||
Cc: Mel Gorman <mgorman@suse.de>
|
||||
Cc: Johannes Weiner <hannes@cmpxchg.org>
|
||||
Cc: Michal Hocko <mhocko@suse.cz>
|
||||
Cc: Vladimir Davydov <vdavydov@parallels.com>
|
||||
Acked-by: Rik van Riel <riel@redhat.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/vmscan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index dcd90c8..f756a20 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -3175,7 +3175,7 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
|
||||
*/
|
||||
if (waitqueue_active(&pgdat->pfmemalloc_wait) &&
|
||||
pfmemalloc_watermark_ok(pgdat))
|
||||
- wake_up(&pgdat->pfmemalloc_wait);
|
||||
+ wake_up_all(&pgdat->pfmemalloc_wait);
|
||||
|
||||
/*
|
||||
* Fragmentation may mean that the system cannot be rebalanced
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-68
@@ -1,68 +0,0 @@
|
||||
From 464d1387acb94dc43ba772b35242345e3d2ead1b Mon Sep 17 00:00:00 2001
|
||||
From: Tejun Heo <tj@kernel.org>
|
||||
Date: Tue, 21 Apr 2015 16:49:13 -0400
|
||||
Subject: [PATCH] writeback: use |1 instead of +1 to protect against div by
|
||||
zero
|
||||
|
||||
mm/page-writeback.c has several places where 1 is added to the divisor
|
||||
to prevent division by zero exceptions; however, if the original
|
||||
divisor is equivalent to -1, adding 1 leads to division by zero.
|
||||
|
||||
There are three places where +1 is used for this purpose - one in
|
||||
pos_ratio_polynom() and two in bdi_position_ratio(). The second one
|
||||
in bdi_position_ratio() actually triggered div-by-zero oops on a
|
||||
machine running a 3.10 kernel. The divisor is
|
||||
|
||||
x_intercept - bdi_setpoint + 1 == span + 1
|
||||
|
||||
span is confirmed to be (u32)-1. It isn't clear how it ended up that
|
||||
but it could be from write bandwidth calculation underflow fixed by
|
||||
c72efb658f7c ("writeback: fix possible underflow in write bandwidth
|
||||
calculation").
|
||||
|
||||
At any rate, +1 isn't a proper protection against div-by-zero. This
|
||||
patch converts all +1 protections to |1. Note that
|
||||
bdi_update_dirty_ratelimit() was already using |1 before this patch.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Cc: stable@vger.kernel.org
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Jens Axboe <axboe@fb.com>
|
||||
---
|
||||
mm/page-writeback.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
|
||||
index 5daf556..eb59f7e 100644
|
||||
--- a/mm/page-writeback.c
|
||||
+++ b/mm/page-writeback.c
|
||||
@@ -580,7 +580,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
|
||||
long x;
|
||||
|
||||
x = div64_s64(((s64)setpoint - (s64)dirty) << RATELIMIT_CALC_SHIFT,
|
||||
- limit - setpoint + 1);
|
||||
+ (limit - setpoint) | 1);
|
||||
pos_ratio = x;
|
||||
pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
|
||||
pos_ratio = pos_ratio * x >> RATELIMIT_CALC_SHIFT;
|
||||
@@ -807,7 +807,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
|
||||
* scale global setpoint to bdi's:
|
||||
* bdi_setpoint = setpoint * bdi_thresh / thresh
|
||||
*/
|
||||
- x = div_u64((u64)bdi_thresh << 16, thresh + 1);
|
||||
+ x = div_u64((u64)bdi_thresh << 16, thresh | 1);
|
||||
bdi_setpoint = setpoint * (u64)x >> 16;
|
||||
/*
|
||||
* Use span=(8*write_bw) in single bdi case as indicated by
|
||||
@@ -822,7 +822,7 @@ static unsigned long bdi_position_ratio(struct backing_dev_info *bdi,
|
||||
|
||||
if (bdi_dirty < x_intercept - span / 4) {
|
||||
pos_ratio = div64_u64(pos_ratio * (x_intercept - bdi_dirty),
|
||||
- x_intercept - bdi_setpoint + 1);
|
||||
+ (x_intercept - bdi_setpoint) | 1);
|
||||
} else
|
||||
pos_ratio /= 4;
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-177
@@ -1,177 +0,0 @@
|
||||
From: Sujith Manoharan <sujith@msujith.org>
|
||||
To: linux-wireless@vger.kernel.org
|
||||
Cc: ath9k-devel@qca.qualcomm.com
|
||||
Subject: [PATCH] ath9k: Update PCI IDs for AR9565
|
||||
Date: Mon, 5 Jan 2015 11:14:25 +0530
|
||||
|
||||
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
|
||||
|
||||
This patch adds several new PCI IDs for AR9565.
|
||||
|
||||
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
|
||||
---
|
||||
drivers/net/wireless/ath/ath9k/pci.c | 85 ++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 85 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
|
||||
index f009b5b..cc5c681 100644
|
||||
--- a/drivers/net/wireless/ath/ath9k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/pci.c
|
||||
@@ -427,6 +427,11 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
0x11AD, /* LITEON */
|
||||
+ 0x1842),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ 0x11AD, /* LITEON */
|
||||
0x6671),
|
||||
.driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
@@ -446,9 +451,19 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
.driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ 0x1B9A, /* XAVI */
|
||||
+ 0x28A3),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
PCI_VENDOR_ID_AZWAVE,
|
||||
0x218A),
|
||||
.driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_AZWAVE,
|
||||
+ 0x2F8A),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_1ANT },
|
||||
|
||||
/* WB335 1-ANT / Antenna Diversity */
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
@@ -508,6 +523,11 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
.driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ PCI_VENDOR_ID_AZWAVE,
|
||||
+ 0x213C),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
PCI_VENDOR_ID_HP,
|
||||
0x18E3),
|
||||
.driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
@@ -555,6 +575,16 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ PCI_VENDOR_ID_SAMSUNG,
|
||||
+ 0x4129),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_SAMSUNG,
|
||||
+ 0x412A),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
PCI_VENDOR_ID_ATHEROS,
|
||||
0x3027),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
@@ -586,10 +616,25 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
0x11AD, /* LITEON */
|
||||
+ 0x1832),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ 0x11AD, /* LITEON */
|
||||
0x0692),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ 0x11AD, /* LITEON */
|
||||
+ 0x0803),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ 0x11AD, /* LITEON */
|
||||
+ 0x0813),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
PCI_VENDOR_ID_AZWAVE,
|
||||
0x2130),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
@@ -605,6 +650,21 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ PCI_VENDOR_ID_AZWAVE,
|
||||
+ 0x218B),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_AZWAVE,
|
||||
+ 0x218C),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_AZWAVE,
|
||||
+ 0x2F82),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
0x144F, /* ASKEY */
|
||||
0x7202),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
@@ -616,10 +676,20 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
0x1B9A, /* XAVI */
|
||||
+ 0x2813),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ 0x1B9A, /* XAVI */
|
||||
0x28A2),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ 0x1B9A, /* XAVI */
|
||||
+ 0x28A4),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
0x185F, /* WNC */
|
||||
0x3027),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
@@ -636,10 +706,25 @@ static const struct pci_device_id ath_pci_id_table[] = {
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
PCI_VENDOR_ID_FOXCONN,
|
||||
+ 0xE08F),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_FOXCONN,
|
||||
0xE081),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
0x0036,
|
||||
+ PCI_VENDOR_ID_FOXCONN,
|
||||
+ 0xE091),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
+ PCI_VENDOR_ID_FOXCONN,
|
||||
+ 0xE099),
|
||||
+ .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
|
||||
+ 0x0036,
|
||||
PCI_VENDOR_ID_LENOVO,
|
||||
0x3026),
|
||||
.driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
|
||||
--
|
||||
2.2.1
|
||||
-116
@@ -1,116 +0,0 @@
|
||||
From 8b3a38daff6f50027039d6979b9eb026907508eb Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend@broadcom.com>
|
||||
Date: Tue, 23 Dec 2014 19:04:23 +0100
|
||||
Subject: brcmfmac: Add support for bcm43340/1 wireless chipsets
|
||||
|
||||
This patch adds support for the bcm43340 and bcm43341 wireless
|
||||
chipsets. These two chipsets are identical from wireless parts
|
||||
perspective. As such they use the same firmware image.
|
||||
|
||||
Cc: Samuel Ortiz <sameo@linux.intel.com>
|
||||
Cc: Rob Herring <rob.herring@linaro.org>
|
||||
Signed-off-by: John Stultz <john.stultz@linaro.org>
|
||||
[arend@broadcom.com: squash to single commit, remove 43341 chipid]
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
||||
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
|
||||
index 9880dae..dffd9e4 100644
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
|
||||
@@ -1005,6 +1005,8 @@ static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_4329_DEVICE_ID),
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_4330_DEVICE_ID),
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_4334_DEVICE_ID),
|
||||
+ BRCMF_SDIO_DEVICE(BRCM_SDIO_43340_DEVICE_ID),
|
||||
+ BRCMF_SDIO_DEVICE(BRCM_SDIO_43341_DEVICE_ID),
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_43362_DEVICE_ID),
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_4335_4339_DEVICE_ID),
|
||||
BRCMF_SDIO_DEVICE(BRCM_SDIO_4354_DEVICE_ID),
|
||||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/brcm80211/brcmfmac/chip.c
|
||||
index 519b79e..04d2ca0 100644
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/chip.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/chip.c
|
||||
@@ -481,6 +481,7 @@ static void brcmf_chip_get_raminfo(struct brcmf_chip_priv *ci)
|
||||
ci->pub.ramsize = 0x48000;
|
||||
break;
|
||||
case BRCM_CC_4334_CHIP_ID:
|
||||
+ case BRCM_CC_43340_CHIP_ID:
|
||||
ci->pub.ramsize = 0x80000;
|
||||
break;
|
||||
case BRCM_CC_4335_CHIP_ID:
|
||||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
|
||||
index 0b0d51a..551da35 100644
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
|
||||
@@ -608,6 +608,8 @@ static const struct sdiod_drive_str sdiod_drvstr_tab2_3v3[] = {
|
||||
#define BCM4330_NVRAM_NAME "brcm/brcmfmac4330-sdio.txt"
|
||||
#define BCM4334_FIRMWARE_NAME "brcm/brcmfmac4334-sdio.bin"
|
||||
#define BCM4334_NVRAM_NAME "brcm/brcmfmac4334-sdio.txt"
|
||||
+#define BCM43340_FIRMWARE_NAME "brcm/brcmfmac43340-sdio.bin"
|
||||
+#define BCM43340_NVRAM_NAME "brcm/brcmfmac43340-sdio.txt"
|
||||
#define BCM4335_FIRMWARE_NAME "brcm/brcmfmac4335-sdio.bin"
|
||||
#define BCM4335_NVRAM_NAME "brcm/brcmfmac4335-sdio.txt"
|
||||
#define BCM43362_FIRMWARE_NAME "brcm/brcmfmac43362-sdio.bin"
|
||||
@@ -629,6 +631,8 @@ MODULE_FIRMWARE(BCM4330_FIRMWARE_NAME);
|
||||
MODULE_FIRMWARE(BCM4330_NVRAM_NAME);
|
||||
MODULE_FIRMWARE(BCM4334_FIRMWARE_NAME);
|
||||
MODULE_FIRMWARE(BCM4334_NVRAM_NAME);
|
||||
+MODULE_FIRMWARE(BCM43340_FIRMWARE_NAME);
|
||||
+MODULE_FIRMWARE(BCM43340_NVRAM_NAME);
|
||||
MODULE_FIRMWARE(BCM4335_FIRMWARE_NAME);
|
||||
MODULE_FIRMWARE(BCM4335_NVRAM_NAME);
|
||||
MODULE_FIRMWARE(BCM43362_FIRMWARE_NAME);
|
||||
@@ -660,6 +664,7 @@ static const struct brcmf_firmware_names brcmf_fwname_data[] = {
|
||||
{ BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4329) },
|
||||
{ BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4330) },
|
||||
{ BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4334) },
|
||||
+ { BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM43340) },
|
||||
{ BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4335) },
|
||||
{ BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, BRCMF_FIRMWARE_NVRAM(BCM43362) },
|
||||
{ BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4339) },
|
||||
diff --git a/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h
|
||||
index 6996fcc..00215ef 100644
|
||||
--- a/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h
|
||||
+++ b/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h
|
||||
@@ -34,6 +34,7 @@
|
||||
#define BRCM_CC_4329_CHIP_ID 0x4329
|
||||
#define BRCM_CC_4330_CHIP_ID 0x4330
|
||||
#define BRCM_CC_4334_CHIP_ID 0x4334
|
||||
+#define BRCM_CC_43340_CHIP_ID 43340
|
||||
#define BRCM_CC_43362_CHIP_ID 43362
|
||||
#define BRCM_CC_4335_CHIP_ID 0x4335
|
||||
#define BRCM_CC_4339_CHIP_ID 0x4339
|
||||
@@ -51,6 +52,8 @@
|
||||
#define BRCM_SDIO_4329_DEVICE_ID BRCM_CC_4329_CHIP_ID
|
||||
#define BRCM_SDIO_4330_DEVICE_ID BRCM_CC_4330_CHIP_ID
|
||||
#define BRCM_SDIO_4334_DEVICE_ID BRCM_CC_4334_CHIP_ID
|
||||
+#define BRCM_SDIO_43340_DEVICE_ID BRCM_CC_43340_CHIP_ID
|
||||
+#define BRCM_SDIO_43341_DEVICE_ID 43341
|
||||
#define BRCM_SDIO_43362_DEVICE_ID BRCM_CC_43362_CHIP_ID
|
||||
#define BRCM_SDIO_4335_4339_DEVICE_ID BRCM_CC_4335_CHIP_ID
|
||||
#define BRCM_SDIO_4354_DEVICE_ID BRCM_CC_4354_CHIP_ID
|
||||
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
|
||||
index 0f01fe0..9968079 100644
|
||||
--- a/include/linux/mmc/sdio_ids.h
|
||||
+++ b/include/linux/mmc/sdio_ids.h
|
||||
@@ -24,13 +24,15 @@
|
||||
* Vendors and devices. Sort key: vendor first, device next.
|
||||
*/
|
||||
#define SDIO_VENDOR_ID_BROADCOM 0x02d0
|
||||
-#define SDIO_DEVICE_ID_BROADCOM_43143 43143
|
||||
+#define SDIO_DEVICE_ID_BROADCOM_43143 0xa887
|
||||
#define SDIO_DEVICE_ID_BROADCOM_43241 0x4324
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4329 0x4329
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4330 0x4330
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4334 0x4334
|
||||
+#define SDIO_DEVICE_ID_BROADCOM_43340 0xa94c
|
||||
+#define SDIO_DEVICE_ID_BROADCOM_43341 0xa94d
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4335_4339 0x4335
|
||||
-#define SDIO_DEVICE_ID_BROADCOM_43362 43362
|
||||
+#define SDIO_DEVICE_ID_BROADCOM_43362 0xa962
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4354 0x4354
|
||||
|
||||
#define SDIO_VENDOR_ID_INTEL 0x0089
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
From c2b3fb54bf2952b0a41d13cb1df592d9aa0ecf9e Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend@broadcom.com>
|
||||
Date: Fri, 1 May 2015 09:59:35 +0200
|
||||
Subject: [PATCH] brcmfmac: avoid null pointer access when
|
||||
brcmf_msgbuf_get_pktid() fails
|
||||
|
||||
The function brcmf_msgbuf_get_pktid() may return a NULL pointer so
|
||||
the callers should check the return pointer before accessing it.
|
||||
|
||||
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||
---
|
||||
drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
|
||||
index 6262612..7a3231d 100644
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -510,11 +510,9 @@ static int brcmf_msgbuf_query_dcmd(struc
|
||||
msgbuf->rx_pktids,
|
||||
msgbuf->ioctl_resp_pktid);
|
||||
if (msgbuf->ioctl_resp_ret_len != 0) {
|
||||
- if (!skb) {
|
||||
- brcmf_err("Invalid packet id idx recv'd %d\n",
|
||||
- msgbuf->ioctl_resp_pktid);
|
||||
+ if (!skb)
|
||||
return -EBADF;
|
||||
- }
|
||||
+
|
||||
memcpy(buf, skb->data, (len < msgbuf->ioctl_resp_ret_len) ?
|
||||
len : msgbuf->ioctl_resp_ret_len);
|
||||
}
|
||||
@@ -865,10 +863,8 @@ brcmf_msgbuf_process_txstatus(struct brc
|
||||
flowid -= BRCMF_NROF_H2D_COMMON_MSGRINGS;
|
||||
skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,
|
||||
msgbuf->tx_pktids, idx);
|
||||
- if (!skb) {
|
||||
- brcmf_err("Invalid packet id idx recv'd %d\n", idx);
|
||||
+ if (!skb)
|
||||
return;
|
||||
- }
|
||||
|
||||
set_bit(flowid, msgbuf->txstatus_done_map);
|
||||
|
||||
@@ -1145,6 +1141,8 @@ brcmf_msgbuf_process_rx_complete(struct
|
||||
|
||||
skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,
|
||||
msgbuf->rx_pktids, idx);
|
||||
+ if (!skb)
|
||||
+ return;
|
||||
|
||||
if (data_offset)
|
||||
skb_pull(skb, data_offset);
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
|
||||
To: Kalle Valo <kvalo@codeaurora.org>, linux-wireless@vger.kernel.org
|
||||
Cc: Brett Rudley <brudley@broadcom.com>, Arend van Spriel <arend@broadcom.com>,
|
||||
"Franky (Zhenhui) Lin" <frankyl@broadcom.com>,
|
||||
Hante Meuleman <meuleman@broadcom.com>,
|
||||
brcm80211-dev-list@broadcom.com,
|
||||
=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
|
||||
Subject: [PATCH] brcmfmac: check result of USB firmware request
|
||||
Date: Thu, 7 May 2015 14:13:03 +0200
|
||||
|
||||
This prevents silence failures with driver waiting (infinitely) for a
|
||||
callback.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
---
|
||||
I don't really have any opinion if this should go for next or as a fix.
|
||||
---
|
||||
drivers/net/wireless/brcm80211/brcmfmac/usb.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
|
||||
index 5df6aa7..daba86d 100644
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
|
||||
@@ -1270,8 +1270,13 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
|
||||
bus->chiprev = bus_pub->chiprev;
|
||||
|
||||
/* request firmware here */
|
||||
- brcmf_fw_get_firmwares(dev, 0, brcmf_usb_get_fwname(devinfo), NULL,
|
||||
- brcmf_usb_probe_phase2);
|
||||
+ ret = brcmf_fw_get_firmwares(dev, 0, brcmf_usb_get_fwname(devinfo),
|
||||
+ NULL, brcmf_usb_probe_phase2);
|
||||
+ if (ret) {
|
||||
+ brcmf_err("firmware request failed: %d\n", ret);
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
--
|
||||
1.8.4.5
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
From 78e883585db49aa6d86b8817b770d7717699ab4e Mon Sep 17 00:00:00 2001
|
||||
From: Alex Williamson <alex.williamson@redhat.com>
|
||||
Date: Thu, 22 Jan 2015 11:15:43 -0700
|
||||
Subject: [PATCH] PCI: Add Wellsburg (X99) to Intel PCH root port ACS quirk
|
||||
|
||||
Intel has confirmed that the Wellsburg chipset, while not reporting ACS,
|
||||
does provide the proper isolation through the RCBA/BSPR registers, so the
|
||||
same quirk works for this set of device IDs.
|
||||
|
||||
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Acked-by: Don Dugger <donald.d.dugger@intel.com>
|
||||
---
|
||||
drivers/pci/quirks.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 45bd870..e248a11 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3703,6 +3703,9 @@ static const u16 pci_quirk_intel_pch_acs_ids[] = {
|
||||
0x9c98, 0x9c99, 0x9c9a, 0x9c9b,
|
||||
/* Patsburg (X79) PCH */
|
||||
0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c, 0x1d1e,
|
||||
+ /* Wellsburg (X99) PCH */
|
||||
+ 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, 0x8d16, 0x8d17,
|
||||
+ 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d1d, 0x8d1e,
|
||||
};
|
||||
|
||||
static bool pci_quirk_intel_pch_acs_match(struct pci_dev *dev)
|
||||
--
|
||||
2.3.2
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
From: Andy Whitcroft <apw@canonical.com>
|
||||
Date: Wed, 2 Dec 2009 14:41:53 +0000 (+0000)
|
||||
Subject: UBUNTU: SAUCE: isapnp_init: make isa PNP scans occur async
|
||||
X-Git-Tag: Ubuntu-2.6.32-8.12~27
|
||||
X-Git-Url: http://kernel.ubuntu.com/git?p=ubuntu%2Fubuntu-lucid.git;a=commitdiff_plain;h=da0e50d81022edb2bbef538fd7adf90381f8eb01
|
||||
|
||||
UBUNTU: SAUCE: isapnp_init: make isa PNP scans occur async
|
||||
|
||||
The results of scanning for devices is to trigger udev events therefore
|
||||
we can push this processing async.
|
||||
|
||||
This reduces kernel initialisation time (the time from bootloader to
|
||||
starting userspace) by several 10ths of a second x86 32bit systems.
|
||||
|
||||
Signed-off-by: Andy Whitcroft <apw@canonical.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c
|
||||
index e851160..7e4c8cd 100644
|
||||
--- a/drivers/pnp/isapnp/core.c
|
||||
+++ b/drivers/pnp/isapnp/core.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/isapnp.h>
|
||||
#include <linux/mutex.h>
|
||||
+#include <linux/async.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include "../base.h"
|
||||
@@ -1002,7 +1003,7 @@ struct pnp_protocol isapnp_protocol = {
|
||||
.disable = isapnp_disable_resources,
|
||||
};
|
||||
|
||||
-static int __init isapnp_init(void)
|
||||
+static int __init real_isapnp_init(void)
|
||||
{
|
||||
int cards;
|
||||
struct pnp_card *card;
|
||||
@@ -1096,6 +1097,15 @@ static int __init isapnp_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void __init async_isapnp_init(void *unused, async_cookie_t cookie)
|
||||
+{
|
||||
+ (void)real_isapnp_init();
|
||||
+}
|
||||
+
|
||||
+static int __init isapnp_init(void)
|
||||
+{
|
||||
+ async_schedule(async_isapnp_init, NULL);
|
||||
+}
|
||||
device_initcall(isapnp_init);
|
||||
|
||||
/* format is: noisapnp */
|
||||
@@ -1,15 +0,0 @@
|
||||
--
|
||||
drivers/pnp/pnpbios/core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/pnp/pnpbios/core.c
|
||||
+++ b/drivers/pnp/pnpbios/core.c
|
||||
@@ -403,7 +403,7 @@ static void __init build_devlist(void)
|
||||
*
|
||||
*/
|
||||
|
||||
-static int pnpbios_disabled;
|
||||
+static int pnpbios_disabled = 1;
|
||||
int pnpbios_dont_use_current_config;
|
||||
|
||||
static int __init pnpbios_setup(char *str)
|
||||
-206
@@ -1,206 +0,0 @@
|
||||
From 41050a009640f9f330a5b916563ca7faf853a98c Mon Sep 17 00:00:00 2001
|
||||
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||
Date: Thu, 18 Dec 2014 12:31:02 -0800
|
||||
Subject: [PATCH] rcu: Fix rcu_barrier() race that could result in too-short
|
||||
wait
|
||||
|
||||
The rcu_barrier() no-callbacks check for no-CBs CPUs has race conditions.
|
||||
It checks a given CPU's lists of callbacks, and if all three no-CBs lists
|
||||
are empty, ignores that CPU. However, these three lists could potentially
|
||||
be empty even when callbacks are present if the check executed just as
|
||||
the callbacks were being moved from one list to another. It turns out
|
||||
that recent versions of rcutorture can spot this race.
|
||||
|
||||
This commit plugs this hole by consolidating the per-list counts of
|
||||
no-CBs callbacks into a single count, which is incremented before
|
||||
the corresponding callback is posted and after it is invoked. Then
|
||||
rcu_barrier() checks this single count to reliably determine whether
|
||||
the corresponding CPU has no-CBs callbacks.
|
||||
|
||||
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
---
|
||||
kernel/rcu/tree.c | 1 +
|
||||
kernel/rcu/tree.h | 29 +++++++----------------------
|
||||
kernel/rcu/tree_plugin.h | 45 ++++++++++++++++++++++++++++-----------------
|
||||
3 files changed, 36 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
|
||||
index 203b50d..5b9f3b9 100644
|
||||
--- a/kernel/rcu/tree.c
|
||||
+++ b/kernel/rcu/tree.c
|
||||
@@ -3344,6 +3344,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
|
||||
} else {
|
||||
_rcu_barrier_trace(rsp, "OnlineNoCB", cpu,
|
||||
rsp->n_barrier_done);
|
||||
+ smp_mb__before_atomic();
|
||||
atomic_inc(&rsp->barrier_cpu_count);
|
||||
__call_rcu(&rdp->barrier_head,
|
||||
rcu_barrier_callback, rsp, cpu, 0);
|
||||
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
|
||||
index 8e7b184..cb59086 100644
|
||||
--- a/kernel/rcu/tree.h
|
||||
+++ b/kernel/rcu/tree.h
|
||||
@@ -340,14 +340,10 @@ struct rcu_data {
|
||||
#ifdef CONFIG_RCU_NOCB_CPU
|
||||
struct rcu_head *nocb_head; /* CBs waiting for kthread. */
|
||||
struct rcu_head **nocb_tail;
|
||||
- atomic_long_t nocb_q_count; /* # CBs waiting for kthread */
|
||||
- atomic_long_t nocb_q_count_lazy; /* (approximate). */
|
||||
+ atomic_long_t nocb_q_count; /* # CBs waiting for nocb */
|
||||
+ atomic_long_t nocb_q_count_lazy; /* invocation (all stages). */
|
||||
struct rcu_head *nocb_follower_head; /* CBs ready to invoke. */
|
||||
struct rcu_head **nocb_follower_tail;
|
||||
- atomic_long_t nocb_follower_count; /* # CBs ready to invoke. */
|
||||
- atomic_long_t nocb_follower_count_lazy; /* (approximate). */
|
||||
- int nocb_p_count; /* # CBs being invoked by kthread */
|
||||
- int nocb_p_count_lazy; /* (approximate). */
|
||||
wait_queue_head_t nocb_wq; /* For nocb kthreads to sleep on. */
|
||||
struct task_struct *nocb_kthread;
|
||||
int nocb_defer_wakeup; /* Defer wakeup of nocb_kthread. */
|
||||
@@ -356,8 +352,6 @@ struct rcu_data {
|
||||
struct rcu_head *nocb_gp_head ____cacheline_internodealigned_in_smp;
|
||||
/* CBs waiting for GP. */
|
||||
struct rcu_head **nocb_gp_tail;
|
||||
- long nocb_gp_count;
|
||||
- long nocb_gp_count_lazy;
|
||||
bool nocb_leader_sleep; /* Is the nocb leader thread asleep? */
|
||||
struct rcu_data *nocb_next_follower;
|
||||
/* Next follower in wakeup chain. */
|
||||
@@ -622,24 +616,15 @@ static void rcu_dynticks_task_exit(void);
|
||||
#endif /* #ifndef RCU_TREE_NONCORE */
|
||||
|
||||
#ifdef CONFIG_RCU_TRACE
|
||||
-#ifdef CONFIG_RCU_NOCB_CPU
|
||||
-/* Sum up queue lengths for tracing. */
|
||||
+/* Read out queue lengths for tracing. */
|
||||
static inline void rcu_nocb_q_lengths(struct rcu_data *rdp, long *ql, long *qll)
|
||||
{
|
||||
- *ql = atomic_long_read(&rdp->nocb_q_count) +
|
||||
- rdp->nocb_p_count +
|
||||
- atomic_long_read(&rdp->nocb_follower_count) +
|
||||
- rdp->nocb_p_count + rdp->nocb_gp_count;
|
||||
- *qll = atomic_long_read(&rdp->nocb_q_count_lazy) +
|
||||
- rdp->nocb_p_count_lazy +
|
||||
- atomic_long_read(&rdp->nocb_follower_count_lazy) +
|
||||
- rdp->nocb_p_count_lazy + rdp->nocb_gp_count_lazy;
|
||||
-}
|
||||
+#ifdef CONFIG_RCU_NOCB_CPU
|
||||
+ *ql = atomic_long_read(&rdp->nocb_q_count);
|
||||
+ *qll = atomic_long_read(&rdp->nocb_q_count_lazy);
|
||||
#else /* #ifdef CONFIG_RCU_NOCB_CPU */
|
||||
-static inline void rcu_nocb_q_lengths(struct rcu_data *rdp, long *ql, long *qll)
|
||||
-{
|
||||
*ql = 0;
|
||||
*qll = 0;
|
||||
-}
|
||||
#endif /* #else #ifdef CONFIG_RCU_NOCB_CPU */
|
||||
+}
|
||||
#endif /* #ifdef CONFIG_RCU_TRACE */
|
||||
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
|
||||
index 3ec85cb..e5c43b7 100644
|
||||
--- a/kernel/rcu/tree_plugin.h
|
||||
+++ b/kernel/rcu/tree_plugin.h
|
||||
@@ -2056,9 +2056,26 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force)
|
||||
static bool rcu_nocb_cpu_needs_barrier(struct rcu_state *rsp, int cpu)
|
||||
{
|
||||
struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
|
||||
+ unsigned long ret;
|
||||
+#ifdef CONFIG_PROVE_RCU
|
||||
struct rcu_head *rhp;
|
||||
+#endif /* #ifdef CONFIG_PROVE_RCU */
|
||||
+
|
||||
+ /*
|
||||
+ * Check count of all no-CBs callbacks awaiting invocation.
|
||||
+ * There needs to be a barrier before this function is called,
|
||||
+ * but associated with a prior determination that no more
|
||||
+ * callbacks would be posted. In the worst case, the first
|
||||
+ * barrier in _rcu_barrier() suffices (but the caller cannot
|
||||
+ * necessarily rely on this, not a substitute for the caller
|
||||
+ * getting the concurrency design right!). There must also be
|
||||
+ * a barrier between the following load an posting of a callback
|
||||
+ * (if a callback is in fact needed). This is associated with an
|
||||
+ * atomic_inc() in the caller.
|
||||
+ */
|
||||
+ ret = atomic_long_read(&rdp->nocb_q_count);
|
||||
|
||||
- /* No-CBs CPUs might have callbacks on any of three lists. */
|
||||
+#ifdef CONFIG_PROVE_RCU
|
||||
rhp = ACCESS_ONCE(rdp->nocb_head);
|
||||
if (!rhp)
|
||||
rhp = ACCESS_ONCE(rdp->nocb_gp_head);
|
||||
@@ -2072,8 +2089,9 @@ static bool rcu_nocb_cpu_needs_barrier(struct rcu_state *rsp, int cpu)
|
||||
cpu, rhp->func);
|
||||
WARN_ON_ONCE(1);
|
||||
}
|
||||
+#endif /* #ifdef CONFIG_PROVE_RCU */
|
||||
|
||||
- return !!rhp;
|
||||
+ return !!ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2095,9 +2113,10 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
|
||||
struct task_struct *t;
|
||||
|
||||
/* Enqueue the callback on the nocb list and update counts. */
|
||||
+ atomic_long_add(rhcount, &rdp->nocb_q_count);
|
||||
+ /* rcu_barrier() relies on ->nocb_q_count add before xchg. */
|
||||
old_rhpp = xchg(&rdp->nocb_tail, rhtp);
|
||||
ACCESS_ONCE(*old_rhpp) = rhp;
|
||||
- atomic_long_add(rhcount, &rdp->nocb_q_count);
|
||||
atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy);
|
||||
smp_mb__after_atomic(); /* Store *old_rhpp before _wake test. */
|
||||
|
||||
@@ -2288,9 +2307,6 @@ wait_again:
|
||||
/* Move callbacks to wait-for-GP list, which is empty. */
|
||||
ACCESS_ONCE(rdp->nocb_head) = NULL;
|
||||
rdp->nocb_gp_tail = xchg(&rdp->nocb_tail, &rdp->nocb_head);
|
||||
- rdp->nocb_gp_count = atomic_long_xchg(&rdp->nocb_q_count, 0);
|
||||
- rdp->nocb_gp_count_lazy =
|
||||
- atomic_long_xchg(&rdp->nocb_q_count_lazy, 0);
|
||||
gotcbs = true;
|
||||
}
|
||||
|
||||
@@ -2338,9 +2354,6 @@ wait_again:
|
||||
/* Append callbacks to follower's "done" list. */
|
||||
tail = xchg(&rdp->nocb_follower_tail, rdp->nocb_gp_tail);
|
||||
*tail = rdp->nocb_gp_head;
|
||||
- atomic_long_add(rdp->nocb_gp_count, &rdp->nocb_follower_count);
|
||||
- atomic_long_add(rdp->nocb_gp_count_lazy,
|
||||
- &rdp->nocb_follower_count_lazy);
|
||||
smp_mb__after_atomic(); /* Store *tail before wakeup. */
|
||||
if (rdp != my_rdp && tail == &rdp->nocb_follower_head) {
|
||||
/*
|
||||
@@ -2415,13 +2428,11 @@ static int rcu_nocb_kthread(void *arg)
|
||||
trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty");
|
||||
ACCESS_ONCE(rdp->nocb_follower_head) = NULL;
|
||||
tail = xchg(&rdp->nocb_follower_tail, &rdp->nocb_follower_head);
|
||||
- c = atomic_long_xchg(&rdp->nocb_follower_count, 0);
|
||||
- cl = atomic_long_xchg(&rdp->nocb_follower_count_lazy, 0);
|
||||
- rdp->nocb_p_count += c;
|
||||
- rdp->nocb_p_count_lazy += cl;
|
||||
|
||||
/* Each pass through the following loop invokes a callback. */
|
||||
- trace_rcu_batch_start(rdp->rsp->name, cl, c, -1);
|
||||
+ trace_rcu_batch_start(rdp->rsp->name,
|
||||
+ atomic_long_read(&rdp->nocb_q_count_lazy),
|
||||
+ atomic_long_read(&rdp->nocb_q_count), -1);
|
||||
c = cl = 0;
|
||||
while (list) {
|
||||
next = list->next;
|
||||
@@ -2443,9 +2454,9 @@ static int rcu_nocb_kthread(void *arg)
|
||||
list = next;
|
||||
}
|
||||
trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1);
|
||||
- ACCESS_ONCE(rdp->nocb_p_count) = rdp->nocb_p_count - c;
|
||||
- ACCESS_ONCE(rdp->nocb_p_count_lazy) =
|
||||
- rdp->nocb_p_count_lazy - cl;
|
||||
+ smp_mb__before_atomic(); /* _add after CB invocation. */
|
||||
+ atomic_long_add(-c, &rdp->nocb_q_count);
|
||||
+ atomic_long_add(-cl, &rdp->nocb_q_count_lazy);
|
||||
rdp->n_nocbs_invoked += c;
|
||||
}
|
||||
return 0;
|
||||
--
|
||||
2.3.1
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
From 35e9a9f93994d7f7d12afa41169c7ba05513721b Mon Sep 17 00:00:00 2001
|
||||
From: Mike Christie <michaelc@cs.wisc.edu>
|
||||
Date: Mon, 20 Apr 2015 22:42:24 -0500
|
||||
Subject: SCSI: add 1024 max sectors black list flag
|
||||
|
||||
From: Mike Christie <michaelc@cs.wisc.edu>
|
||||
|
||||
commit 35e9a9f93994d7f7d12afa41169c7ba05513721b upstream.
|
||||
|
||||
This works around a issue with qnap iscsi targets not handling large IOs
|
||||
very well.
|
||||
|
||||
The target returns:
|
||||
|
||||
VPD INQUIRY: Block limits page (SBC)
|
||||
Maximum compare and write length: 1 blocks
|
||||
Optimal transfer length granularity: 1 blocks
|
||||
Maximum transfer length: 4294967295 blocks
|
||||
Optimal transfer length: 4294967295 blocks
|
||||
Maximum prefetch, xdread, xdwrite transfer length: 0 blocks
|
||||
Maximum unmap LBA count: 8388607
|
||||
Maximum unmap block descriptor count: 1
|
||||
Optimal unmap granularity: 16383
|
||||
Unmap granularity alignment valid: 0
|
||||
Unmap granularity alignment: 0
|
||||
Maximum write same length: 0xffffffff blocks
|
||||
Maximum atomic transfer length: 0
|
||||
Atomic alignment: 0
|
||||
Atomic transfer length granularity: 0
|
||||
|
||||
and it is *sometimes* able to handle at least one IO of size up to 8 MB. We
|
||||
have seen in traces where it will sometimes work, but other times it
|
||||
looks like it fails and it looks like it returns failures if we send
|
||||
multiple large IOs sometimes. Also it looks like it can return 2 different
|
||||
errors. It will sometimes send iscsi reject errors indicating out of
|
||||
resources or it will send invalid cdb illegal requests check conditions.
|
||||
And then when it sends iscsi rejects it does not seem to handle retries
|
||||
when there are command sequence holes, so I could not just add code to
|
||||
try and gracefully handle that error code.
|
||||
|
||||
The problem is that we do not have a good contact for the company,
|
||||
so we are not able to determine under what conditions it returns
|
||||
which error and why it sometimes works.
|
||||
|
||||
So, this patch just adds a new black list flag to set targets like this to
|
||||
the old max safe sectors of 1024. The max_hw_sectors changes added in 3.19
|
||||
caused this regression, so I also ccing stable.
|
||||
|
||||
Reported-by: Christian Hesse <list@eworm.de>
|
||||
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
|
||||
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: James Bottomley <JBottomley@Odin.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/scsi/scsi_devinfo.c | 1 +
|
||||
drivers/scsi/scsi_scan.c | 6 ++++++
|
||||
include/scsi/scsi_devinfo.h | 1 +
|
||||
3 files changed, 8 insertions(+)
|
||||
|
||||
--- a/drivers/scsi/scsi_devinfo.c
|
||||
+++ b/drivers/scsi/scsi_devinfo.c
|
||||
@@ -226,6 +226,7 @@ static struct {
|
||||
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"Promise", "VTrak E610f", NULL, BLIST_SPARSELUN | BLIST_NO_RSOC},
|
||||
{"Promise", "", NULL, BLIST_SPARSELUN},
|
||||
+ {"QNAP", "iSCSI Storage", NULL, BLIST_MAX_1024},
|
||||
{"QUANTUM", "XP34301", "1071", BLIST_NOTQ},
|
||||
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
|
||||
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
|
||||
--- a/drivers/scsi/scsi_scan.c
|
||||
+++ b/drivers/scsi/scsi_scan.c
|
||||
@@ -897,6 +897,12 @@ static int scsi_add_lun(struct scsi_devi
|
||||
*/
|
||||
if (*bflags & BLIST_MAX_512)
|
||||
blk_queue_max_hw_sectors(sdev->request_queue, 512);
|
||||
+ /*
|
||||
+ * Max 1024 sector transfer length for targets that report incorrect
|
||||
+ * max/optimal lengths and relied on the old block layer safe default
|
||||
+ */
|
||||
+ else if (*bflags & BLIST_MAX_1024)
|
||||
+ blk_queue_max_hw_sectors(sdev->request_queue, 1024);
|
||||
|
||||
/*
|
||||
* Some devices may not want to have a start command automatically
|
||||
--- a/include/scsi/scsi_devinfo.h
|
||||
+++ b/include/scsi/scsi_devinfo.h
|
||||
@@ -36,5 +36,6 @@
|
||||
for sequential scan */
|
||||
#define BLIST_TRY_VPD_PAGES 0x10000000 /* Attempt to read VPD pages */
|
||||
#define BLIST_NO_RSOC 0x20000000 /* don't try to issue RSOC */
|
||||
+#define BLIST_MAX_1024 0x40000000 /* maximum 1024 sector cdb length */
|
||||
|
||||
#endif
|
||||
@@ -14,6 +14,15 @@
|
||||
###
|
||||
### Stable Queue
|
||||
###
|
||||
stable-fs-add-helper-functions-for-permanently-empty-directories.patch
|
||||
stable-sysctl-allow-creating-permanently-empty-directories-that-serve-as-mountpoints.patch
|
||||
stable-proc-allow-creating-permanently-empty-directories-that-serve-as-mount-points.patch
|
||||
stable-kernfs-add-support-for-always-empty-directories.patch
|
||||
stable-sysfs-add-support-for-permanently-empty-directories-to-serve-as-mount-points.patch
|
||||
stable-sysfs-create-mountpoints-with-sysfs_create_mount_point.patch
|
||||
stable-mnt-update-fs_fully_visible-to-test-for-permanently-empty-directories.patch
|
||||
stable-mnt-refactor-the-logic-for-mounting-sysfs-and-proc-in-a-user-namespace.patch
|
||||
stable-mnt-modify-fs_fully_visible-to-deal-with-locked-ro-nodev-and-atime.patch
|
||||
|
||||
###
|
||||
### Arch x86
|
||||
@@ -38,22 +47,9 @@ x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch
|
||||
# slows down boot
|
||||
Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch
|
||||
|
||||
# regression fix
|
||||
x86-spinlocks-Fix-regression-in-spinlock-contention-.patch
|
||||
|
||||
###
|
||||
### Core
|
||||
###
|
||||
genirq-Set-initial-affinity-in-irq_set_affinity_hint.patch
|
||||
genirq-Fix-null-pointer-reference-in-irq_set_affinit.patch
|
||||
|
||||
iommu-vt-d-Remove-unused-variable.patch
|
||||
|
||||
rcu-Fix-rcu_barrier-race-that-could-result-in-too-sh.patch
|
||||
|
||||
# efi fixes
|
||||
x86-efi-Store-upper-bits-of-command-line-buffer-addr.patch
|
||||
firmware-efi-Fix-error-handling-in-add_sysfs_runtime_map_entr.patch
|
||||
|
||||
###
|
||||
### i2c
|
||||
@@ -70,19 +66,12 @@ pci-add-ALI-M5229-ide-compatibility-mode-quirk.patch
|
||||
pci-quirks-drop-devinit-exit.patch
|
||||
|
||||
# Intel ACS quirks
|
||||
pci-Add-Wellsburg-X99-to-Intel-PCH-root-port-ACS-qui.patch
|
||||
pci-acs-quirks-for-Intel-9-series-PCH-root-ports.patch
|
||||
|
||||
###
|
||||
### PNP core
|
||||
###
|
||||
|
||||
# Turns pnpbios off by default, useful, since pnpbios
|
||||
# is know to cause problems (TTL: forever)
|
||||
pnp-pnpbios-off-by-default.patch
|
||||
|
||||
pnp-isapnp-async-init.patch
|
||||
|
||||
###
|
||||
### ACPI
|
||||
###
|
||||
@@ -93,20 +82,6 @@ acpi-CLEVO-M360S-disable_acpi_irq.patch
|
||||
# Clevo M720SR freezes with C3
|
||||
acpi-processor-M720SR-limit-to-C2.patch
|
||||
|
||||
# fixes boot regression on some hw since kernel 3.11
|
||||
acpi-init-Fix-the-ordering-of-acpi_reserve_resources.patch
|
||||
# audio regression
|
||||
acpi-PNP-add-two-IDs-to-list-for-PNPACPI-device-enum.patch
|
||||
# MB regression
|
||||
acpi-SBS-Add-5-us-delay-to-fix-SBS-hangs-on-MacBook.patch
|
||||
acpi-sbs-enable-battery-manager-when-present.patch
|
||||
# backlight override
|
||||
acpi-video-Allow-forcing-native-backlight-on-non-win.patch
|
||||
# fix booting on new hw
|
||||
acpi-ACPICA-Add-Windows-2015-string-to-_OSI-support.patch
|
||||
# less log flooding
|
||||
acpi-table-Use-pr_debug-instead-of-pr_info-for-MADT-.patch
|
||||
|
||||
###
|
||||
### Block
|
||||
###
|
||||
@@ -150,42 +125,17 @@ ata-prefer-ata-drivers-over-ide-drivers-when-both-are-built.patch
|
||||
ata-revert-Disabling-the-async-PM-for-JMicron-chip-363-361.patch
|
||||
ata-jmicron-disable-broken-async_suspend.patch
|
||||
|
||||
# raid fixes
|
||||
md-raid5-dont-record-new-size-if-resize_stripes-fails.patch
|
||||
|
||||
# blk-mq
|
||||
blk-mq-fix-CPU-hotplug-handling.patch
|
||||
blk-mq-fix-race-between-timeout-and-CPU-hotplug.patch
|
||||
blk-mq-fix-FUA-request-hang.patch
|
||||
blk-mq-don-t-lose-requests-if-a-stopped-queue-restar.patch
|
||||
|
||||
# QNAP fix
|
||||
scsi-add-1024-max-sectors-black-list-flag.patch
|
||||
# Nice SSD speedup
|
||||
block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch
|
||||
block-cfq-iosched-fix-the-setting-of-IOPS-mode-on-SSDs.patch
|
||||
|
||||
###
|
||||
### File-system
|
||||
###
|
||||
|
||||
# aufs from: http://aufs.sourceforge.net/ (mga#8314)
|
||||
fs-aufs-3.19.patch
|
||||
fs-aufs-3.19-modular.patch
|
||||
|
||||
# btrfs crash
|
||||
fs-btrfs-fix-BUG_ON-in-btrfs_orphan_add-when-delete-unu.patch
|
||||
fs-btrfs-unlock-i_mutex-after-attempting-to-delete-subvolume-during-send.patch
|
||||
|
||||
# efi fix
|
||||
fs-efivarfs-Ensure-VariableName-is-NUL-terminated.patch
|
||||
|
||||
# ext4 fix
|
||||
fs-ext4-fix-data-corruption-caused-by-unwritten-and-del.patch
|
||||
fs-ext4-move-check-under-lock-scope-to-close-a-race.patch
|
||||
|
||||
# core
|
||||
fs-mnt-Fix-fs_fully_visible-to-verify-the-root-director.patch
|
||||
fs-mnt-Fail-collect_mounts-when-applied-to-unmounted-mo.patch
|
||||
fs-path_openat-fix-double-fput.patch
|
||||
fs-splice-sendfile-at-once-fails-for-big-files.patch
|
||||
fs-aufs4.patch
|
||||
fs-aufs4-modular.patch
|
||||
|
||||
###
|
||||
### FireWire
|
||||
@@ -220,14 +170,6 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# i915, nice speedups
|
||||
gpu-drm-i915-Make-sample_c-messages-go-faster-on-Haswell.patch
|
||||
gpu-drm-i915-Improve-HiZ-throughput-on-Cherryview.patch
|
||||
gpu-drm-i915-Enable-the-HiZ-RAW-Stall-Optimization-on-Broadwell.patch
|
||||
gpu-drm-i915-Ensure-the-HiZ-RAW-Stall-Optimization-is-on-for-Cherryview.patch
|
||||
# i915, vlv crash
|
||||
gpu-drm-i915-fix-vlv-crash.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
###
|
||||
@@ -238,13 +180,6 @@ gpu-drm-i915-fix-vlv-crash.patch
|
||||
|
||||
input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch
|
||||
|
||||
# mga #14897
|
||||
Input-psmouse-support-for-the-FocalTech-PS-2-protoco.patch
|
||||
Input-psmouse-remove-hardcoded-touchpad-size-from-th.patch
|
||||
Input-psmouse-ensure-that-focaltech-reports-consiste.patch
|
||||
Input-psmouse-disable-changing-resolution-rate-scale.patch
|
||||
Input-psmouse-disable-palm-detection-in-the-focaltec.patch
|
||||
|
||||
###
|
||||
### idle
|
||||
###
|
||||
@@ -257,6 +192,8 @@ Input-psmouse-disable-palm-detection-in-the-focaltec.patch
|
||||
### Media
|
||||
###
|
||||
|
||||
media-Fix-regression-in-some-more-dib0700-based-devi.patch
|
||||
|
||||
###
|
||||
### Misc
|
||||
###
|
||||
@@ -265,11 +202,6 @@ Input-psmouse-disable-palm-detection-in-the-focaltec.patch
|
||||
### MM
|
||||
###
|
||||
|
||||
mm-vmscan-wake-up-all-pfmemalloc-throttled-processes.patch
|
||||
|
||||
# div/0 fix
|
||||
mm-writeback-use-1-instead-of-1-to-protect-against-div-.patch
|
||||
|
||||
###
|
||||
### Network
|
||||
###
|
||||
@@ -290,14 +222,6 @@ net-netfilter-psd.patch
|
||||
net-netfilter-psd-mdv.patch
|
||||
net-netfilter-psd-2.6.35-buildfix.patch
|
||||
|
||||
# ath9k
|
||||
net-wireless-ath9k-Update-PCI-IDs-for-AR9565.patch
|
||||
|
||||
# brcmfmac
|
||||
net-wireless-brcmfmac-Add-support-for-bcm43340_1-wireless-chipsets.patch
|
||||
net-wireless-brcmfmac-avoid-null-pointer-access-when-brcmf_msgbuf.patch
|
||||
net-wireless-brcmfmac-check-result-of-USB-firmware-request.patch
|
||||
|
||||
###
|
||||
### Platform drivers
|
||||
###
|
||||
@@ -322,21 +246,6 @@ include-kbuild-export-pci_ids.patch
|
||||
### Sound
|
||||
###
|
||||
|
||||
# adds bluetooth sco support
|
||||
sound-bluetooth-SCO-support.patch
|
||||
|
||||
# VT1613
|
||||
sound-alsa-add-VT1613-AC97-codec-support.patch
|
||||
|
||||
# Alsa updates for Dell
|
||||
sound-alsa-hda-realtek-Support-Dell-headset-mode-for-ALC256.patch
|
||||
sound-alsa-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
sound-alsa-hda-realtek-Support-Dell-headset-mode-for-ALC288.patch
|
||||
|
||||
# emu10k
|
||||
alsa-emu10k1-emu10k2-32-bit-dma-mode.patch
|
||||
alsa-emu10k1-fix-card-shortname-string-buffer-overflow.patch
|
||||
|
||||
###
|
||||
### Staging
|
||||
###
|
||||
@@ -350,30 +259,11 @@ alsa-emu10k1-fix-card-shortname-string-buffer-overflow.patch
|
||||
### USB
|
||||
###
|
||||
|
||||
# http://qa.mandriva.com/show_bug.cgi?id=30638
|
||||
bluetooth-hci_usb-disable-isoc-transfers.patch
|
||||
|
||||
hid-usbhid-IBM-BladeCenterHS20-quirk.patch
|
||||
|
||||
usb-storage-unusual_devs-add-id.patch
|
||||
usb-storage-unusual_devs-add-id-2.6.37-buildfix.patch
|
||||
|
||||
# xhci fixes
|
||||
usb-xhci-remove-unused-parameter-xhci-in-function-xhci-handshake.patch
|
||||
usb-xhci-clean-up-work-to-remove-unused-parameters-for-functions-in-xhci-mem.c.patch
|
||||
usb-xhci-fix-isoc-endpoint-dequeue-from-advancing-too-far-on-transaction-error.patch
|
||||
usb-xhci-Solve-full-event-ring-by-increasing-TRBS_PER_SEGMENT-to-256.patch
|
||||
usb-xhci-gracefully-handle-xhci_irq-dead-device.patch
|
||||
|
||||
# uas
|
||||
uas-allow-uas_use_uas_driver-to-return-usb-storage-flags.patch
|
||||
uas-add-us_fl_max_sectors_240-flag.patch
|
||||
uas-set-max_sectors_240-quirk-for-asm1053-devices.patch
|
||||
|
||||
# misc fixes
|
||||
usb-cdc-acm-prevent-infinite-loop-when-parsing-cdc-headers.patch
|
||||
usb-chipidea-otg-remove-mutex-unlock-and-lock-while-stop-and-start-role.patch
|
||||
|
||||
###
|
||||
### V4L
|
||||
###
|
||||
@@ -388,21 +278,6 @@ media-usb-pwc-lie-in-proc-usb-devices.patch
|
||||
# Mageia framebuffer boot logo
|
||||
video-mageia-logo.patch
|
||||
|
||||
# https://qa.mandriva.com/show_bug.cgi?id=59260
|
||||
# https://bugzilla.kernel.org/show_bug.cgi?id=26232
|
||||
# DISABLED: video-fb-avoid-oops-when-fw-fb-is-removed.patch
|
||||
# DISABLED: video-fb-avoid-deadlock-caused-by-fb_set_suspend.patch
|
||||
|
||||
# fbdev oops
|
||||
video-fbdev-fix-possible-null-dereference.patch
|
||||
# fbdev fixes
|
||||
video-fbdev-Add-additional-vesa-modes.patch
|
||||
video-fbdev-Check-Standard-Timing-against-DMT.patch
|
||||
video-fbdev-Validate-mode-timing-against-monspec.patch
|
||||
video-fbdev-Fix-sparse-warning-messages.patch
|
||||
video-fbdev-fix-CVT-vertical-front-and-back-porch-values.patch
|
||||
video-fbdev-fix-sys_copyarea.patch
|
||||
|
||||
###
|
||||
### 3rdparty
|
||||
###
|
||||
@@ -431,6 +306,7 @@ video-fbdev-fix-sys_copyarea.patch
|
||||
3rd-ndiswrapper-Kconfig.patch
|
||||
3rd-ndiswrapper-Makefile-build-fix.patch
|
||||
3rd-ndiswrapper-linux-3.14-buildfix.patch
|
||||
3rd-ndiswrapper-4.0-buildfix.patch
|
||||
|
||||
# rfswitch
|
||||
3rd-rfswitch-1.3.patch
|
||||
@@ -448,7 +324,6 @@ video-fbdev-fix-sys_copyarea.patch
|
||||
3rd-rtl8723bs.patch
|
||||
3rd-rtl8723bs-buildfix.patch
|
||||
3rd-rtl8723bs-updates.patch
|
||||
3rd-rtl8723bs-revert-4.0-changes.patch
|
||||
|
||||
###
|
||||
### Security
|
||||
@@ -470,9 +345,6 @@ video-fbdev-fix-sys_copyarea.patch
|
||||
### IA64
|
||||
###
|
||||
|
||||
# fix broken header generation
|
||||
KVM-ia64-drop-kvm.h-from-installed-user-headers.patch
|
||||
|
||||
###
|
||||
### Tools
|
||||
###
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
From: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>
|
||||
Newsgroups: gmane.linux.kernel,gmane.linux.alsa.devel
|
||||
Subject: [PATCH]Add VT1613 AC97 codec support
|
||||
Date: Fri, 06 Mar 2015 16:59:00 +0100
|
||||
|
||||
Patch to add an VT1613 AC97 codec support.
|
||||
|
||||
This codec has additional DC offset removal control,
|
||||
headphone output and no video input.
|
||||
|
||||
Signed-off-by: Maciej Szmigiero <mail@maciej.szmigiero.name>
|
||||
|
||||
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
|
||||
index 5ee2f17..5bca1a3 100644
|
||||
--- a/sound/pci/ac97/ac97_codec.c
|
||||
+++ b/sound/pci/ac97/ac97_codec.c
|
||||
@@ -177,6 +177,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = {
|
||||
{ 0x54524123, 0xffffffff, "TR28602", NULL, NULL }, // only guess --jk [TR28023 = eMicro EM28023 (new CT1297)]
|
||||
{ 0x54584e03, 0xffffffff, "TLV320AIC27", NULL, NULL },
|
||||
{ 0x54584e20, 0xffffffff, "TLC320AD9xC", NULL, NULL },
|
||||
+{ 0x56494120, 0xfffffff0, "VIA1613", patch_vt1613, NULL },
|
||||
{ 0x56494161, 0xffffffff, "VIA1612A", NULL, NULL }, // modified ICE1232 with S/PDIF
|
||||
{ 0x56494170, 0xffffffff, "VIA1617A", patch_vt1617a, NULL }, // modified VT1616 with S/PDIF
|
||||
{ 0x56494182, 0xffffffff, "VIA1618", patch_vt1618, NULL },
|
||||
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
|
||||
index ceaac1c..eca2210 100644
|
||||
--- a/sound/pci/ac97/ac97_patch.c
|
||||
+++ b/sound/pci/ac97/ac97_patch.c
|
||||
@@ -3352,6 +3352,39 @@ static int patch_cm9780(struct snd_ac97 *ac97)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * VIA VT1613 codec
|
||||
+ */
|
||||
+static const struct snd_kcontrol_new snd_ac97_controls_vt1613[] = {
|
||||
+AC97_SINGLE("DC Offset removal", 0x5a, 10, 1, 0),
|
||||
+};
|
||||
+
|
||||
+static int patch_vt1613_specific(struct snd_ac97 *ac97)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ err = patch_build_controls(ac97, &snd_ac97_controls_vt1613[0],
|
||||
+ ARRAY_SIZE(snd_ac97_controls_vt1613));
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ return 0;
|
||||
+};
|
||||
+
|
||||
+static const struct snd_ac97_build_ops patch_vt1613_ops = {
|
||||
+ .build_specific = patch_vt1613_specific
|
||||
+};
|
||||
+
|
||||
+static int patch_vt1613(struct snd_ac97 *ac97)
|
||||
+{
|
||||
+ ac97->build_ops = &patch_vt1613_ops;
|
||||
+
|
||||
+ ac97->flags |= AC97_HAS_NO_VIDEO;
|
||||
+ ac97->caps |= AC97_BC_HEADPHONE;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* VIA VT1616 codec
|
||||
*/
|
||||
static const struct snd_kcontrol_new snd_ac97_controls_vt1616[] = {
|
||||
|
||||
-65
@@ -1,65 +0,0 @@
|
||||
From 7081adf3f98f4c39dc6758208775b2aa48f51f8a Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Mon, 30 Mar 2015 17:05:37 +0800
|
||||
Subject: ALSA: hda/realtek - Support Dell headset mode for ALC256
|
||||
|
||||
Dell new platform of ALC256 audio codec.
|
||||
Support headset mode for Dell ALC256 platform.
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 7438213..f75c127 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3587,6 +3587,7 @@ static void alc_headset_mode_mic_in(stru
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0255:
|
||||
+ case 0x10ec0256:
|
||||
alc_write_coef_idx(codec, 0x45, 0xc489);
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
@@ -3656,6 +3657,7 @@ static void alc_headset_mode_default(str
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0255:
|
||||
+ case 0x10ec0256:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
case 0x10ec0233:
|
||||
@@ -3764,6 +3766,7 @@ static void alc_headset_mode_omtp(struct
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0255:
|
||||
+ case 0x10ec0256:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
case 0x10ec0233:
|
||||
@@ -3809,6 +3812,7 @@ static void alc_determine_headset_type(s
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0255:
|
||||
+ case 0x10ec0256:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
msleep(300);
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
@@ -5121,6 +5125,16 @@ static const struct snd_hda_pin_quirk al
|
||||
{0x17, 0x40000000},
|
||||
{0x1d, 0x40700001},
|
||||
{0x21, 0x02211050}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ {0x12, 0x90a60140},
|
||||
+ {0x13, 0x40000000},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x19, 0x411111f0},
|
||||
+ {0x1a, 0x411111f0},
|
||||
+ {0x1b, 0x411111f0},
|
||||
+ {0x1d, 0x40700001},
|
||||
+ {0x1e, 0x411111f0},
|
||||
+ {0x21, 0x02211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
|
||||
{0x12, 0x90a60130},
|
||||
{0x13, 0x40000000},
|
||||
-119
@@ -1,119 +0,0 @@
|
||||
From e1e62b98ebddc3234f3259019d3236f66fc667f8 Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 16:01:22 +0800
|
||||
Subject: ALSA: hda/realtek - Support Dell headset mode for ALC288
|
||||
|
||||
Dell create new platform with ALC288 codec.
|
||||
This patch will enable headset mode for Dino platform.
|
||||
|
||||
[slight code refactoring and compile fix by tiwai]
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index ceb599a..7b5c93e 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4089,6 +4089,29 @@ static void alc_fixup_headset_mode_alc25
|
||||
alc_fixup_headset_mode(codec, fix, action);
|
||||
}
|
||||
|
||||
+static void alc288_update_headset_jack_cb(struct hda_codec *codec,
|
||||
+ struct hda_jack_callback *jack)
|
||||
+{
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ int present;
|
||||
+
|
||||
+ alc_update_headset_jack_cb(codec, jack);
|
||||
+ /* Headset Mic enable or disable, only for Dell Dino */
|
||||
+ present = spec->gen.hp_jack_present ? 0x40 : 0;
|
||||
+ snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
|
||||
+ present);
|
||||
+}
|
||||
+
|
||||
+static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
|
||||
+ const struct hda_fixup *fix, int action)
|
||||
+{
|
||||
+ alc_fixup_headset_mode(codec, fix, action);
|
||||
+ if (action == HDA_FIXUP_ACT_PROBE) {
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -4427,6 +4450,9 @@ enum {
|
||||
ALC282_FIXUP_ASPIRE_V5_PINS,
|
||||
ALC280_FIXUP_HP_GPIO4,
|
||||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
+ ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
+ ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@@ -4907,6 +4933,33 @@ static const struct hda_fixup alc269_fix
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc286_fixup_hp_gpio_led,
|
||||
},
|
||||
+ [ALC288_FIXUP_DELL_HEADSET_MODE] = {
|
||||
+ .type = HDA_FIXUP_FUNC,
|
||||
+ .v.func = alc_fixup_headset_mode_dell_alc288,
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
||||
+ .type = HDA_FIXUP_PINS,
|
||||
+ .v.pins = (const struct hda_pintbl[]) {
|
||||
+ { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||
+ { 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL_XPS_13_GPIO6] = {
|
||||
+ .type = HDA_FIXUP_VERBS,
|
||||
+ .v.verbs = (const struct hda_verb[]) {
|
||||
+ {0x01, AC_VERB_SET_GPIO_MASK, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@@ -5131,6 +5184,13 @@ static const struct hda_model_fixup alc2
|
||||
{0x1b, 0x411111f0}, \
|
||||
{0x1e, 0x411111f0}
|
||||
|
||||
+#define ALC288_STANDARD_PINS \
|
||||
+ {0x17, 0x411111f0}, \
|
||||
+ {0x18, 0x411111f0}, \
|
||||
+ {0x19, 0x411111f0}, \
|
||||
+ {0x1a, 0x411111f0}, \
|
||||
+ {0x1e, 0x411111f0}
|
||||
+
|
||||
#define ALC290_STANDARD_PINS \
|
||||
{0x12, 0x99a30130}, \
|
||||
{0x13, 0x40000000}, \
|
||||
@@ -5326,6 +5386,13 @@ static const struct snd_hda_pin_quirk al
|
||||
{0x19, 0x03a11020},
|
||||
{0x1d, 0x40e00001},
|
||||
{0x21, 0x0321101f}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
+ ALC288_STANDARD_PINS,
|
||||
+ {0x12, 0x90a60120},
|
||||
+ {0x13, 0x40000000},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x1d, 0x4076832d},
|
||||
+ {0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x14, 0x411111f0},
|
||||
-178
@@ -1,178 +0,0 @@
|
||||
From f3b703326541d0c1ce85f5e570f6d2b6bd4296ec Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 15:01:17 +0800
|
||||
Subject: ALSA: hda/realtek - Support headset mode for ALC286/288
|
||||
|
||||
Support headset mode for ALC286 and ALC288 platforms.
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 7f46d06..ceb599a 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3542,6 +3542,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x42a3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3573,6 +3581,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3602,6 +3614,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
WRITE_COEF(0x26, 0x008c),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0),
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0x0008),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0x2000),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x19, 0xa208),
|
||||
WRITE_COEF(0x2e, 0xacf0),
|
||||
@@ -3635,6 +3655,13 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
@@ -3670,6 +3697,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3699,6 +3734,11 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3727,6 +3767,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xd429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3754,6 +3801,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3782,6 +3835,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xe429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3809,6 +3869,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3833,6 +3899,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
conteol) */
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0293[] = {
|
||||
UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
|
||||
WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
|
||||
@@ -3861,6 +3931,13 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
is_ctia = (val & 0x0070) == 0x0070;
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ msleep(350);
|
||||
+ val = alc_read_coef_idx(codec, 0x50);
|
||||
+ is_ctia = (val & 0x0070) == 0x0070;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_write_coef_idx(codec, 0x6b, 0xd429);
|
||||
msleep(300);
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,98 +0,0 @@
|
||||
From ee136af4a064c2f61e2025873584d2c7ec93f4ae Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 21 Apr 2015 11:20:31 +0200
|
||||
Subject: uas: Add US_FL_MAX_SECTORS_240 flag
|
||||
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
commit ee136af4a064c2f61e2025873584d2c7ec93f4ae upstream.
|
||||
|
||||
The usb-storage driver sets max_sectors = 240 in its scsi-host template,
|
||||
for uas we do not want to do that for all devices, but testing has shown
|
||||
that some devices need it.
|
||||
|
||||
This commit adds a US_FL_MAX_SECTORS_240 flag for such devices, and
|
||||
implements support for it in uas.c, while at it it also adds support
|
||||
for US_FL_MAX_SECTORS_64 to uas.c.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
Documentation/kernel-parameters.txt | 2 ++
|
||||
drivers/usb/storage/uas.c | 10 +++++++++-
|
||||
drivers/usb/storage/usb.c | 6 +++++-
|
||||
include/linux/usb_usual.h | 2 ++
|
||||
4 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/Documentation/kernel-parameters.txt
|
||||
+++ b/Documentation/kernel-parameters.txt
|
||||
@@ -3746,6 +3746,8 @@ bytes respectively. Such letter suffixes
|
||||
READ_CAPACITY_16 command);
|
||||
f = NO_REPORT_OPCODES (don't use report opcodes
|
||||
command, uas only);
|
||||
+ g = MAX_SECTORS_240 (don't transfer more than
|
||||
+ 240 sectors at a time, uas only);
|
||||
h = CAPACITY_HEURISTICS (decrease the
|
||||
reported device capacity by one
|
||||
sector if the number is odd);
|
||||
--- a/drivers/usb/storage/uas.c
|
||||
+++ b/drivers/usb/storage/uas.c
|
||||
@@ -759,7 +759,10 @@ static int uas_eh_bus_reset_handler(stru
|
||||
|
||||
static int uas_slave_alloc(struct scsi_device *sdev)
|
||||
{
|
||||
- sdev->hostdata = (void *)sdev->host->hostdata;
|
||||
+ struct uas_dev_info *devinfo =
|
||||
+ (struct uas_dev_info *)sdev->host->hostdata;
|
||||
+
|
||||
+ sdev->hostdata = devinfo;
|
||||
|
||||
/* USB has unusual DMA-alignment requirements: Although the
|
||||
* starting address of each scatter-gather element doesn't matter,
|
||||
@@ -778,6 +781,11 @@ static int uas_slave_alloc(struct scsi_d
|
||||
*/
|
||||
blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
|
||||
|
||||
+ if (devinfo->flags & US_FL_MAX_SECTORS_64)
|
||||
+ blk_queue_max_hw_sectors(sdev->request_queue, 64);
|
||||
+ else if (devinfo->flags & US_FL_MAX_SECTORS_240)
|
||||
+ blk_queue_max_hw_sectors(sdev->request_queue, 240);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- a/drivers/usb/storage/usb.c
|
||||
+++ b/drivers/usb/storage/usb.c
|
||||
@@ -479,7 +479,8 @@ void usb_stor_adjust_quirks(struct usb_d
|
||||
US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT |
|
||||
US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
|
||||
US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE |
|
||||
- US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES);
|
||||
+ US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES |
|
||||
+ US_FL_MAX_SECTORS_240);
|
||||
|
||||
p = quirks;
|
||||
while (*p) {
|
||||
@@ -520,6 +521,9 @@ void usb_stor_adjust_quirks(struct usb_d
|
||||
case 'f':
|
||||
f |= US_FL_NO_REPORT_OPCODES;
|
||||
break;
|
||||
+ case 'g':
|
||||
+ f |= US_FL_MAX_SECTORS_240;
|
||||
+ break;
|
||||
case 'h':
|
||||
f |= US_FL_CAPACITY_HEURISTICS;
|
||||
break;
|
||||
--- a/include/linux/usb_usual.h
|
||||
+++ b/include/linux/usb_usual.h
|
||||
@@ -77,6 +77,8 @@
|
||||
/* Cannot handle ATA_12 or ATA_16 CDBs */ \
|
||||
US_FLAG(NO_REPORT_OPCODES, 0x04000000) \
|
||||
/* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \
|
||||
+ US_FLAG(MAX_SECTORS_240, 0x08000000) \
|
||||
+ /* Sets max_sectors to 240 */ \
|
||||
|
||||
#define US_FLAG(name, value) US_FL_##name = value ,
|
||||
enum { US_DO_ALL_FLAGS };
|
||||
-79
@@ -1,79 +0,0 @@
|
||||
From a5011d44f0e1117a6db14b19b57c51f8be5673a0 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 21 Apr 2015 11:20:30 +0200
|
||||
Subject: uas: Allow uas_use_uas_driver to return usb-storage flags
|
||||
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
commit a5011d44f0e1117a6db14b19b57c51f8be5673a0 upstream.
|
||||
|
||||
uas_use_uas_driver may set some US_FL_foo flags during detection, currently
|
||||
these are stored in a local variable and then throw away, but these may be
|
||||
of interest to the caller, so add an extra parameter to (optionally) return
|
||||
the detected flags, and use this in the uas driver.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/usb/storage/uas-detect.h | 6 +++++-
|
||||
drivers/usb/storage/uas.c | 6 +++---
|
||||
drivers/usb/storage/usb.c | 2 +-
|
||||
3 files changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/usb/storage/uas-detect.h
|
||||
+++ b/drivers/usb/storage/uas-detect.h
|
||||
@@ -51,7 +51,8 @@ static int uas_find_endpoints(struct usb
|
||||
}
|
||||
|
||||
static int uas_use_uas_driver(struct usb_interface *intf,
|
||||
- const struct usb_device_id *id)
|
||||
+ const struct usb_device_id *id,
|
||||
+ unsigned long *flags_ret)
|
||||
{
|
||||
struct usb_host_endpoint *eps[4] = { };
|
||||
struct usb_device *udev = interface_to_usbdev(intf);
|
||||
@@ -132,5 +133,8 @@ static int uas_use_uas_driver(struct usb
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ if (flags_ret)
|
||||
+ *flags_ret = flags;
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
--- a/drivers/usb/storage/uas.c
|
||||
+++ b/drivers/usb/storage/uas.c
|
||||
@@ -887,8 +887,9 @@ static int uas_probe(struct usb_interfac
|
||||
struct Scsi_Host *shost = NULL;
|
||||
struct uas_dev_info *devinfo;
|
||||
struct usb_device *udev = interface_to_usbdev(intf);
|
||||
+ unsigned long dev_flags;
|
||||
|
||||
- if (!uas_use_uas_driver(intf, id))
|
||||
+ if (!uas_use_uas_driver(intf, id, &dev_flags))
|
||||
return -ENODEV;
|
||||
|
||||
if (uas_switch_interface(udev, intf))
|
||||
@@ -910,8 +911,7 @@ static int uas_probe(struct usb_interfac
|
||||
devinfo->udev = udev;
|
||||
devinfo->resetting = 0;
|
||||
devinfo->shutdown = 0;
|
||||
- devinfo->flags = id->driver_info;
|
||||
- usb_stor_adjust_quirks(udev, &devinfo->flags);
|
||||
+ devinfo->flags = dev_flags;
|
||||
init_usb_anchor(&devinfo->cmd_urbs);
|
||||
init_usb_anchor(&devinfo->sense_urbs);
|
||||
init_usb_anchor(&devinfo->data_urbs);
|
||||
--- a/drivers/usb/storage/usb.c
|
||||
+++ b/drivers/usb/storage/usb.c
|
||||
@@ -1080,7 +1080,7 @@ static int storage_probe(struct usb_inte
|
||||
|
||||
/* If uas is enabled and this device can do uas then ignore it. */
|
||||
#if IS_ENABLED(CONFIG_USB_UAS)
|
||||
- if (uas_use_uas_driver(intf, id))
|
||||
+ if (uas_use_uas_driver(intf, id, NULL))
|
||||
return -ENXIO;
|
||||
#endif
|
||||
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
From 8e779c6c4a398763c21371fe40f649206041dc1e Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 21 Apr 2015 11:20:32 +0200
|
||||
Subject: uas: Set max_sectors_240 quirk for ASM1053 devices
|
||||
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
commit 8e779c6c4a398763c21371fe40f649206041dc1e upstream.
|
||||
|
||||
Testing has shown that ASM1053 devices do not work properly with transfers
|
||||
larger than 240 sectors, so set max_sectors to 240 on these.
|
||||
|
||||
Reported-by: Steve Bangert <sbangert@frontier.com>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Tested-by: Steve Bangert <sbangert@frontier.com>
|
||||
Acked-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/usb/storage/uas-detect.h | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/usb/storage/uas-detect.h
|
||||
+++ b/drivers/usb/storage/uas-detect.h
|
||||
@@ -74,7 +74,7 @@ static int uas_use_uas_driver(struct usb
|
||||
* this writing the following versions exist:
|
||||
* ASM1051 - no uas support version
|
||||
* ASM1051 - with broken (*) uas support
|
||||
- * ASM1053 - with working uas support
|
||||
+ * ASM1053 - with working uas support, but problems with large xfers
|
||||
* ASM1153 - with working uas support
|
||||
*
|
||||
* Devices with these chips re-use a number of device-ids over the
|
||||
@@ -104,6 +104,9 @@ static int uas_use_uas_driver(struct usb
|
||||
} else if (usb_ss_max_streams(&eps[1]->ss_ep_comp) == 32) {
|
||||
/* Possibly an ASM1051, disable uas */
|
||||
flags |= US_FL_IGNORE_UAS;
|
||||
+ } else {
|
||||
+ /* ASM1053, these have issues with large transfers */
|
||||
+ flags |= US_FL_MAX_SECTORS_240;
|
||||
}
|
||||
}
|
||||
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
From 0d3bba0287d4e284c3ec7d3397e81eec920d5e7e Mon Sep 17 00:00:00 2001
|
||||
From: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
Date: Tue, 14 Apr 2015 11:25:43 +0200
|
||||
Subject: cdc-acm: prevent infinite loop when parsing CDC headers.
|
||||
|
||||
From: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
|
||||
commit 0d3bba0287d4e284c3ec7d3397e81eec920d5e7e upstream.
|
||||
|
||||
Phil and I found out a problem with commit:
|
||||
|
||||
7e860a6e7aa6 ("cdc-acm: add sanity checks")
|
||||
|
||||
It added some sanity checks to ignore potential garbage in CDC headers but
|
||||
also introduced a potential infinite loop. This can happen at the first
|
||||
loop iteration (elength = 0 in that case) if the description isn't a
|
||||
DT_CS_INTERFACE or later if 'buffer[0]' is zero.
|
||||
|
||||
It should also be noted that the wrong length was being added to 'buffer'
|
||||
in case 'buffer[1]' was not a DT_CS_INTERFACE descriptor, since elength was
|
||||
assigned after that check in the loop.
|
||||
|
||||
A specially crafted USB device could be used to trigger this infinite loop.
|
||||
|
||||
Fixes: 7e860a6e7aa6 ("cdc-acm: add sanity checks")
|
||||
Signed-off-by: Phil Turnbull <phil.turnbull@oracle.com>
|
||||
Signed-off-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
CC: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
|
||||
CC: Oliver Neukum <oneukum@suse.de>
|
||||
CC: Adam Lee <adam8157@gmail.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/usb/class/cdc-acm.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/usb/class/cdc-acm.c
|
||||
+++ b/drivers/usb/class/cdc-acm.c
|
||||
@@ -1133,11 +1133,16 @@ static int acm_probe(struct usb_interfac
|
||||
}
|
||||
|
||||
while (buflen > 0) {
|
||||
+ elength = buffer[0];
|
||||
+ if (!elength) {
|
||||
+ dev_err(&intf->dev, "skipping garbage byte\n");
|
||||
+ elength = 1;
|
||||
+ goto next_desc;
|
||||
+ }
|
||||
if (buffer[1] != USB_DT_CS_INTERFACE) {
|
||||
dev_err(&intf->dev, "skipping garbage\n");
|
||||
goto next_desc;
|
||||
}
|
||||
- elength = buffer[0];
|
||||
|
||||
switch (buffer[2]) {
|
||||
case USB_CDC_UNION_TYPE: /* we've found it */
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
From a5a356cee89f86ff86cc3ce24136ca1f802c1bf1 Mon Sep 17 00:00:00 2001
|
||||
From: Li Jun <jun.li@freescale.com>
|
||||
Date: Sun, 12 Apr 2015 17:51:02 +0800
|
||||
Subject: usb: chipidea: otg: remove mutex unlock and lock while stop and start role
|
||||
|
||||
From: Li Jun <jun.li@freescale.com>
|
||||
|
||||
commit a5a356cee89f86ff86cc3ce24136ca1f802c1bf1 upstream.
|
||||
|
||||
Wrongly release mutex lock during otg_statemachine may result in re-enter
|
||||
otg_statemachine, which is not allowed, we should do next state transtition
|
||||
after previous one completed.
|
||||
|
||||
Fixes: 826cfe751f3e ("usb: chipidea: add OTG fsm operation functions implementation")
|
||||
Signed-off-by: Li Jun <jun.li@freescale.com>
|
||||
Signed-off-by: Peter Chen <peter.chen@freescale.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/usb/chipidea/otg_fsm.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
--- a/drivers/usb/chipidea/otg_fsm.c
|
||||
+++ b/drivers/usb/chipidea/otg_fsm.c
|
||||
@@ -537,7 +537,6 @@ static int ci_otg_start_host(struct otg_
|
||||
{
|
||||
struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm);
|
||||
|
||||
- mutex_unlock(&fsm->lock);
|
||||
if (on) {
|
||||
ci_role_stop(ci);
|
||||
ci_role_start(ci, CI_ROLE_HOST);
|
||||
@@ -546,7 +545,6 @@ static int ci_otg_start_host(struct otg_
|
||||
hw_device_reset(ci);
|
||||
ci_role_start(ci, CI_ROLE_GADGET);
|
||||
}
|
||||
- mutex_lock(&fsm->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -554,12 +552,10 @@ static int ci_otg_start_gadget(struct ot
|
||||
{
|
||||
struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm);
|
||||
|
||||
- mutex_unlock(&fsm->lock);
|
||||
if (on)
|
||||
usb_gadget_vbus_connect(&ci->gadget);
|
||||
else
|
||||
usb_gadget_vbus_disconnect(&ci->gadget);
|
||||
- mutex_lock(&fsm->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
From 18cc2f4cbbaf825a4fedcf2d60fd388d291e0a38 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Date: Thu, 30 Apr 2015 17:16:03 +0300
|
||||
Subject: xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256
|
||||
|
||||
Our event ring consists of only one segment, and we risk filling
|
||||
the event ring in case we get isoc transfers with short intervals
|
||||
such as webcams that fill a TD every microframe (125us)
|
||||
|
||||
With 64 TRB segment size one usb camera could fill the event ring in 8ms.
|
||||
A setup with several cameras and other devices can fill up the
|
||||
event ring as it is shared between all devices.
|
||||
This has occurred when uvcvideo queues 5 * 32TD URBs which then
|
||||
get cancelled when the video mode changes. The cancelled URBs are returned
|
||||
in the xhci interrupt context and blocks the interrupt handler from
|
||||
handling the new events.
|
||||
|
||||
A full event ring will block xhci from scheduling traffic and affect all
|
||||
devices conneted to the xhci, will see errors such as Missed Service
|
||||
Intervals for isoc devices, and and Split transaction errors for LS/FS
|
||||
interrupt devices.
|
||||
|
||||
Increasing the TRB_PER_SEGMENT will also increase the default endpoint ring
|
||||
size, which is welcome as for most isoc transfer we had to dynamically
|
||||
expand the endpoint ring anyway to be able to queue the 5 * 32TDs uvcvideo
|
||||
queues.
|
||||
|
||||
The default size used to be 64 TRBs per segment
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
|
||||
index 8e421b8..ea75e8c 100644
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1267,7 +1267,7 @@ union xhci_trb {
|
||||
* since the command ring is 64-byte aligned.
|
||||
* It must also be greater than 16.
|
||||
*/
|
||||
-#define TRBS_PER_SEGMENT 64
|
||||
+#define TRBS_PER_SEGMENT 256
|
||||
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
||||
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
||||
#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-339
@@ -1,339 +0,0 @@
|
||||
From 4daf9df51fbfb03b8c2bcb538cb467f7c7af1f11 Mon Sep 17 00:00:00 2001
|
||||
From: Lin Wang <lin.x.wang@intel.com>
|
||||
Date: Fri, 9 Jan 2015 16:06:31 +0200
|
||||
Subject: xhci: clean up work to remove unused parameters for functions in
|
||||
xhci-mem.c
|
||||
|
||||
Some parameters are not used by functions in xhci-mem.c, just
|
||||
remove it.
|
||||
|
||||
Changes compared to v1:
|
||||
- Rebase to the latest usb-next branch
|
||||
|
||||
Signed-off-by: Lin Wang <lin.x.wang@intel.com>
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c
|
||||
index bb89175..745717e 100644
|
||||
--- a/drivers/usb/host/xhci-dbg.c
|
||||
+++ b/drivers/usb/host/xhci-dbg.c
|
||||
@@ -552,7 +552,7 @@ void xhci_dbg_ctx(struct xhci_hcd *xhci,
|
||||
|
||||
if (ctx->type == XHCI_CTX_TYPE_INPUT) {
|
||||
struct xhci_input_control_ctx *ctrl_ctx =
|
||||
- xhci_get_input_control_ctx(xhci, ctx);
|
||||
+ xhci_get_input_control_ctx(ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "Could not get input context, bad type.\n");
|
||||
return;
|
||||
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
|
||||
index e72265c..f833640 100644
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -535,7 +535,7 @@ static void xhci_free_container_ctx(struct xhci_hcd *xhci,
|
||||
kfree(ctx);
|
||||
}
|
||||
|
||||
-struct xhci_input_control_ctx *xhci_get_input_control_ctx(struct xhci_hcd *xhci,
|
||||
+struct xhci_input_control_ctx *xhci_get_input_control_ctx(
|
||||
struct xhci_container_ctx *ctx)
|
||||
{
|
||||
if (ctx->type != XHCI_CTX_TYPE_INPUT)
|
||||
@@ -784,8 +784,7 @@ void xhci_setup_streams_ep_input_ctx(struct xhci_hcd *xhci,
|
||||
* Reinstalls the "normal" endpoint ring (at its previous dequeue mark,
|
||||
* not at the beginning of the ring).
|
||||
*/
|
||||
-void xhci_setup_no_streams_ep_input_ctx(struct xhci_hcd *xhci,
|
||||
- struct xhci_ep_ctx *ep_ctx,
|
||||
+void xhci_setup_no_streams_ep_input_ctx(struct xhci_ep_ctx *ep_ctx,
|
||||
struct xhci_virt_ep *ep)
|
||||
{
|
||||
dma_addr_t addr;
|
||||
@@ -1341,8 +1340,7 @@ static u32 xhci_get_endpoint_mult(struct usb_device *udev,
|
||||
return ep->ss_ep_comp.bmAttributes;
|
||||
}
|
||||
|
||||
-static u32 xhci_get_endpoint_type(struct usb_device *udev,
|
||||
- struct usb_host_endpoint *ep)
|
||||
+static u32 xhci_get_endpoint_type(struct usb_host_endpoint *ep)
|
||||
{
|
||||
int in;
|
||||
u32 type;
|
||||
@@ -1375,8 +1373,7 @@ static u32 xhci_get_endpoint_type(struct usb_device *udev,
|
||||
* Basically, this is the maxpacket size, multiplied by the burst size
|
||||
* and mult size.
|
||||
*/
|
||||
-static u32 xhci_get_max_esit_payload(struct xhci_hcd *xhci,
|
||||
- struct usb_device *udev,
|
||||
+static u32 xhci_get_max_esit_payload(struct usb_device *udev,
|
||||
struct usb_host_endpoint *ep)
|
||||
{
|
||||
int max_burst;
|
||||
@@ -1417,7 +1414,7 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
||||
ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
|
||||
|
||||
- endpoint_type = xhci_get_endpoint_type(udev, ep);
|
||||
+ endpoint_type = xhci_get_endpoint_type(ep);
|
||||
if (!endpoint_type)
|
||||
return -EINVAL;
|
||||
ep_ctx->ep_info2 = cpu_to_le32(endpoint_type);
|
||||
@@ -1483,7 +1480,7 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
||||
}
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet) |
|
||||
MAX_BURST(max_burst));
|
||||
- max_esit_payload = xhci_get_max_esit_payload(xhci, udev, ep);
|
||||
+ max_esit_payload = xhci_get_max_esit_payload(udev, ep);
|
||||
ep_ctx->tx_info = cpu_to_le32(MAX_ESIT_PAYLOAD_FOR_EP(max_esit_payload));
|
||||
|
||||
/*
|
||||
@@ -1772,7 +1769,7 @@ struct xhci_command *xhci_alloc_command(struct xhci_hcd *xhci,
|
||||
return command;
|
||||
}
|
||||
|
||||
-void xhci_urb_free_priv(struct xhci_hcd *xhci, struct urb_priv *urb_priv)
|
||||
+void xhci_urb_free_priv(struct urb_priv *urb_priv)
|
||||
{
|
||||
if (urb_priv) {
|
||||
kfree(urb_priv->td[0]);
|
||||
@@ -1925,7 +1922,7 @@ static int xhci_test_trb_in_td(struct xhci_hcd *xhci,
|
||||
}
|
||||
|
||||
/* TRB math checks for xhci_trb_in_td(), using the command and event rings. */
|
||||
-static int xhci_check_trb_in_td_math(struct xhci_hcd *xhci, gfp_t mem_flags)
|
||||
+static int xhci_check_trb_in_td_math(struct xhci_hcd *xhci)
|
||||
{
|
||||
struct {
|
||||
dma_addr_t input_dma;
|
||||
@@ -2451,7 +2448,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
|
||||
flags);
|
||||
if (!xhci->event_ring)
|
||||
goto fail;
|
||||
- if (xhci_check_trb_in_td_math(xhci, flags) < 0)
|
||||
+ if (xhci_check_trb_in_td_math(xhci) < 0)
|
||||
goto fail;
|
||||
|
||||
xhci->erst.entries = dma_alloc_coherent(dev,
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index c84a959..067f18a 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -609,7 +609,7 @@ static void xhci_giveback_urb_in_irq(struct xhci_hcd *xhci,
|
||||
|
||||
spin_unlock(&xhci->lock);
|
||||
usb_hcd_giveback_urb(hcd, urb, status);
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
+ xhci_urb_free_priv(urb_priv);
|
||||
spin_lock(&xhci->lock);
|
||||
}
|
||||
}
|
||||
@@ -1110,7 +1110,7 @@ static void xhci_handle_cmd_config_ep(struct xhci_hcd *xhci, int slot_id,
|
||||
* is not waiting on the configure endpoint command.
|
||||
*/
|
||||
virt_dev = xhci->devs[slot_id];
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, virt_dev->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(virt_dev->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "Could not get input context, bad type.\n");
|
||||
return;
|
||||
@@ -2497,7 +2497,7 @@ cleanup:
|
||||
urb = td->urb;
|
||||
urb_priv = urb->hcpriv;
|
||||
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
+ xhci_urb_free_priv(urb_priv);
|
||||
|
||||
usb_hcd_unlink_urb_from_ep(bus_to_hcd(urb->dev->bus), urb);
|
||||
if ((urb->actual_length != urb->transfer_buffer_length &&
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index 1e3f39c..e282765 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1275,7 +1275,7 @@ static int xhci_check_maxpacket(struct x
|
||||
return -ENOMEM;
|
||||
|
||||
command->in_ctx = xhci->devs[slot_id]->in_ctx;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(command->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -1373,7 +1373,7 @@ int xhci_urb_enqueue(struct usb_hcd *hcd
|
||||
ret = xhci_check_maxpacket(xhci, slot_id,
|
||||
ep_index, urb);
|
||||
if (ret < 0) {
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
+ xhci_urb_free_priv(urb_priv);
|
||||
urb->hcpriv = NULL;
|
||||
return ret;
|
||||
}
|
||||
@@ -1439,7 +1439,7 @@ dying:
|
||||
urb->ep->desc.bEndpointAddress, urb);
|
||||
ret = -ESHUTDOWN;
|
||||
free_priv:
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
+ xhci_urb_free_priv(urb_priv);
|
||||
urb->hcpriv = NULL;
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
return ret;
|
||||
@@ -1552,7 +1552,7 @@ int xhci_urb_dequeue(struct usb_hcd *hcd
|
||||
usb_hcd_unlink_urb_from_ep(hcd, urb);
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
usb_hcd_giveback_urb(hcd, urb, -ESHUTDOWN);
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
+ xhci_urb_free_priv(urb_priv);
|
||||
return ret;
|
||||
}
|
||||
if ((xhci->xhc_state & XHCI_STATE_DYING) ||
|
||||
@@ -1659,7 +1659,7 @@ int xhci_drop_endpoint(struct usb_hcd *h
|
||||
|
||||
in_ctx = xhci->devs[udev->slot_id]->in_ctx;
|
||||
out_ctx = xhci->devs[udev->slot_id]->out_ctx;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -1745,7 +1745,7 @@ int xhci_add_endpoint(struct usb_hcd *hc
|
||||
virt_dev = xhci->devs[udev->slot_id];
|
||||
in_ctx = virt_dev->in_ctx;
|
||||
out_ctx = virt_dev->out_ctx;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -1815,7 +1815,7 @@ static void xhci_zero_in_ctx(struct xhci
|
||||
struct xhci_slot_ctx *slot_ctx;
|
||||
int i;
|
||||
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, virt_dev->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(virt_dev->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -2541,7 +2541,7 @@ static int xhci_reserve_bandwidth(struct
|
||||
if (virt_dev->tt_info)
|
||||
old_active_eps = virt_dev->tt_info->active_eps;
|
||||
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -2638,7 +2638,7 @@ static int xhci_configure_endpoint(struc
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
virt_dev = xhci->devs[udev->slot_id];
|
||||
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(command->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
@@ -2757,7 +2757,7 @@ int xhci_check_bandwidth(struct usb_hcd
|
||||
command->in_ctx = virt_dev->in_ctx;
|
||||
|
||||
/* See section 4.6.6 - A0 = 1; A1 = D0 = D1 = 0 */
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(command->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -2882,7 +2882,7 @@ static void xhci_setup_input_ctx_for_qui
|
||||
dma_addr_t addr;
|
||||
|
||||
in_ctx = xhci->devs[slot_id]->in_ctx;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -3172,7 +3172,7 @@ int xhci_alloc_streams(struct usb_hcd *h
|
||||
xhci_dbg(xhci, "Could not allocate xHCI command structure.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, config_cmd->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(config_cmd->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -3327,7 +3327,7 @@ int xhci_free_streams(struct usb_hcd *hc
|
||||
*/
|
||||
ep_index = xhci_get_endpoint_index(&eps[0]->desc);
|
||||
command = vdev->eps[ep_index].stream_info->free_streams_command;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(command->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
@@ -3345,7 +3345,7 @@ int xhci_free_streams(struct usb_hcd *hc
|
||||
|
||||
xhci_endpoint_copy(xhci, command->in_ctx,
|
||||
vdev->out_ctx, ep_index);
|
||||
- xhci_setup_no_streams_ep_input_ctx(xhci, ep_ctx,
|
||||
+ xhci_setup_no_streams_ep_input_ctx(ep_ctx,
|
||||
&vdev->eps[ep_index]);
|
||||
}
|
||||
xhci_setup_input_ctx_for_config_ep(xhci, command->in_ctx,
|
||||
@@ -3819,7 +3819,7 @@ static int xhci_setup_device(struct usb_
|
||||
command->completion = &xhci->addr_dev;
|
||||
|
||||
slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->in_ctx);
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, virt_dev->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(virt_dev->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
@@ -4002,7 +4002,7 @@ static int __maybe_unused xhci_change_ma
|
||||
|
||||
/* Attempt to issue an Evaluate Context command to change the MEL. */
|
||||
command = xhci->lpm_command;
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(command->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
@@ -4740,7 +4740,7 @@ int xhci_update_hub_device(struct usb_hc
|
||||
xhci_dbg(xhci, "Could not allocate xHCI command structure.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
- ctrl_ctx = xhci_get_input_control_ctx(xhci, config_cmd->in_ctx);
|
||||
+ ctrl_ctx = xhci_get_input_control_ctx(config_cmd->in_ctx);
|
||||
if (!ctrl_ctx) {
|
||||
xhci_warn(xhci, "%s: Could not get input context, bad type.\n",
|
||||
__func__);
|
||||
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
|
||||
index eeea5c0..e23f31d 100644
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1712,8 +1712,7 @@ void xhci_free_stream_info(struct xhci_hcd *xhci,
|
||||
void xhci_setup_streams_ep_input_ctx(struct xhci_hcd *xhci,
|
||||
struct xhci_ep_ctx *ep_ctx,
|
||||
struct xhci_stream_info *stream_info);
|
||||
-void xhci_setup_no_streams_ep_input_ctx(struct xhci_hcd *xhci,
|
||||
- struct xhci_ep_ctx *ep_ctx,
|
||||
+void xhci_setup_no_streams_ep_input_ctx(struct xhci_ep_ctx *ep_ctx,
|
||||
struct xhci_virt_ep *ep);
|
||||
void xhci_free_device_endpoint_resources(struct xhci_hcd *xhci,
|
||||
struct xhci_virt_device *virt_dev, bool drop_control_ep);
|
||||
@@ -1727,7 +1726,7 @@ struct xhci_ring *xhci_stream_id_to_ring(
|
||||
struct xhci_command *xhci_alloc_command(struct xhci_hcd *xhci,
|
||||
bool allocate_in_ctx, bool allocate_completion,
|
||||
gfp_t mem_flags);
|
||||
-void xhci_urb_free_priv(struct xhci_hcd *xhci, struct urb_priv *urb_priv);
|
||||
+void xhci_urb_free_priv(struct urb_priv *urb_priv);
|
||||
void xhci_free_command(struct xhci_hcd *xhci,
|
||||
struct xhci_command *command);
|
||||
|
||||
@@ -1863,7 +1862,7 @@ int xhci_find_slot_id_by_port(struct usb_hcd *hcd, struct xhci_hcd *xhci,
|
||||
void xhci_ring_device(struct xhci_hcd *xhci, int slot_id);
|
||||
|
||||
/* xHCI contexts */
|
||||
-struct xhci_input_control_ctx *xhci_get_input_control_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx);
|
||||
+struct xhci_input_control_ctx *xhci_get_input_control_ctx(struct xhci_container_ctx *ctx);
|
||||
struct xhci_slot_ctx *xhci_get_slot_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx);
|
||||
struct xhci_ep_ctx *xhci_get_ep_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx, unsigned int ep_index);
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
From d104d0152a97fade389f47635b73a9ccc7295d0b Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Date: Thu, 30 Apr 2015 17:16:02 +0300
|
||||
Subject: xhci: fix isoc endpoint dequeue from advancing too far on transaction
|
||||
error
|
||||
|
||||
Isoc TDs usually consist of one TRB, sometimes two. When all goes well we
|
||||
receive only one success event for a TD, and move the dequeue pointer to
|
||||
the next TD.
|
||||
|
||||
This fails if the TD consists of two TRBs and we get a transfer error
|
||||
on the first TRB, we will then see two events for that TD.
|
||||
|
||||
Fix this by making sure the event we get is for the last TRB in that TD
|
||||
before moving the dequeue pointer to the next TD. This will resolve some
|
||||
of the uvc and dvb issues with the
|
||||
"ERROR Transfer event TRB DMA ptr not part of current TD" error message
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index f5397a5..ae0894c 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -2026,8 +2026,13 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
|
||||
break;
|
||||
case COMP_DEV_ERR:
|
||||
case COMP_STALL:
|
||||
+ frame->status = -EPROTO;
|
||||
+ skip_td = true;
|
||||
+ break;
|
||||
case COMP_TX_ERR:
|
||||
frame->status = -EPROTO;
|
||||
+ if (event_trb != td->last_trb)
|
||||
+ return 0;
|
||||
skip_td = true;
|
||||
break;
|
||||
case COMP_STOP:
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
From 948fa13504f80b9765d2b753691ab94c83a10341 Mon Sep 17 00:00:00 2001
|
||||
From: Joe Lawrence <joe.lawrence@stratus.com>
|
||||
Date: Thu, 30 Apr 2015 17:16:04 +0300
|
||||
Subject: xhci: gracefully handle xhci_irq dead device
|
||||
|
||||
If the xHCI host controller has died (ie, device removed) or suffered
|
||||
other serious fatal error (STS_FATAL), then xhci_irq should handle this
|
||||
condition with IRQ_HANDLED instead of -ESHUTDOWN.
|
||||
|
||||
Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index ae0894c..7d34cbf 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -2645,7 +2645,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
|
||||
xhci_halt(xhci);
|
||||
hw_died:
|
||||
spin_unlock(&xhci->lock);
|
||||
- return -ESHUTDOWN;
|
||||
+ return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-128
@@ -1,128 +0,0 @@
|
||||
From dc0b177cf8be1e7371cfb92cfbccac595bf8dac8 Mon Sep 17 00:00:00 2001
|
||||
From: Lin Wang <lin.x.wang@intel.com>
|
||||
Date: Fri, 9 Jan 2015 16:06:28 +0200
|
||||
Subject: xhci: remove unused parameter 'xhci' in function xhci_handshake().
|
||||
|
||||
Parameter 'xhci' is no longer be used in function xhci_handshake(),
|
||||
just remove it.
|
||||
|
||||
Signed-off-by: Lin Wang <lin.x.wang@intel.com>
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index e692e76..c84a959 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -299,7 +299,7 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
|
||||
* seconds), then it should assume that the there are
|
||||
* larger problems with the xHC and assert HCRST.
|
||||
*/
|
||||
- ret = xhci_handshake(xhci, &xhci->op_regs->cmd_ring,
|
||||
+ ret = xhci_handshake(&xhci->op_regs->cmd_ring,
|
||||
CMD_RING_RUNNING, 0, 5 * 1000 * 1000);
|
||||
if (ret < 0) {
|
||||
xhci_err(xhci, "Stopped the command ring failed, "
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index 93200db..5ec74e2 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -60,8 +60,7 @@ MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
|
||||
* handshake done). There are two failure modes: "usec" have passed (major
|
||||
* hardware flakeout), or the register reads as all-ones (hardware removed).
|
||||
*/
|
||||
-int xhci_handshake(struct xhci_hcd *xhci, void __iomem *ptr,
|
||||
- u32 mask, u32 done, int usec)
|
||||
+int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec)
|
||||
{
|
||||
u32 result;
|
||||
|
||||
@@ -111,7 +110,7 @@ int xhci_halt(struct xhci_hcd *xhci)
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_init, "// Halt the HC");
|
||||
xhci_quiesce(xhci);
|
||||
|
||||
- ret = xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ ret = xhci_handshake(&xhci->op_regs->status,
|
||||
STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC);
|
||||
if (!ret) {
|
||||
xhci->xhc_state |= XHCI_STATE_HALTED;
|
||||
@@ -140,7 +139,7 @@ static int xhci_start(struct xhci_hcd *xhci)
|
||||
* Wait for the HCHalted Status bit to be 0 to indicate the host is
|
||||
* running.
|
||||
*/
|
||||
- ret = xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ ret = xhci_handshake(&xhci->op_regs->status,
|
||||
STS_HALT, 0, XHCI_MAX_HALT_USEC);
|
||||
if (ret == -ETIMEDOUT)
|
||||
xhci_err(xhci, "Host took too long to start, "
|
||||
@@ -175,7 +174,7 @@ int xhci_reset(struct xhci_hcd *xhci)
|
||||
command |= CMD_RESET;
|
||||
writel(command, &xhci->op_regs->command);
|
||||
|
||||
- ret = xhci_handshake(xhci, &xhci->op_regs->command,
|
||||
+ ret = xhci_handshake(&xhci->op_regs->command,
|
||||
CMD_RESET, 0, 10 * 1000 * 1000);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -186,7 +185,7 @@ int xhci_reset(struct xhci_hcd *xhci)
|
||||
* xHCI cannot write to any doorbells or operational registers other
|
||||
* than status until the "Controller Not Ready" flag is cleared.
|
||||
*/
|
||||
- ret = xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ ret = xhci_handshake(&xhci->op_regs->status,
|
||||
STS_CNR, 0, 10 * 1000 * 1000);
|
||||
|
||||
for (i = 0; i < 2; ++i) {
|
||||
@@ -929,7 +928,7 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
|
||||
/* Some chips from Fresco Logic need an extraordinary delay */
|
||||
delay *= (xhci->quirks & XHCI_SLOW_SUSPEND) ? 10 : 1;
|
||||
|
||||
- if (xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ if (xhci_handshake(&xhci->op_regs->status,
|
||||
STS_HALT, STS_HALT, delay)) {
|
||||
xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");
|
||||
spin_unlock_irq(&xhci->lock);
|
||||
@@ -944,7 +943,7 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
|
||||
command = readl(&xhci->op_regs->command);
|
||||
command |= CMD_CSS;
|
||||
writel(command, &xhci->op_regs->command);
|
||||
- if (xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ if (xhci_handshake(&xhci->op_regs->status,
|
||||
STS_SAVE, 0, 10 * 1000)) {
|
||||
xhci_warn(xhci, "WARN: xHC save state timeout\n");
|
||||
spin_unlock_irq(&xhci->lock);
|
||||
@@ -1011,7 +1010,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
|
||||
command = readl(&xhci->op_regs->command);
|
||||
command |= CMD_CRS;
|
||||
writel(command, &xhci->op_regs->command);
|
||||
- if (xhci_handshake(xhci, &xhci->op_regs->status,
|
||||
+ if (xhci_handshake(&xhci->op_regs->status,
|
||||
STS_RESTORE, 0, 10 * 1000)) {
|
||||
xhci_warn(xhci, "WARN: xHC restore state timeout\n");
|
||||
spin_unlock_irq(&xhci->lock);
|
||||
@@ -1082,7 +1081,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
|
||||
command = readl(&xhci->op_regs->command);
|
||||
command |= CMD_RUN;
|
||||
writel(command, &xhci->op_regs->command);
|
||||
- xhci_handshake(xhci, &xhci->op_regs->status, STS_HALT,
|
||||
+ xhci_handshake(&xhci->op_regs->status, STS_HALT,
|
||||
0, 250 * 1000);
|
||||
|
||||
/* step 5: walk topology and initialize portsc,
|
||||
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
|
||||
index cc7c5bb..eeea5c0 100644
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1733,8 +1733,7 @@ void xhci_free_command(struct xhci_hcd *xhci,
|
||||
|
||||
/* xHCI host controller glue */
|
||||
typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
|
||||
-int xhci_handshake(struct xhci_hcd *xhci, void __iomem *ptr,
|
||||
- u32 mask, u32 done, int usec);
|
||||
+int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec);
|
||||
void xhci_quiesce(struct xhci_hcd *xhci);
|
||||
int xhci_halt(struct xhci_hcd *xhci);
|
||||
int xhci_reset(struct xhci_hcd *xhci);
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
From 37715f556a0776356300391f8ac41ace91bea447 Mon Sep 17 00:00:00 2001
|
||||
From: David Ung <davidu@nvidia.com>
|
||||
Date: Tue, 13 Jan 2015 19:04:00 -0800
|
||||
Subject: [PATCH 1/4] video: fbdev: Add additional vesa modes
|
||||
|
||||
Add high resolution modes to vesa_modes struct.
|
||||
|
||||
Signed-off-by: David Ung <davidu@nvidia.com>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/modedb.c | 27 +++++++++++++++++++++++++++
|
||||
include/linux/fb.h | 2 +-
|
||||
2 files changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
|
||||
index 388f797..0b57c1df 100644
|
||||
--- a/drivers/video/fbdev/core/modedb.c
|
||||
+++ b/drivers/video/fbdev/core/modedb.c
|
||||
@@ -468,6 +468,33 @@ const struct fb_videomode vesa_modes[] = {
|
||||
/* 33 1920x1440-75 VESA */
|
||||
{ NULL, 75, 1920, 1440, 3367, 352, 144, 56, 1, 224, 3,
|
||||
FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 34 1920x1200-60 RB VESA */
|
||||
+ { NULL, 60, 1920, 1200, 6493, 80, 48, 26, 3, 32, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 35 1920x1200-60 VESA */
|
||||
+ { NULL, 60, 1920, 1200, 5174, 336, 136, 36, 3, 200, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 36 1920x1200-75 VESA */
|
||||
+ { NULL, 75, 1920, 1200, 4077, 344, 136, 46, 3, 208, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 37 1920x1200-85 VESA */
|
||||
+ { NULL, 85, 1920, 1200, 3555, 352, 144, 53, 3, 208, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 38 2560x1600-60 RB VESA */
|
||||
+ { NULL, 60, 2560, 1600, 3724, 80, 48, 37, 3, 32, 6,
|
||||
+ FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 39 2560x1600-60 VESA */
|
||||
+ { NULL, 60, 2560, 1600, 2869, 472, 192, 49, 3, 280, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 40 2560x1600-75 VESA */
|
||||
+ { NULL, 75, 2560, 1600, 2256, 488, 208, 63, 3, 280, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 41 2560x1600-85 VESA */
|
||||
+ { NULL, 85, 2560, 1600, 1979, 488, 208, 73, 3, 280, 6,
|
||||
+ FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
+ /* 42 2560x1600-120 RB VESA */
|
||||
+ { NULL, 120, 2560, 1600, 1809, 80, 48, 85, 3, 32, 6,
|
||||
+ FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
};
|
||||
EXPORT_SYMBOL(vesa_modes);
|
||||
#endif /* CONFIG_FB_MODE_HELPERS */
|
||||
diff --git a/include/linux/fb.h b/include/linux/fb.h
|
||||
index 09bb7a1..882dbd1 100644
|
||||
--- a/include/linux/fb.h
|
||||
+++ b/include/linux/fb.h
|
||||
@@ -726,7 +726,7 @@ extern int fb_videomode_from_videomode(const struct videomode *vm,
|
||||
struct fb_videomode *fbmode);
|
||||
|
||||
/* drivers/video/modedb.c */
|
||||
-#define VESA_MODEDB_SIZE 34
|
||||
+#define VESA_MODEDB_SIZE 43
|
||||
extern void fb_var_to_videomode(struct fb_videomode *mode,
|
||||
const struct fb_var_screeninfo *var);
|
||||
extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-239
@@ -1,239 +0,0 @@
|
||||
From 8f5ee77bb8d162abe28ff8cd56f36e825d143207 Mon Sep 17 00:00:00 2001
|
||||
From: David Ung <davidu@nvidia.com>
|
||||
Date: Tue, 13 Jan 2015 19:04:01 -0800
|
||||
Subject: [PATCH 2/4] video: fbdev: Check Standard Timing against DMT
|
||||
|
||||
Add the VESA Display Monitor Timing (DMT) table.
|
||||
During parsing of Standard Timings, it compare the 2 byte STD code
|
||||
with DMT to see what the VESA mode should be. If there is no entry
|
||||
in the vesa_modes table or no match found, it fallsback to the
|
||||
GTF timings.
|
||||
|
||||
Signed-off-by: David Ung <davidu@nvidia.com>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/fbmon.c | 76 +++++++++++++++++++----------------
|
||||
drivers/video/fbdev/core/modedb.c | 84 +++++++++++++++++++++++++++++++++++++++
|
||||
include/linux/fb.h | 10 +++++
|
||||
3 files changed, 136 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
|
||||
index 5b0e313..0f234c1 100644
|
||||
--- a/drivers/video/fbdev/core/fbmon.c
|
||||
+++ b/drivers/video/fbdev/core/fbmon.c
|
||||
@@ -498,44 +498,52 @@ static int get_est_timing(unsigned char *block, struct fb_videomode *mode)
|
||||
static int get_std_timing(unsigned char *block, struct fb_videomode *mode,
|
||||
int ver, int rev)
|
||||
{
|
||||
- int xres, yres = 0, refresh, ratio, i;
|
||||
-
|
||||
- xres = (block[0] + 31) * 8;
|
||||
- if (xres <= 256)
|
||||
- return 0;
|
||||
+ int i;
|
||||
|
||||
- ratio = (block[1] & 0xc0) >> 6;
|
||||
- switch (ratio) {
|
||||
- case 0:
|
||||
- /* in EDID 1.3 the meaning of 0 changed to 16:10 (prior 1:1) */
|
||||
- if (ver < 1 || (ver == 1 && rev < 3))
|
||||
- yres = xres;
|
||||
- else
|
||||
- yres = (xres * 10)/16;
|
||||
- break;
|
||||
- case 1:
|
||||
- yres = (xres * 3)/4;
|
||||
- break;
|
||||
- case 2:
|
||||
- yres = (xres * 4)/5;
|
||||
- break;
|
||||
- case 3:
|
||||
- yres = (xres * 9)/16;
|
||||
- break;
|
||||
+ for (i = 0; i < DMT_SIZE; i++) {
|
||||
+ u32 std_2byte_code = block[0] << 8 | block[1];
|
||||
+ if (std_2byte_code == dmt_modes[i].std_2byte_code)
|
||||
+ break;
|
||||
}
|
||||
- refresh = (block[1] & 0x3f) + 60;
|
||||
-
|
||||
- DPRINTK(" %dx%d@%dHz\n", xres, yres, refresh);
|
||||
- for (i = 0; i < VESA_MODEDB_SIZE; i++) {
|
||||
- if (vesa_modes[i].xres == xres &&
|
||||
- vesa_modes[i].yres == yres &&
|
||||
- vesa_modes[i].refresh == refresh) {
|
||||
- *mode = vesa_modes[i];
|
||||
- mode->flag |= FB_MODE_IS_STANDARD;
|
||||
- return 1;
|
||||
+
|
||||
+ if (i < DMT_SIZE && dmt_modes[i].mode) {
|
||||
+ /* DMT mode found */
|
||||
+ *mode = *dmt_modes[i].mode;
|
||||
+ mode->flag |= FB_MODE_IS_STANDARD;
|
||||
+ DPRINTK(" DMT id=%d\n", dmt_modes[i].dmt_id);
|
||||
+
|
||||
+ } else {
|
||||
+ int xres, yres = 0, refresh, ratio;
|
||||
+
|
||||
+ xres = (block[0] + 31) * 8;
|
||||
+ if (xres <= 256)
|
||||
+ return 0;
|
||||
+
|
||||
+ ratio = (block[1] & 0xc0) >> 6;
|
||||
+ switch (ratio) {
|
||||
+ case 0:
|
||||
+ /* in EDID 1.3 the meaning of 0 changed to 16:10 (prior 1:1) */
|
||||
+ if (ver < 1 || (ver == 1 && rev < 3))
|
||||
+ yres = xres;
|
||||
+ else
|
||||
+ yres = (xres * 10)/16;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ yres = (xres * 3)/4;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ yres = (xres * 4)/5;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ yres = (xres * 9)/16;
|
||||
+ break;
|
||||
}
|
||||
+ refresh = (block[1] & 0x3f) + 60;
|
||||
+ DPRINTK(" %dx%d@%dHz\n", xres, yres, refresh);
|
||||
+
|
||||
+ calc_mode_timings(xres, yres, refresh, mode);
|
||||
}
|
||||
- calc_mode_timings(xres, yres, refresh, mode);
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
|
||||
index 0b57c1df..858a97e 100644
|
||||
--- a/drivers/video/fbdev/core/modedb.c
|
||||
+++ b/drivers/video/fbdev/core/modedb.c
|
||||
@@ -497,6 +497,90 @@ const struct fb_videomode vesa_modes[] = {
|
||||
FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
|
||||
};
|
||||
EXPORT_SYMBOL(vesa_modes);
|
||||
+
|
||||
+const struct dmt_videomode dmt_modes[DMT_SIZE] = {
|
||||
+ { 0x01, 0x0000, 0x000000, &vesa_modes[0] },
|
||||
+ { 0x02, 0x3119, 0x000000, &vesa_modes[1] },
|
||||
+ { 0x03, 0x0000, 0x000000, &vesa_modes[2] },
|
||||
+ { 0x04, 0x3140, 0x000000, &vesa_modes[3] },
|
||||
+ { 0x05, 0x314c, 0x000000, &vesa_modes[4] },
|
||||
+ { 0x06, 0x314f, 0x000000, &vesa_modes[5] },
|
||||
+ { 0x07, 0x3159, 0x000000, &vesa_modes[6] },
|
||||
+ { 0x08, 0x0000, 0x000000, &vesa_modes[7] },
|
||||
+ { 0x09, 0x4540, 0x000000, &vesa_modes[8] },
|
||||
+ { 0x0a, 0x454c, 0x000000, &vesa_modes[9] },
|
||||
+ { 0x0b, 0x454f, 0x000000, &vesa_modes[10] },
|
||||
+ { 0x0c, 0x4559, 0x000000, &vesa_modes[11] },
|
||||
+ { 0x0d, 0x0000, 0x000000, 0 },
|
||||
+ { 0x0e, 0x0000, 0x000000, 0 },
|
||||
+ { 0x0f, 0x0000, 0x000000, &vesa_modes[12] },
|
||||
+ { 0x10, 0x6140, 0x000000, &vesa_modes[13] },
|
||||
+ { 0x11, 0x614a, 0x000000, &vesa_modes[14] },
|
||||
+ { 0x12, 0x614f, 0x000000, &vesa_modes[15] },
|
||||
+ { 0x13, 0x6159, 0x000000, &vesa_modes[16] },
|
||||
+ { 0x14, 0x0000, 0x000000, 0 },
|
||||
+ { 0x15, 0x714f, 0x000000, &vesa_modes[17] },
|
||||
+ { 0x16, 0x0000, 0x7f1c21, 0 },
|
||||
+ { 0x17, 0x0000, 0x7f1c28, 0 },
|
||||
+ { 0x18, 0x0000, 0x7f1c44, 0 },
|
||||
+ { 0x19, 0x0000, 0x7f1c62, 0 },
|
||||
+ { 0x1a, 0x0000, 0x000000, 0 },
|
||||
+ { 0x1b, 0x0000, 0x8f1821, 0 },
|
||||
+ { 0x1c, 0x8100, 0x8f1828, 0 },
|
||||
+ { 0x1d, 0x810f, 0x8f1844, 0 },
|
||||
+ { 0x1e, 0x8119, 0x8f1862, 0 },
|
||||
+ { 0x1f, 0x0000, 0x000000, 0 },
|
||||
+ { 0x20, 0x8140, 0x000000, &vesa_modes[18] },
|
||||
+ { 0x21, 0x8159, 0x000000, &vesa_modes[19] },
|
||||
+ { 0x22, 0x0000, 0x000000, 0 },
|
||||
+ { 0x23, 0x8180, 0x000000, &vesa_modes[20] },
|
||||
+ { 0x24, 0x818f, 0x000000, &vesa_modes[21] },
|
||||
+ { 0x25, 0x8199, 0x000000, &vesa_modes[22] },
|
||||
+ { 0x26, 0x0000, 0x000000, 0 },
|
||||
+ { 0x27, 0x0000, 0x000000, 0 },
|
||||
+ { 0x28, 0x0000, 0x000000, 0 },
|
||||
+ { 0x29, 0x0000, 0x0c2021, 0 },
|
||||
+ { 0x2a, 0x9040, 0x0c2028, 0 },
|
||||
+ { 0x2b, 0x904f, 0x0c2044, 0 },
|
||||
+ { 0x2c, 0x9059, 0x0c2062, 0 },
|
||||
+ { 0x2d, 0x0000, 0x000000, 0 },
|
||||
+ { 0x2e, 0x9500, 0xc11821, 0 },
|
||||
+ { 0x2f, 0x9500, 0xc11828, 0 },
|
||||
+ { 0x30, 0x950f, 0xc11844, 0 },
|
||||
+ { 0x31, 0x9519, 0xc11868, 0 },
|
||||
+ { 0x32, 0x0000, 0x000000, 0 },
|
||||
+ { 0x33, 0xa940, 0x000000, &vesa_modes[23] },
|
||||
+ { 0x34, 0xa945, 0x000000, &vesa_modes[24] },
|
||||
+ { 0x35, 0xa94a, 0x000000, &vesa_modes[25] },
|
||||
+ { 0x36, 0xa94f, 0x000000, &vesa_modes[26] },
|
||||
+ { 0x37, 0xa959, 0x000000, &vesa_modes[27] },
|
||||
+ { 0x38, 0x0000, 0x000000, 0 },
|
||||
+ { 0x39, 0x0000, 0x0c2821, 0 },
|
||||
+ { 0x3a, 0xb300, 0x0c2828, 0 },
|
||||
+ { 0x3b, 0xb30f, 0x0c2844, 0 },
|
||||
+ { 0x3c, 0xb319, 0x0c2868, 0 },
|
||||
+ { 0x3d, 0x0000, 0x000000, 0 },
|
||||
+ { 0x3e, 0xc140, 0x000000, &vesa_modes[28] },
|
||||
+ { 0x3f, 0xc14f, 0x000000, &vesa_modes[29] },
|
||||
+ { 0x40, 0x0000, 0x000000, 0 },
|
||||
+ { 0x41, 0xc940, 0x000000, &vesa_modes[30] },
|
||||
+ { 0x42, 0xc94f, 0x000000, &vesa_modes[31] },
|
||||
+ { 0x43, 0x0000, 0x000000, 0 },
|
||||
+ { 0x44, 0x0000, 0x572821, &vesa_modes[34] },
|
||||
+ { 0x45, 0xd100, 0x572828, &vesa_modes[35] },
|
||||
+ { 0x46, 0xd10f, 0x572844, &vesa_modes[36] },
|
||||
+ { 0x47, 0xd119, 0x572862, &vesa_modes[37] },
|
||||
+ { 0x48, 0x0000, 0x000000, 0 },
|
||||
+ { 0x49, 0xd140, 0x000000, &vesa_modes[32] },
|
||||
+ { 0x4a, 0xd14f, 0x000000, &vesa_modes[33] },
|
||||
+ { 0x4b, 0x0000, 0x000000, 0 },
|
||||
+ { 0x4c, 0x0000, 0x1f3821, &vesa_modes[38] },
|
||||
+ { 0x4d, 0x0000, 0x1f3828, &vesa_modes[39] },
|
||||
+ { 0x4e, 0x0000, 0x1f3844, &vesa_modes[40] },
|
||||
+ { 0x4f, 0x0000, 0x1f3862, &vesa_modes[41] },
|
||||
+ { 0x50, 0x0000, 0x000000, &vesa_modes[42] },
|
||||
+};
|
||||
+EXPORT_SYMBOL(dmt_modes);
|
||||
#endif /* CONFIG_FB_MODE_HELPERS */
|
||||
|
||||
/**
|
||||
diff --git a/include/linux/fb.h b/include/linux/fb.h
|
||||
index 882dbd1..043f328 100644
|
||||
--- a/include/linux/fb.h
|
||||
+++ b/include/linux/fb.h
|
||||
@@ -727,6 +727,8 @@ extern int fb_videomode_from_videomode(const struct videomode *vm,
|
||||
|
||||
/* drivers/video/modedb.c */
|
||||
#define VESA_MODEDB_SIZE 43
|
||||
+#define DMT_SIZE 0x50
|
||||
+
|
||||
extern void fb_var_to_videomode(struct fb_videomode *mode,
|
||||
const struct fb_var_screeninfo *var);
|
||||
extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
|
||||
@@ -777,9 +779,17 @@ struct fb_videomode {
|
||||
u32 flag;
|
||||
};
|
||||
|
||||
+struct dmt_videomode {
|
||||
+ u32 dmt_id;
|
||||
+ u32 std_2byte_code;
|
||||
+ u32 cvt_3byte_code;
|
||||
+ const struct fb_videomode *mode;
|
||||
+};
|
||||
+
|
||||
extern const char *fb_mode_option;
|
||||
extern const struct fb_videomode vesa_modes[];
|
||||
extern const struct fb_videomode cea_modes[64];
|
||||
+extern const struct dmt_videomode dmt_modes[];
|
||||
|
||||
struct fb_modelist {
|
||||
struct list_head list;
|
||||
--
|
||||
2.3.1
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
From ba59bab7530cf98b40b7c4e1c8f86dc3d7f2b47f Mon Sep 17 00:00:00 2001
|
||||
From: David Ung <davidu@nvidia.com>
|
||||
Date: Fri, 16 Jan 2015 16:39:35 -0800
|
||||
Subject: [PATCH 4/4] video: fbdev: Fix sparse warning messages
|
||||
|
||||
Use NULL instead of 0 for the last entry of dmt_modes struct.
|
||||
Supresses "sparse: Using plain integer as NULL pointer" warning.
|
||||
|
||||
Signed-off-by: David Ung <davidu@nvidia.com>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/modedb.c | 74 +++++++++++++++++++--------------------
|
||||
1 file changed, 37 insertions(+), 37 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
|
||||
index 858a97e..7d07cf8 100644
|
||||
--- a/drivers/video/fbdev/core/modedb.c
|
||||
+++ b/drivers/video/fbdev/core/modedb.c
|
||||
@@ -511,69 +511,69 @@ const struct dmt_videomode dmt_modes[DMT_SIZE] = {
|
||||
{ 0x0a, 0x454c, 0x000000, &vesa_modes[9] },
|
||||
{ 0x0b, 0x454f, 0x000000, &vesa_modes[10] },
|
||||
{ 0x0c, 0x4559, 0x000000, &vesa_modes[11] },
|
||||
- { 0x0d, 0x0000, 0x000000, 0 },
|
||||
- { 0x0e, 0x0000, 0x000000, 0 },
|
||||
+ { 0x0d, 0x0000, 0x000000, NULL },
|
||||
+ { 0x0e, 0x0000, 0x000000, NULL },
|
||||
{ 0x0f, 0x0000, 0x000000, &vesa_modes[12] },
|
||||
{ 0x10, 0x6140, 0x000000, &vesa_modes[13] },
|
||||
{ 0x11, 0x614a, 0x000000, &vesa_modes[14] },
|
||||
{ 0x12, 0x614f, 0x000000, &vesa_modes[15] },
|
||||
{ 0x13, 0x6159, 0x000000, &vesa_modes[16] },
|
||||
- { 0x14, 0x0000, 0x000000, 0 },
|
||||
+ { 0x14, 0x0000, 0x000000, NULL },
|
||||
{ 0x15, 0x714f, 0x000000, &vesa_modes[17] },
|
||||
- { 0x16, 0x0000, 0x7f1c21, 0 },
|
||||
- { 0x17, 0x0000, 0x7f1c28, 0 },
|
||||
- { 0x18, 0x0000, 0x7f1c44, 0 },
|
||||
- { 0x19, 0x0000, 0x7f1c62, 0 },
|
||||
- { 0x1a, 0x0000, 0x000000, 0 },
|
||||
- { 0x1b, 0x0000, 0x8f1821, 0 },
|
||||
- { 0x1c, 0x8100, 0x8f1828, 0 },
|
||||
- { 0x1d, 0x810f, 0x8f1844, 0 },
|
||||
- { 0x1e, 0x8119, 0x8f1862, 0 },
|
||||
- { 0x1f, 0x0000, 0x000000, 0 },
|
||||
+ { 0x16, 0x0000, 0x7f1c21, NULL },
|
||||
+ { 0x17, 0x0000, 0x7f1c28, NULL },
|
||||
+ { 0x18, 0x0000, 0x7f1c44, NULL },
|
||||
+ { 0x19, 0x0000, 0x7f1c62, NULL },
|
||||
+ { 0x1a, 0x0000, 0x000000, NULL },
|
||||
+ { 0x1b, 0x0000, 0x8f1821, NULL },
|
||||
+ { 0x1c, 0x8100, 0x8f1828, NULL },
|
||||
+ { 0x1d, 0x810f, 0x8f1844, NULL },
|
||||
+ { 0x1e, 0x8119, 0x8f1862, NULL },
|
||||
+ { 0x1f, 0x0000, 0x000000, NULL },
|
||||
{ 0x20, 0x8140, 0x000000, &vesa_modes[18] },
|
||||
{ 0x21, 0x8159, 0x000000, &vesa_modes[19] },
|
||||
- { 0x22, 0x0000, 0x000000, 0 },
|
||||
+ { 0x22, 0x0000, 0x000000, NULL },
|
||||
{ 0x23, 0x8180, 0x000000, &vesa_modes[20] },
|
||||
{ 0x24, 0x818f, 0x000000, &vesa_modes[21] },
|
||||
{ 0x25, 0x8199, 0x000000, &vesa_modes[22] },
|
||||
- { 0x26, 0x0000, 0x000000, 0 },
|
||||
- { 0x27, 0x0000, 0x000000, 0 },
|
||||
- { 0x28, 0x0000, 0x000000, 0 },
|
||||
- { 0x29, 0x0000, 0x0c2021, 0 },
|
||||
- { 0x2a, 0x9040, 0x0c2028, 0 },
|
||||
- { 0x2b, 0x904f, 0x0c2044, 0 },
|
||||
- { 0x2c, 0x9059, 0x0c2062, 0 },
|
||||
- { 0x2d, 0x0000, 0x000000, 0 },
|
||||
- { 0x2e, 0x9500, 0xc11821, 0 },
|
||||
- { 0x2f, 0x9500, 0xc11828, 0 },
|
||||
- { 0x30, 0x950f, 0xc11844, 0 },
|
||||
- { 0x31, 0x9519, 0xc11868, 0 },
|
||||
- { 0x32, 0x0000, 0x000000, 0 },
|
||||
+ { 0x26, 0x0000, 0x000000, NULL },
|
||||
+ { 0x27, 0x0000, 0x000000, NULL },
|
||||
+ { 0x28, 0x0000, 0x000000, NULL },
|
||||
+ { 0x29, 0x0000, 0x0c2021, NULL },
|
||||
+ { 0x2a, 0x9040, 0x0c2028, NULL },
|
||||
+ { 0x2b, 0x904f, 0x0c2044, NULL },
|
||||
+ { 0x2c, 0x9059, 0x0c2062, NULL },
|
||||
+ { 0x2d, 0x0000, 0x000000, NULL },
|
||||
+ { 0x2e, 0x9500, 0xc11821, NULL },
|
||||
+ { 0x2f, 0x9500, 0xc11828, NULL },
|
||||
+ { 0x30, 0x950f, 0xc11844, NULL },
|
||||
+ { 0x31, 0x9519, 0xc11868, NULL },
|
||||
+ { 0x32, 0x0000, 0x000000, NULL },
|
||||
{ 0x33, 0xa940, 0x000000, &vesa_modes[23] },
|
||||
{ 0x34, 0xa945, 0x000000, &vesa_modes[24] },
|
||||
{ 0x35, 0xa94a, 0x000000, &vesa_modes[25] },
|
||||
{ 0x36, 0xa94f, 0x000000, &vesa_modes[26] },
|
||||
{ 0x37, 0xa959, 0x000000, &vesa_modes[27] },
|
||||
- { 0x38, 0x0000, 0x000000, 0 },
|
||||
- { 0x39, 0x0000, 0x0c2821, 0 },
|
||||
- { 0x3a, 0xb300, 0x0c2828, 0 },
|
||||
- { 0x3b, 0xb30f, 0x0c2844, 0 },
|
||||
- { 0x3c, 0xb319, 0x0c2868, 0 },
|
||||
- { 0x3d, 0x0000, 0x000000, 0 },
|
||||
+ { 0x38, 0x0000, 0x000000, NULL },
|
||||
+ { 0x39, 0x0000, 0x0c2821, NULL },
|
||||
+ { 0x3a, 0xb300, 0x0c2828, NULL },
|
||||
+ { 0x3b, 0xb30f, 0x0c2844, NULL },
|
||||
+ { 0x3c, 0xb319, 0x0c2868, NULL },
|
||||
+ { 0x3d, 0x0000, 0x000000, NULL },
|
||||
{ 0x3e, 0xc140, 0x000000, &vesa_modes[28] },
|
||||
{ 0x3f, 0xc14f, 0x000000, &vesa_modes[29] },
|
||||
- { 0x40, 0x0000, 0x000000, 0 },
|
||||
+ { 0x40, 0x0000, 0x000000, NULL},
|
||||
{ 0x41, 0xc940, 0x000000, &vesa_modes[30] },
|
||||
{ 0x42, 0xc94f, 0x000000, &vesa_modes[31] },
|
||||
- { 0x43, 0x0000, 0x000000, 0 },
|
||||
+ { 0x43, 0x0000, 0x000000, NULL },
|
||||
{ 0x44, 0x0000, 0x572821, &vesa_modes[34] },
|
||||
{ 0x45, 0xd100, 0x572828, &vesa_modes[35] },
|
||||
{ 0x46, 0xd10f, 0x572844, &vesa_modes[36] },
|
||||
{ 0x47, 0xd119, 0x572862, &vesa_modes[37] },
|
||||
- { 0x48, 0x0000, 0x000000, 0 },
|
||||
+ { 0x48, 0x0000, 0x000000, NULL },
|
||||
{ 0x49, 0xd140, 0x000000, &vesa_modes[32] },
|
||||
{ 0x4a, 0xd14f, 0x000000, &vesa_modes[33] },
|
||||
- { 0x4b, 0x0000, 0x000000, 0 },
|
||||
+ { 0x4b, 0x0000, 0x000000, NULL },
|
||||
{ 0x4c, 0x0000, 0x1f3821, &vesa_modes[38] },
|
||||
{ 0x4d, 0x0000, 0x1f3828, &vesa_modes[39] },
|
||||
{ 0x4e, 0x0000, 0x1f3844, &vesa_modes[40] },
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-107
@@ -1,107 +0,0 @@
|
||||
From 72bbf10bf0fdaa097252149ef3a9b74c48a0d683 Mon Sep 17 00:00:00 2001
|
||||
From: David Ung <davidu@nvidia.com>
|
||||
Date: Tue, 13 Jan 2015 19:04:02 -0800
|
||||
Subject: [PATCH 3/4] video: fbdev: Validate mode timing against monspec
|
||||
|
||||
fbmon may generate mode timings that are out of spec of the monitor.
|
||||
eg DELL U2410 has a max clock 170mhz but advertises a resolutions of
|
||||
1920x1200@60 in its Standard Timings using 2byte code of D1 00.
|
||||
When this is looked up in the DMT table it gives it a 193mhz clock.
|
||||
Although the DELL monitor supports 1920x1200@60, it can only run with
|
||||
reduced timings at 154mhz or DMT id 0x44 which has no STD 2byte code.
|
||||
This patch checks to see if the mode can be supported by the monitor
|
||||
by comparing against monspecs.dclkmax.
|
||||
|
||||
Signed-off-by: David Ung <davidu@nvidia.com>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/fbmon.c | 27 ++++++++++++++++++---------
|
||||
1 file changed, 18 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
|
||||
index 0f234c1..9533859 100644
|
||||
--- a/drivers/video/fbdev/core/fbmon.c
|
||||
+++ b/drivers/video/fbdev/core/fbmon.c
|
||||
@@ -496,7 +496,7 @@ static int get_est_timing(unsigned char *block, struct fb_videomode *mode)
|
||||
}
|
||||
|
||||
static int get_std_timing(unsigned char *block, struct fb_videomode *mode,
|
||||
- int ver, int rev)
|
||||
+ int ver, int rev, const struct fb_monspecs *specs)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -544,16 +544,23 @@ static int get_std_timing(unsigned char *block, struct fb_videomode *mode,
|
||||
calc_mode_timings(xres, yres, refresh, mode);
|
||||
}
|
||||
|
||||
+ /* Check the mode we got is within valid spec of the monitor */
|
||||
+ if (specs && specs->dclkmax
|
||||
+ && PICOS2KHZ(mode->pixclock) * 1000 > specs->dclkmax) {
|
||||
+ DPRINTK(" mode exceed max DCLK\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int get_dst_timing(unsigned char *block,
|
||||
- struct fb_videomode *mode, int ver, int rev)
|
||||
+static int get_dst_timing(unsigned char *block, struct fb_videomode *mode,
|
||||
+ int ver, int rev, const struct fb_monspecs *specs)
|
||||
{
|
||||
int j, num = 0;
|
||||
|
||||
for (j = 0; j < 6; j++, block += STD_TIMING_DESCRIPTION_SIZE)
|
||||
- num += get_std_timing(block, &mode[num], ver, rev);
|
||||
+ num += get_std_timing(block, &mode[num], ver, rev, specs);
|
||||
|
||||
return num;
|
||||
}
|
||||
@@ -609,7 +616,8 @@ static void get_detailed_timing(unsigned char *block,
|
||||
* This function builds a mode database using the contents of the EDID
|
||||
* data
|
||||
*/
|
||||
-static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
|
||||
+static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize,
|
||||
+ const struct fb_monspecs *specs)
|
||||
{
|
||||
struct fb_videomode *mode, *m;
|
||||
unsigned char *block;
|
||||
@@ -651,12 +659,13 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
|
||||
DPRINTK(" Standard Timings\n");
|
||||
block = edid + STD_TIMING_DESCRIPTIONS_START;
|
||||
for (i = 0; i < STD_TIMING; i++, block += STD_TIMING_DESCRIPTION_SIZE)
|
||||
- num += get_std_timing(block, &mode[num], ver, rev);
|
||||
+ num += get_std_timing(block, &mode[num], ver, rev, specs);
|
||||
|
||||
block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
|
||||
for (i = 0; i < 4; i++, block+= DETAILED_TIMING_DESCRIPTION_SIZE) {
|
||||
if (block[0] == 0x00 && block[1] == 0x00 && block[3] == 0xfa)
|
||||
- num += get_dst_timing(block + 5, &mode[num], ver, rev);
|
||||
+ num += get_dst_timing(block + 5, &mode[num],
|
||||
+ ver, rev, specs);
|
||||
}
|
||||
|
||||
/* Yikes, EDID data is totally useless */
|
||||
@@ -715,7 +724,7 @@ static int fb_get_monitor_limits(unsigned char *edid, struct fb_monspecs *specs)
|
||||
int num_modes, hz, hscan, pixclock;
|
||||
int vtotal, htotal;
|
||||
|
||||
- modes = fb_create_modedb(edid, &num_modes);
|
||||
+ modes = fb_create_modedb(edid, &num_modes, specs);
|
||||
if (!modes) {
|
||||
DPRINTK("None Available\n");
|
||||
return 1;
|
||||
@@ -972,7 +981,7 @@ void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs)
|
||||
DPRINTK(" Display Characteristics:\n");
|
||||
get_monspecs(edid, specs);
|
||||
|
||||
- specs->modedb = fb_create_modedb(edid, &specs->modedb_len);
|
||||
+ specs->modedb = fb_create_modedb(edid, &specs->modedb_len, specs);
|
||||
|
||||
/*
|
||||
* Workaround for buggy EDIDs that sets that the first
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
From 4d073292a74b31ea00443d7778a95c209140aa42 Mon Sep 17 00:00:00 2001
|
||||
From: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
Date: Wed, 21 Jan 2015 09:37:51 +0200
|
||||
Subject: [PATCH] fbdev: fix CVT vertical front and back porch values
|
||||
|
||||
CVT v1.1 spec says: "the vertical front porch shall in all cases be
|
||||
fixed to 3 lines". The code in fbcvt.c instead sets the _back_ porch to
|
||||
3 (plus margin).
|
||||
|
||||
After swapping cvt.v_front_porch and cvt.v_back_porch the resulting
|
||||
timings were in line with CVT timings in VESA DMT spec.
|
||||
|
||||
The bug seems to be more than 9 years old, but I presume it has not been
|
||||
noticed as usually the video timings come from the EDID or from the
|
||||
timing tables in fbdev, and probably swapped values for vfp and vbp work
|
||||
fine for most of the displays.
|
||||
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
Acked-by: David Ung <davidu@nvidia.com>
|
||||
Cc: Antonino A. Daplas <adaplas@gmail.com>
|
||||
---
|
||||
drivers/video/fbdev/core/fbcvt.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/fbcvt.c b/drivers/video/fbdev/core/fbcvt.c
|
||||
index 7cb715d..55d2bd0 100644
|
||||
--- a/drivers/video/fbdev/core/fbcvt.c
|
||||
+++ b/drivers/video/fbdev/core/fbcvt.c
|
||||
@@ -369,9 +369,9 @@ int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb)
|
||||
cvt.h_back_porch = cvt.hblank/2 + cvt.h_margin;
|
||||
cvt.h_front_porch = cvt.hblank - cvt.hsync - cvt.h_back_porch +
|
||||
2 * cvt.h_margin;
|
||||
- cvt.v_back_porch = 3 + cvt.v_margin;
|
||||
- cvt.v_front_porch = cvt.vtotal - cvt.yres/cvt.interlace -
|
||||
- cvt.v_back_porch - cvt.vsync;
|
||||
+ cvt.v_front_porch = 3 + cvt.v_margin;
|
||||
+ cvt.v_back_porch = cvt.vtotal - cvt.yres/cvt.interlace -
|
||||
+ cvt.v_front_porch - cvt.vsync;
|
||||
fb_cvt_print_name(&cvt);
|
||||
fb_cvt_convert_to_mode(&cvt, mode);
|
||||
|
||||
--
|
||||
2.3.1
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
From d746b40c64619f5064ebbe545938062481ef5183 Mon Sep 17 00:00:00 2001
|
||||
From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
|
||||
Date: Thu, 12 Feb 2015 21:17:11 +0530
|
||||
Subject: [PATCH] video: fbdev: fix possible null dereference
|
||||
|
||||
we were dereferencing edid first and the NULL check was after
|
||||
accessing that. now we are using edid only if we know that
|
||||
it is not NULL.
|
||||
|
||||
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/fbmon.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
|
||||
index 9533859..868facd 100644
|
||||
--- a/drivers/video/fbdev/core/fbmon.c
|
||||
+++ b/drivers/video/fbdev/core/fbmon.c
|
||||
@@ -624,9 +624,6 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize,
|
||||
int num = 0, i, first = 1;
|
||||
int ver, rev;
|
||||
|
||||
- ver = edid[EDID_STRUCT_VERSION];
|
||||
- rev = edid[EDID_STRUCT_REVISION];
|
||||
-
|
||||
mode = kzalloc(50 * sizeof(struct fb_videomode), GFP_KERNEL);
|
||||
if (mode == NULL)
|
||||
return NULL;
|
||||
@@ -637,6 +634,9 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ ver = edid[EDID_STRUCT_VERSION];
|
||||
+ rev = edid[EDID_STRUCT_REVISION];
|
||||
+
|
||||
*dbsize = 0;
|
||||
|
||||
DPRINTK(" Detailed Timings\n");
|
||||
--
|
||||
2.3.1
|
||||
|
||||
@@ -1,332 +0,0 @@
|
||||
From ee06bd155b081a1895f995ec2777094c7e746152 Mon Sep 17 00:00:00 2001
|
||||
From: Mans Rullgard <mans@mansr.com>
|
||||
Date: Thu, 22 Jan 2015 01:19:24 +0000
|
||||
Subject: [PATCH] video: fbdev: fix sys_copyarea
|
||||
|
||||
The sys_copyarea() function performs the same operation as
|
||||
cfb_copyarea() but using normal memory access instead of I/O
|
||||
accessors. Since the introduction of sys_copyarea(), there
|
||||
have been two fixes to cfb_copyarea():
|
||||
|
||||
- 00a9d699 ("framebuffer: fix cfb_copyarea")
|
||||
- 5b789da8 ("framebuffer: fix screen corruption when copying")
|
||||
|
||||
This patch incorporates the fixes into sys_copyarea() as well.
|
||||
|
||||
Signed-off-by: Mans Rullgard <mans@mansr.com>
|
||||
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
---
|
||||
drivers/video/fbdev/core/syscopyarea.c | 137 ++++++++++++++++-----------------
|
||||
1 file changed, 65 insertions(+), 72 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/syscopyarea.c b/drivers/video/fbdev/core/syscopyarea.c
|
||||
index 844a32f..c1eda31 100644
|
||||
--- a/drivers/video/fbdev/core/syscopyarea.c
|
||||
+++ b/drivers/video/fbdev/core/syscopyarea.c
|
||||
@@ -25,8 +25,8 @@
|
||||
*/
|
||||
|
||||
static void
|
||||
-bitcpy(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
- const unsigned long *src, int src_idx, int bits, unsigned n)
|
||||
+bitcpy(struct fb_info *p, unsigned long *dst, unsigned dst_idx,
|
||||
+ const unsigned long *src, unsigned src_idx, int bits, unsigned n)
|
||||
{
|
||||
unsigned long first, last;
|
||||
int const shift = dst_idx-src_idx;
|
||||
@@ -86,15 +86,15 @@ bitcpy(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
first &= last;
|
||||
if (shift > 0) {
|
||||
/* Single source word */
|
||||
- *dst = comp(*src >> right, *dst, first);
|
||||
+ *dst = comp(*src << left, *dst, first);
|
||||
} else if (src_idx+n <= bits) {
|
||||
/* Single source word */
|
||||
- *dst = comp(*src << left, *dst, first);
|
||||
+ *dst = comp(*src >> right, *dst, first);
|
||||
} else {
|
||||
/* 2 source words */
|
||||
d0 = *src++;
|
||||
d1 = *src;
|
||||
- *dst = comp(d0 << left | d1 >> right, *dst,
|
||||
+ *dst = comp(d0 >> right | d1 << left, *dst,
|
||||
first);
|
||||
}
|
||||
} else {
|
||||
@@ -109,13 +109,14 @@ bitcpy(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
/* Leading bits */
|
||||
if (shift > 0) {
|
||||
/* Single source word */
|
||||
- *dst = comp(d0 >> right, *dst, first);
|
||||
+ *dst = comp(d0 << left, *dst, first);
|
||||
dst++;
|
||||
n -= bits - dst_idx;
|
||||
} else {
|
||||
/* 2 source words */
|
||||
d1 = *src++;
|
||||
- *dst = comp(d0 << left | *dst >> right, *dst, first);
|
||||
+ *dst = comp(d0 >> right | d1 << left, *dst,
|
||||
+ first);
|
||||
d0 = d1;
|
||||
dst++;
|
||||
n -= bits - dst_idx;
|
||||
@@ -126,36 +127,36 @@ bitcpy(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
n /= bits;
|
||||
while (n >= 4) {
|
||||
d1 = *src++;
|
||||
- *dst++ = d0 << left | d1 >> right;
|
||||
+ *dst++ = d0 >> right | d1 << left;
|
||||
d0 = d1;
|
||||
d1 = *src++;
|
||||
- *dst++ = d0 << left | d1 >> right;
|
||||
+ *dst++ = d0 >> right | d1 << left;
|
||||
d0 = d1;
|
||||
d1 = *src++;
|
||||
- *dst++ = d0 << left | d1 >> right;
|
||||
+ *dst++ = d0 >> right | d1 << left;
|
||||
d0 = d1;
|
||||
d1 = *src++;
|
||||
- *dst++ = d0 << left | d1 >> right;
|
||||
+ *dst++ = d0 >> right | d1 << left;
|
||||
d0 = d1;
|
||||
n -= 4;
|
||||
}
|
||||
while (n--) {
|
||||
d1 = *src++;
|
||||
- *dst++ = d0 << left | d1 >> right;
|
||||
+ *dst++ = d0 >> right | d1 << left;
|
||||
d0 = d1;
|
||||
}
|
||||
|
||||
/* Trailing bits */
|
||||
- if (last) {
|
||||
- if (m <= right) {
|
||||
+ if (m) {
|
||||
+ if (m <= bits - right) {
|
||||
/* Single source word */
|
||||
- *dst = comp(d0 << left, *dst, last);
|
||||
+ d0 >>= right;
|
||||
} else {
|
||||
/* 2 source words */
|
||||
d1 = *src;
|
||||
- *dst = comp(d0 << left | d1 >> right,
|
||||
- *dst, last);
|
||||
+ d0 = d0 >> right | d1 << left;
|
||||
}
|
||||
+ *dst = comp(d0, *dst, last);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,40 +167,35 @@ bitcpy(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
*/
|
||||
|
||||
static void
|
||||
-bitcpy_rev(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
- const unsigned long *src, int src_idx, int bits, unsigned n)
|
||||
+bitcpy_rev(struct fb_info *p, unsigned long *dst, unsigned dst_idx,
|
||||
+ const unsigned long *src, unsigned src_idx, unsigned bits,
|
||||
+ unsigned n)
|
||||
{
|
||||
unsigned long first, last;
|
||||
int shift;
|
||||
|
||||
- dst += (n-1)/bits;
|
||||
- src += (n-1)/bits;
|
||||
- if ((n-1) % bits) {
|
||||
- dst_idx += (n-1) % bits;
|
||||
- dst += dst_idx >> (ffs(bits) - 1);
|
||||
- dst_idx &= bits - 1;
|
||||
- src_idx += (n-1) % bits;
|
||||
- src += src_idx >> (ffs(bits) - 1);
|
||||
- src_idx &= bits - 1;
|
||||
- }
|
||||
+ dst += (dst_idx + n - 1) / bits;
|
||||
+ src += (src_idx + n - 1) / bits;
|
||||
+ dst_idx = (dst_idx + n - 1) % bits;
|
||||
+ src_idx = (src_idx + n - 1) % bits;
|
||||
|
||||
shift = dst_idx-src_idx;
|
||||
|
||||
- first = FB_SHIFT_LOW(p, ~0UL, bits - 1 - dst_idx);
|
||||
- last = ~(FB_SHIFT_LOW(p, ~0UL, bits - 1 - ((dst_idx-n) % bits)));
|
||||
+ first = ~FB_SHIFT_HIGH(p, ~0UL, (dst_idx + 1) % bits);
|
||||
+ last = FB_SHIFT_HIGH(p, ~0UL, (bits + dst_idx + 1 - n) % bits);
|
||||
|
||||
if (!shift) {
|
||||
/* Same alignment for source and dest */
|
||||
if ((unsigned long)dst_idx+1 >= n) {
|
||||
/* Single word */
|
||||
- if (last)
|
||||
- first &= last;
|
||||
- *dst = comp(*src, *dst, first);
|
||||
+ if (first)
|
||||
+ last &= first;
|
||||
+ *dst = comp(*src, *dst, last);
|
||||
} else {
|
||||
/* Multiple destination words */
|
||||
|
||||
/* Leading bits */
|
||||
- if (first != ~0UL) {
|
||||
+ if (first) {
|
||||
*dst = comp(*src, *dst, first);
|
||||
dst--;
|
||||
src--;
|
||||
@@ -222,29 +218,29 @@ bitcpy_rev(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
while (n--)
|
||||
*dst-- = *src--;
|
||||
/* Trailing bits */
|
||||
- if (last)
|
||||
+ if (last != -1UL)
|
||||
*dst = comp(*src, *dst, last);
|
||||
}
|
||||
} else {
|
||||
/* Different alignment for source and dest */
|
||||
|
||||
- int const left = -shift & (bits-1);
|
||||
- int const right = shift & (bits-1);
|
||||
+ int const left = shift & (bits-1);
|
||||
+ int const right = -shift & (bits-1);
|
||||
|
||||
if ((unsigned long)dst_idx+1 >= n) {
|
||||
/* Single destination word */
|
||||
- if (last)
|
||||
- first &= last;
|
||||
+ if (first)
|
||||
+ last &= first;
|
||||
if (shift < 0) {
|
||||
/* Single source word */
|
||||
- *dst = comp(*src << left, *dst, first);
|
||||
+ *dst = comp(*src >> right, *dst, last);
|
||||
} else if (1+(unsigned long)src_idx >= n) {
|
||||
/* Single source word */
|
||||
- *dst = comp(*src >> right, *dst, first);
|
||||
+ *dst = comp(*src << left, *dst, last);
|
||||
} else {
|
||||
/* 2 source words */
|
||||
- *dst = comp(*src >> right | *(src-1) << left,
|
||||
- *dst, first);
|
||||
+ *dst = comp(*src << left | *(src-1) >> right,
|
||||
+ *dst, last);
|
||||
}
|
||||
} else {
|
||||
/* Multiple destination words */
|
||||
@@ -261,14 +257,18 @@ bitcpy_rev(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
/* Leading bits */
|
||||
if (shift < 0) {
|
||||
/* Single source word */
|
||||
- *dst = comp(d0 << left, *dst, first);
|
||||
+ d1 = d0;
|
||||
+ d0 >>= right;
|
||||
} else {
|
||||
/* 2 source words */
|
||||
d1 = *src--;
|
||||
- *dst = comp(d0 >> right | d1 << left, *dst,
|
||||
- first);
|
||||
- d0 = d1;
|
||||
+ d0 = d0 << left | d1 >> right;
|
||||
}
|
||||
+ if (!first)
|
||||
+ *dst = d0;
|
||||
+ else
|
||||
+ *dst = comp(d0, *dst, first);
|
||||
+ d0 = d1;
|
||||
dst--;
|
||||
n -= dst_idx+1;
|
||||
|
||||
@@ -277,36 +277,36 @@ bitcpy_rev(struct fb_info *p, unsigned long *dst, int dst_idx,
|
||||
n /= bits;
|
||||
while (n >= 4) {
|
||||
d1 = *src--;
|
||||
- *dst-- = d0 >> right | d1 << left;
|
||||
+ *dst-- = d0 << left | d1 >> right;
|
||||
d0 = d1;
|
||||
d1 = *src--;
|
||||
- *dst-- = d0 >> right | d1 << left;
|
||||
+ *dst-- = d0 << left | d1 >> right;
|
||||
d0 = d1;
|
||||
d1 = *src--;
|
||||
- *dst-- = d0 >> right | d1 << left;
|
||||
+ *dst-- = d0 << left | d1 >> right;
|
||||
d0 = d1;
|
||||
d1 = *src--;
|
||||
- *dst-- = d0 >> right | d1 << left;
|
||||
+ *dst-- = d0 << left | d1 >> right;
|
||||
d0 = d1;
|
||||
n -= 4;
|
||||
}
|
||||
while (n--) {
|
||||
d1 = *src--;
|
||||
- *dst-- = d0 >> right | d1 << left;
|
||||
+ *dst-- = d0 << left | d1 >> right;
|
||||
d0 = d1;
|
||||
}
|
||||
|
||||
/* Trailing bits */
|
||||
- if (last) {
|
||||
- if (m <= left) {
|
||||
+ if (m) {
|
||||
+ if (m <= bits - left) {
|
||||
/* Single source word */
|
||||
- *dst = comp(d0 >> right, *dst, last);
|
||||
+ d0 <<= left;
|
||||
} else {
|
||||
/* 2 source words */
|
||||
d1 = *src;
|
||||
- *dst = comp(d0 >> right | d1 << left,
|
||||
- *dst, last);
|
||||
+ d0 = d0 << left | d1 >> right;
|
||||
}
|
||||
+ *dst = comp(d0, *dst, last);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -317,9 +317,9 @@ void sys_copyarea(struct fb_info *p, const struct fb_copyarea *area)
|
||||
u32 dx = area->dx, dy = area->dy, sx = area->sx, sy = area->sy;
|
||||
u32 height = area->height, width = area->width;
|
||||
unsigned long const bits_per_line = p->fix.line_length*8u;
|
||||
- unsigned long *dst = NULL, *src = NULL;
|
||||
+ unsigned long *base = NULL;
|
||||
int bits = BITS_PER_LONG, bytes = bits >> 3;
|
||||
- int dst_idx = 0, src_idx = 0, rev_copy = 0;
|
||||
+ unsigned dst_idx = 0, src_idx = 0, rev_copy = 0;
|
||||
|
||||
if (p->state != FBINFO_STATE_RUNNING)
|
||||
return;
|
||||
@@ -334,8 +334,7 @@ void sys_copyarea(struct fb_info *p, const struct fb_copyarea *area)
|
||||
|
||||
/* split the base of the framebuffer into a long-aligned address and
|
||||
the index of the first bit */
|
||||
- dst = src = (unsigned long *)((unsigned long)p->screen_base &
|
||||
- ~(bytes-1));
|
||||
+ base = (unsigned long *)((unsigned long)p->screen_base & ~(bytes-1));
|
||||
dst_idx = src_idx = 8*((unsigned long)p->screen_base & (bytes-1));
|
||||
/* add offset of source and target area */
|
||||
dst_idx += dy*bits_per_line + dx*p->var.bits_per_pixel;
|
||||
@@ -348,20 +347,14 @@ void sys_copyarea(struct fb_info *p, const struct fb_copyarea *area)
|
||||
while (height--) {
|
||||
dst_idx -= bits_per_line;
|
||||
src_idx -= bits_per_line;
|
||||
- dst += dst_idx >> (ffs(bits) - 1);
|
||||
- dst_idx &= (bytes - 1);
|
||||
- src += src_idx >> (ffs(bits) - 1);
|
||||
- src_idx &= (bytes - 1);
|
||||
- bitcpy_rev(p, dst, dst_idx, src, src_idx, bits,
|
||||
+ bitcpy_rev(p, base + (dst_idx / bits), dst_idx % bits,
|
||||
+ base + (src_idx / bits), src_idx % bits, bits,
|
||||
width*p->var.bits_per_pixel);
|
||||
}
|
||||
} else {
|
||||
while (height--) {
|
||||
- dst += dst_idx >> (ffs(bits) - 1);
|
||||
- dst_idx &= (bytes - 1);
|
||||
- src += src_idx >> (ffs(bits) - 1);
|
||||
- src_idx &= (bytes - 1);
|
||||
- bitcpy(p, dst, dst_idx, src, src_idx, bits,
|
||||
+ bitcpy(p, base + (dst_idx / bits), dst_idx % bits,
|
||||
+ base + (src_idx / bits), src_idx % bits, bits,
|
||||
width*p->var.bits_per_pixel);
|
||||
dst_idx += bits_per_line;
|
||||
src_idx += bits_per_line;
|
||||
--
|
||||
2.3.1
|
||||
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
From 98b228f55014870092c15d7d168fecac69f2f12a Mon Sep 17 00:00:00 2001
|
||||
From: Roy Franz <roy.franz@linaro.org>
|
||||
Date: Wed, 15 Apr 2015 16:32:24 -0700
|
||||
Subject: [PATCH] x86/efi: Store upper bits of command line buffer address in
|
||||
ext_cmd_line_ptr
|
||||
|
||||
Until now, the EFI stub was only setting the 32 bit cmd_line_ptr in
|
||||
the setup_header structure, so on 64 bit platforms this could be truncated.
|
||||
This patch adds setting the upper bits of the buffer address in
|
||||
ext_cmd_line_ptr. This case was likely never hit, as the allocation
|
||||
for this buffer is done at the lowest available address. Only
|
||||
x86_64 kernels have this problem, as the 1-1 mapping mandated
|
||||
by EFI ensures that all memory is 32 bit addressable on 32 bit
|
||||
platforms. The EFI stub does not support mixed mode, so the
|
||||
32 bit kernel on 64 bit firmware case does not need to be handled.
|
||||
|
||||
Signed-off-by: Roy Franz <roy.franz@linaro.org>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
arch/x86/boot/compressed/eboot.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index 92b9a5f..5999980 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -1110,6 +1110,8 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
||||
if (!cmdline_ptr)
|
||||
goto fail;
|
||||
hdr->cmd_line_ptr = (unsigned long)cmdline_ptr;
|
||||
+ /* Fill in upper bits of command line address, NOP on 32 bit */
|
||||
+ boot_params->ext_cmd_line_ptr = (u64)(unsigned long)cmdline_ptr >> 32;
|
||||
|
||||
hdr->ramdisk_image = 0;
|
||||
hdr->ramdisk_size = 0;
|
||||
--
|
||||
2.3.2
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
From e8a4a2696fecb398b0288c43c0e0dbb91e265bb2 Mon Sep 17 00:00:00 2001
|
||||
From: Tahsin Erdogan <tahsin@google.com>
|
||||
Date: Mon, 4 May 2015 21:15:31 -0700
|
||||
Subject: [PATCH] x86/spinlocks: Fix regression in spinlock contention
|
||||
detection
|
||||
|
||||
A spinlock is regarded as contended when there is at least one waiter.
|
||||
Currently, the code that checks whether there are any waiters rely on
|
||||
tail value being greater than head. However, this is not true if tail
|
||||
reaches the max value and wraps back to zero, so arch_spin_is_contended()
|
||||
incorrectly returns 0 (not contended) when tail is smaller than head.
|
||||
|
||||
The original code (before regression) handled this case by casting the
|
||||
(tail - head) to an unsigned value. This change simply restores that
|
||||
behavior.
|
||||
|
||||
Fixes: d6abfdb20223 ("x86/spinlocks/paravirt: Fix memory corruption on unlock")
|
||||
Signed-off-by: Tahsin Erdogan <tahsin@google.com>
|
||||
Cc: peterz@infradead.org
|
||||
Cc: Waiman.Long@hp.com
|
||||
Cc: borntraeger@de.ibm.com
|
||||
Cc: oleg@redhat.com
|
||||
Cc: raghavendra.kt@linux.vnet.ibm.com
|
||||
Cc: stable@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/1430799331-20445-1-git-send-email-tahsin@google.com
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/x86/include/asm/spinlock.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
|
||||
index cf87de3..64b6117 100644
|
||||
--- a/arch/x86/include/asm/spinlock.h
|
||||
+++ b/arch/x86/include/asm/spinlock.h
|
||||
@@ -169,7 +169,7 @@ static inline int arch_spin_is_contended(arch_spinlock_t *lock)
|
||||
struct __raw_tickets tmp = READ_ONCE(lock->tickets);
|
||||
|
||||
tmp.head &= ~TICKET_SLOWPATH_FLAG;
|
||||
- return (tmp.tail - tmp.head) > TICKET_LOCK_INC;
|
||||
+ return (__ticket_t)(tmp.tail - tmp.head) > TICKET_LOCK_INC;
|
||||
}
|
||||
#define arch_spin_is_contended arch_spin_is_contended
|
||||
|
||||
--
|
||||
2.3.2
|
||||
|
||||
+85
-10
@@ -12,7 +12,7 @@ i<?xml version="1.0" ?>
|
||||
<IsA>kernel</IsA>
|
||||
<Summary>The Linux kernel (the core of the Linux operating system) for Pisi Linux</Summary>
|
||||
<Description>kernel contains the Linux kernel, the core of any Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc.</Description>
|
||||
<Archive sha1sum="553164212ea3a162a2ff63276c60fe7dd04e9ad1" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.gz</Archive>
|
||||
<Archive sha1sum="dce24ac1874f362000e40027075e7d24ba123b73" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.tar.gz</Archive>
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile target="configs/kernel-i686-config">configs/kernel-i686-config</AdditionalFile>
|
||||
<AdditionalFile target="configs/kernel-x86_64-config">configs/kernel-x86_64-config</AdditionalFile>
|
||||
@@ -28,23 +28,91 @@ i<?xml version="1.0" ?>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.0.8.xz</Patch>
|
||||
<!--aufs4-standalone support-->
|
||||
<Patch level="1">patches/pisilinux_aufs4-standalone.patch</Patch>
|
||||
<!--mageia 3rd patch-->
|
||||
<!--<Patch level="1">patches/mageia/3rd-3rdparty-1.0-tree.patch</Patch>-->
|
||||
<!--<Patch level="1">patches/mageia/3rd-3rdparty-merge.patch</Patch>--><!--bunu halletmek lazım-->
|
||||
<!--<Patch level="1">patches/mageia/3rd-acerhk-0.5.35.patch</Patch>
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.1.2.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.1.2/1.mga6/PATCHES/patches/series-->
|
||||
<Patch level="1">patches/mageia/x86-pci-toshiba-equium-a60-assign-busses.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-boot-video-80x25-if-break.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-default_poweroff_up_machines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-add-ALI-M5229-ide-compatibility-mode-quirk.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-quirks-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-acs-quirks-for-Intel-9-series-PCH-root-ports.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-CLEVO-M360S-disable_acpi_irq.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-processor-M720SR-limit-to-C2.patch</Patch>
|
||||
<!--Patch level="1">patches/mageia/scsi-ppscsi-2.6.2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi_fixes.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-sg-helper-update.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-update-for-scsi_data_buffer.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-mdvbz45393.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-3.0-buildfix.patch</Patch-->
|
||||
<Patch level="1">patches/mageia/scsi-megaraid-new-sysfs-name.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ide-pci-sis5513-965.patch</Patch>
|
||||
<Patch level="1">patches/mageia/mpt-vmware-fix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/dm-raid-aliases.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-floppy-disable-pnp-modalias.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-prefer-ata-drivers-over-ide-drivers-when-both-are-built.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-revert-Disabling-the-async-PM-for-JMicron-chip-363-361.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-jmicron-disable-broken-async_suspend.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-cfq-iosched-fix-the-setting-of-IOPS-mode-on-SSDs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs4-modular.patch</Patch>
|
||||
<Patch level="1">patches/mageia/firewire-ieee1394-module-aliases.patch</Patch>
|
||||
<Patch level="1">patches/mageia/char-agp-intel-new-Q57-id.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-fixes.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-2.6.31.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-fix-for-changed-drm_pci_alloc.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-fix-for-changed-drm_ioctl.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-2.6.36-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-2.6.37-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.0-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-include-module.h.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.3-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.6-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.7-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.12-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-restore-mach64_PCI_IDS.patch</Patch><!--deneme-->
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-linux-3.14-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.17-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.18-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch</Patch>
|
||||
<Patch level="1">patches/mageia/media-Fix-regression-in-some-more-dib0700-based-devi.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-sis190-fix-list-usage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG-mdv.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG-2.6.37-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-ipv4-netfilter-ipt_IFWLOG-3.6-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG-3.7-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-mdv.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-add-shuttle-wmi-driver.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/include-kbuild-export-pci_ids.patch</Patch>
|
||||
<Patch level="1">patches/mageia/hid-usbhid-IBM-BladeCenterHS20-quirk.patch</Patch>
|
||||
<Patch level="1">patches/mageia/usb-storage-unusual_devs-add-id.patch</Patch>
|
||||
<Patch level="1">patches/mageia/usb-storage-unusual_devs-add-id-2.6.37-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/media-usb-pwc-lie-in-proc-usb-devices.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-3rdparty-1.0-tree.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-3rdparty-merge.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-0.5.35.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-kbuild.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-extra-cflags.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-proc_dir_entry-owner.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-fix-build-with-function-tracer.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-2.6.36-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-acerhk-fix-include.patch</Patch>
|
||||
<!--Patch level="1">patches/mageia/3rd-aes2501-r19.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-aes2501-kbuild.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-aes2501-rmmod-oops-fix.patch</Patch-->
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-1.59.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-Kconfig.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-Makefile-build-fix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-linux-3.14-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-4.0-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rfswitch-1.3.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rfswitch-build-fix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rfswitch-3.0-buildfix.patch</Patch>
|
||||
@@ -56,7 +124,6 @@ i<?xml version="1.0" ?>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-updates.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-revert-4.0-changes.patch</Patch>-->
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -111,7 +178,15 @@ i<?xml version="1.0" ?>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="55">
|
||||
<Update release="56">
|
||||
<Date>2015-07-20</Date>
|
||||
<Version>4.1.2</Version>
|
||||
<Comment>Version bump to 4.1.2 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.2</Comment>
|
||||
<Type package="kernel">security</Type>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="55">
|
||||
<Date>2015-07-12</Date>
|
||||
<Version>4.0.8</Version>
|
||||
<Comment>Version bump to 4.0.8 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.8</Comment>
|
||||
|
||||
Reference in New Issue
Block a user