1
0
Fork 0

Merge branch 'x86/apic' into x86/irq

Conflicts:
	arch/x86/kernel/apic.c
hifive-unleashed-5.1
Ingo Molnar 2008-12-23 16:24:15 +01:00
commit bf8bd66d05
105 changed files with 1532 additions and 1223 deletions

View File

@ -24,7 +24,7 @@ real bad - it changes the behaviour of all unaligned instructions in user
space, and might cause programs to fail unexpectedly. space, and might cause programs to fail unexpectedly.
To change the alignment trap behavior, simply echo a number into To change the alignment trap behavior, simply echo a number into
/proc/sys/debug/alignment. The number is made up from various bits: /proc/cpu/alignment. The number is made up from various bits:
bit behavior when set bit behavior when set
--- ----------------- --- -----------------

View File

@ -114,11 +114,11 @@ modules.
Then you must load the gadget serial driver. To load it as an Then you must load the gadget serial driver. To load it as an
ACM device (recommended for interoperability), do this: ACM device (recommended for interoperability), do this:
modprobe g_serial use_acm=1 modprobe g_serial
To load it as a vendor specific bulk in/out device, do this: To load it as a vendor specific bulk in/out device, do this:
modprobe g_serial modprobe g_serial use_acm=0
This will also automatically load the underlying gadget peripheral This will also automatically load the underlying gadget peripheral
controller driver. This must be done each time you reboot the gadget controller driver. This must be done each time you reboot the gadget

View File

@ -49,8 +49,10 @@ it and 002/048 sometime later.
These files can be read as binary data. The binary data consists These files can be read as binary data. The binary data consists
of first the device descriptor, then the descriptors for each of first the device descriptor, then the descriptors for each
configuration of the device. That information is also shown in configuration of the device. Multi-byte fields in the device and
text form by the /proc/bus/usb/devices file, described later. configuration descriptors, but not other descriptors, are converted
to host endianness by the kernel. This information is also shown
in text form by the /proc/bus/usb/devices file, described later.
These files may also be used to write user-level drivers for the USB These files may also be used to write user-level drivers for the USB
devices. You would open the /proc/bus/usb/BBB/DDD file read/write, devices. You would open the /proc/bus/usb/BBB/DDD file read/write,

View File

@ -34,11 +34,12 @@ if usbmon is built into the kernel.
Verify that bus sockets are present. Verify that bus sockets are present.
# ls /sys/kernel/debug/usbmon # ls /sys/kernel/debug/usbmon
0s 0t 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
# #
Now you can choose to either use the sockets numbered '0' (to capture packets on Now you can choose to either use the socket '0u' (to capture packets on all
all buses), and skip to step #3, or find the bus used by your device with step #2. buses), and skip to step #3, or find the bus used by your device with step #2.
This allows to filter away annoying devices that talk continuously.
2. Find which bus connects to the desired device 2. Find which bus connects to the desired device
@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types.
Here is the list of words, from left to right: Here is the list of words, from left to right:
- URB Tag. This is used to identify URBs is normally a kernel mode address - URB Tag. This is used to identify URBs, and is normally an in-kernel address
of the URB structure in hexadecimal. of the URB structure in hexadecimal, but can be a sequence number or any
other unique string, within reason.
- Timestamp in microseconds, a decimal number. The timestamp's resolution - Timestamp in microseconds, a decimal number. The timestamp's resolution
depends on available clock, and so it can be much worse than a microsecond depends on available clock, and so it can be much worse than a microsecond

View File

@ -1527,10 +1527,10 @@ W: http://ebtables.sourceforge.net/
S: Maintained S: Maintained
ECRYPT FILE SYSTEM ECRYPT FILE SYSTEM
P: Mike Halcrow, Phillip Hellewell P: Tyler Hicks, Dustin Kirkland
M: mhalcrow@us.ibm.com, phillip@hellewell.homeip.net M: tyhicks@linux.vnet.ibm.com, kirkland@canonical.com
L: ecryptfs-devel@lists.sourceforge.net L: ecryptfs-devel@lists.launchpad.net
W: http://ecryptfs.sourceforge.net/ W: https://launchpad.net/ecryptfs
S: Supported S: Supported
EDAC-CORE EDAC-CORE
@ -2191,9 +2191,9 @@ S: Supported
INOTIFY INOTIFY
P: John McCutchan P: John McCutchan
M: ttb@tentacle.dhs.org M: john@johnmccutchan.com
P: Robert Love P: Robert Love
M: rml@novell.com M: rlove@rlove.org
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 28 SUBLEVEL = 28
EXTRAVERSION = -rc8 EXTRAVERSION = -rc9
NAME = Erotic Pickled Herring NAME = Erotic Pickled Herring
# *DOCUMENTATION* # *DOCUMENTATION*

View File

@ -630,7 +630,7 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
return -ENOMEM; return -ENOMEM;
sachip->clk = clk_get(me, "SA1111_CLK"); sachip->clk = clk_get(me, "SA1111_CLK");
if (!sachip->clk) { if (IS_ERR(sachip->clk)) {
ret = PTR_ERR(sachip->clk); ret = PTR_ERR(sachip->clk);
goto err_free; goto err_free;
} }

View File

@ -115,6 +115,8 @@ EXPORT_SYMBOL(__strnlen_user);
EXPORT_SYMBOL(__strncpy_from_user); EXPORT_SYMBOL(__strncpy_from_user);
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
EXPORT_SYMBOL(copy_page);
EXPORT_SYMBOL(__copy_from_user); EXPORT_SYMBOL(__copy_from_user);
EXPORT_SYMBOL(__copy_to_user); EXPORT_SYMBOL(__copy_to_user);
EXPORT_SYMBOL(__clear_user); EXPORT_SYMBOL(__clear_user);
@ -181,8 +183,6 @@ EXPORT_SYMBOL(_find_first_bit_be);
EXPORT_SYMBOL(_find_next_bit_be); EXPORT_SYMBOL(_find_next_bit_be);
#endif #endif
EXPORT_SYMBOL(copy_page);
#ifdef CONFIG_FUNCTION_TRACER #ifdef CONFIG_FUNCTION_TRACER
EXPORT_SYMBOL(mcount); EXPORT_SYMBOL(mcount);
#endif #endif

View File

@ -18,6 +18,7 @@
#include <linux/personality.h> #include <linux/personality.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/hardirq.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>

View File

@ -12,9 +12,8 @@ extern void clear_reset_status(unsigned int mask);
/** /**
* init_gpio_reset() - register GPIO as reset generator * init_gpio_reset() - register GPIO as reset generator
* * @gpio: gpio nr
* @gpio - gpio nr * @output: set gpio as out/low instead of input during normal work
* @output - set gpio as out/low instead of input during normal work
*/ */
extern int init_gpio_reset(int gpio, int output); extern int init_gpio_reset(int gpio, int output);

View File

@ -11,6 +11,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/hardirq.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/kprobes.h> #include <linux/kprobes.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>

View File

@ -13,7 +13,7 @@
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <asm/arch/smc.h> #include <mach/smc.h>
static struct smc_timing flash_timing __initdata = { static struct smc_timing flash_timing __initdata = {
.ncs_read_setup = 0, .ncs_read_setup = 0,

View File

@ -25,10 +25,10 @@
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/arch/at32ap700x.h> #include <mach/at32ap700x.h>
#include <asm/arch/init.h> #include <mach/init.h>
#include <asm/arch/board.h> #include <mach/board.h>
#include <asm/arch/portmux.h> #include <mach/portmux.h>
/* Oscillator frequencies. These are board-specific */ /* Oscillator frequencies. These are board-specific */
unsigned long at32_board_osc_rates[3] = { unsigned long at32_board_osc_rates[3] = {

View File

@ -10,7 +10,7 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh
extra-y := vmlinux.bin vmlinux.gz extra-y := vmlinux.bin vmlinux.gz
OBJCOPYFLAGS_vmlinux.bin := -O binary OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note.gnu.build-id
$(obj)/vmlinux.bin: vmlinux FORCE $(obj)/vmlinux.bin: vmlinux FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.27-rc1 # Linux kernel version: 2.6.28-rc8
# Tue Aug 5 15:40:26 2008 # Thu Dec 18 11:22:23 2008
# #
CONFIG_AVR32=y CONFIG_AVR32=y
CONFIG_GENERIC_GPIO=y CONFIG_GENERIC_GPIO=y
@ -67,6 +67,7 @@ CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y CONFIG_TIMERFD=y
CONFIG_EVENTFD=y CONFIG_EVENTFD=y
CONFIG_SHMEM=y CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set # CONFIG_SLAB is not set
@ -77,15 +78,8 @@ CONFIG_PROFILING=y
CONFIG_OPROFILE=m CONFIG_OPROFILE=m
CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y CONFIG_KPROBES=y
# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
# CONFIG_HAVE_IOREMAP_PROT is not set
CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KPROBES=y
# CONFIG_HAVE_KRETPROBES is not set
# CONFIG_HAVE_ARCH_TRACEHOOK is not set
# CONFIG_HAVE_DMA_ATTRS is not set
# CONFIG_USE_GENERIC_SMP_HELPERS is not set
CONFIG_HAVE_CLK=y CONFIG_HAVE_CLK=y
CONFIG_PROC_PAGE_MONITOR=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y CONFIG_RT_MUTEXES=y
@ -118,6 +112,7 @@ CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set # CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq" CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_CLASSIC_RCU=y CONFIG_CLASSIC_RCU=y
CONFIG_FREEZER=y
# #
# System Type and features # System Type and features
@ -134,6 +129,8 @@ CONFIG_CPU_AT32AP700X=y
CONFIG_CPU_AT32AP7000=y CONFIG_CPU_AT32AP7000=y
CONFIG_BOARD_ATSTK1000=y CONFIG_BOARD_ATSTK1000=y
# CONFIG_BOARD_ATNGW100 is not set # CONFIG_BOARD_ATNGW100 is not set
# CONFIG_BOARD_FAVR_32 is not set
# CONFIG_BOARD_MIMC200 is not set
# CONFIG_BOARD_ATSTK1002 is not set # CONFIG_BOARD_ATSTK1002 is not set
# CONFIG_BOARD_ATSTK1003 is not set # CONFIG_BOARD_ATSTK1003 is not set
# CONFIG_BOARD_ATSTK1004 is not set # CONFIG_BOARD_ATSTK1004 is not set
@ -171,14 +168,14 @@ CONFIG_FLATMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set # CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set # CONFIG_RESOURCES_64BIT is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0 CONFIG_ZONE_DMA_FLAG=0
CONFIG_NR_QUICK=2 CONFIG_NR_QUICK=2
CONFIG_VIRT_TO_BUS=y CONFIG_VIRT_TO_BUS=y
CONFIG_UNEVICTABLE_LRU=y
# CONFIG_OWNERSHIP_TRACE is not set # CONFIG_OWNERSHIP_TRACE is not set
CONFIG_NMI_DEBUGGING=y CONFIG_NMI_DEBUGGING=y
# CONFIG_HZ_100 is not set # CONFIG_HZ_100 is not set
@ -186,7 +183,7 @@ CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set # CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set # CONFIG_HZ_1000 is not set
CONFIG_HZ=250 CONFIG_HZ=250
# CONFIG_SCHED_HRTICK is not set CONFIG_SCHED_HRTICK=y
CONFIG_CMDLINE="" CONFIG_CMDLINE=""
# #
@ -228,6 +225,8 @@ CONFIG_CPU_FREQ_AT32AP=y
# Executable file formats # Executable file formats
# #
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
# CONFIG_HAVE_AOUT is not set
# CONFIG_BINFMT_MISC is not set # CONFIG_BINFMT_MISC is not set
CONFIG_NET=y CONFIG_NET=y
@ -299,6 +298,7 @@ CONFIG_IPV6_TUNNEL=m
# CONFIG_ATM is not set # CONFIG_ATM is not set
CONFIG_STP=m CONFIG_STP=m
CONFIG_BRIDGE=m CONFIG_BRIDGE=m
# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set # CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
CONFIG_LLC=m CONFIG_LLC=m
@ -321,14 +321,8 @@ CONFIG_LLC=m
# CONFIG_IRDA is not set # CONFIG_IRDA is not set
# CONFIG_BT is not set # CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set # CONFIG_AF_RXRPC is not set
# CONFIG_PHONET is not set
# # CONFIG_WIRELESS is not set
# Wireless
#
# CONFIG_CFG80211 is not set
# CONFIG_WIRELESS_EXT is not set
# CONFIG_MAC80211 is not set
# CONFIG_IEEE80211 is not set
# CONFIG_RFKILL is not set # CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set # CONFIG_NET_9P is not set
@ -359,6 +353,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers # User Modules And Translation Layers
# #
CONFIG_MTD_CHAR=y CONFIG_MTD_CHAR=y
CONFIG_HAVE_MTD_OTP=y
CONFIG_MTD_BLKDEVS=y CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set # CONFIG_FTL is not set
@ -407,6 +402,8 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
# Self-contained MTD device drivers # Self-contained MTD device drivers
# #
CONFIG_MTD_DATAFLASH=m CONFIG_MTD_DATAFLASH=m
# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_M25P80=m CONFIG_MTD_M25P80=m
CONFIG_M25PXX_USE_FAST_READ=y CONFIG_M25PXX_USE_FAST_READ=y
# CONFIG_MTD_SLRAM is not set # CONFIG_MTD_SLRAM is not set
@ -464,9 +461,10 @@ CONFIG_ATMEL_TCLIB=y
CONFIG_ATMEL_TCB_CLKSRC=y CONFIG_ATMEL_TCB_CLKSRC=y
CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
# CONFIG_EEPROM_93CX6 is not set # CONFIG_EEPROM_93CX6 is not set
# CONFIG_ICS932S401 is not set
CONFIG_ATMEL_SSC=m CONFIG_ATMEL_SSC=m
# CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HAVE_IDE is not set # CONFIG_C2PORT is not set
# #
# SCSI device support # SCSI device support
@ -548,6 +546,9 @@ CONFIG_MACB=y
# CONFIG_IBM_NEW_EMAC_RGMII is not set # CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set # CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
# CONFIG_B44 is not set # CONFIG_B44 is not set
# CONFIG_NETDEV_1000 is not set # CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set # CONFIG_NETDEV_10000 is not set
@ -653,6 +654,7 @@ CONFIG_UNIX98_PTYS=y
CONFIG_I2C=m CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=m CONFIG_I2C_CHARDEV=m
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_ALGOBIT=m CONFIG_I2C_ALGOBIT=m
# #
@ -716,6 +718,10 @@ CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set # CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y CONFIG_GPIO_SYSFS=y
#
# Memory mapped GPIO expanders:
#
# #
# I2C GPIO expanders: # I2C GPIO expanders:
# #
@ -745,11 +751,11 @@ CONFIG_WATCHDOG=y
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT32AP700X_WDT=y CONFIG_AT32AP700X_WDT=y
CONFIG_SSB_POSSIBLE=y
# #
# Sonics Silicon Backplane # Sonics Silicon Backplane
# #
CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set # CONFIG_SSB is not set
# #
@ -758,6 +764,10 @@ CONFIG_SSB_POSSIBLE=y
# CONFIG_MFD_CORE is not set # CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set # CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set # CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_REGULATOR is not set
# #
# Multimedia devices # Multimedia devices
@ -783,6 +793,7 @@ CONFIG_SSB_POSSIBLE=y
CONFIG_FB=y CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set # CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set # CONFIG_FB_DDC is not set
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_CFB_IMAGEBLIT=y
@ -804,10 +815,13 @@ CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_S1D13XXX is not set # CONFIG_FB_S1D13XXX is not set
CONFIG_FB_ATMEL=y CONFIG_FB_ATMEL=y
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_LTV350QV=y CONFIG_LCD_LTV350QV=y
# CONFIG_LCD_ILI9320 is not set # CONFIG_LCD_ILI9320 is not set
# CONFIG_LCD_TDO24M is not set
# CONFIG_LCD_VGG2432A4 is not set # CONFIG_LCD_VGG2432A4 is not set
# CONFIG_LCD_PLATFORM is not set # CONFIG_LCD_PLATFORM is not set
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set # CONFIG_BACKLIGHT_CLASS_DEVICE is not set
@ -818,6 +832,7 @@ CONFIG_LCD_LTV350QV=y
# CONFIG_DISPLAY_SUPPORT is not set # CONFIG_DISPLAY_SUPPORT is not set
# CONFIG_LOGO is not set # CONFIG_LOGO is not set
CONFIG_SOUND=m CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=m CONFIG_SND=m
CONFIG_SND_TIMER=m CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m CONFIG_SND_PCM=m
@ -848,28 +863,32 @@ CONFIG_USB_SUPPORT=y
# CONFIG_USB_ARCH_HAS_EHCI is not set # CONFIG_USB_ARCH_HAS_EHCI is not set
# CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set
# CONFIG_USB_MUSB_HDRC is not set
# CONFIG_USB_GADGET_MUSB_HDRC is not set
# #
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
# #
CONFIG_USB_GADGET=y CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG is not set # CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set # CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set # CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_SELECTED=y CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AMD5536UDC is not set # CONFIG_USB_GADGET_AT91 is not set
CONFIG_USB_GADGET_ATMEL_USBA=y CONFIG_USB_GADGET_ATMEL_USBA=y
CONFIG_USB_ATMEL_USBA=y CONFIG_USB_ATMEL_USBA=y
# CONFIG_USB_GADGET_FSL_USB2 is not set # CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA25X is not set
# CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LH7A40X is not set # CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set # CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_PXA25X is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_S3C2410 is not set # CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_AT91 is not set # CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_AMD5536UDC is not set
# CONFIG_USB_GADGET_FSL_QE is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set # CONFIG_USB_GADGET_DUMMY_HCD is not set
CONFIG_USB_GADGET_DUALSPEED=y CONFIG_USB_GADGET_DUALSPEED=y
CONFIG_USB_ZERO=m CONFIG_USB_ZERO=m
@ -887,7 +906,7 @@ CONFIG_MMC=y
# CONFIG_MMC_UNSAFE_RESUME is not set # CONFIG_MMC_UNSAFE_RESUME is not set
# #
# MMC/SD Card Drivers # MMC/SD/SDIO Card Drivers
# #
CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_MMC_BLOCK_BOUNCE=y
@ -895,10 +914,11 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_TEST is not set # CONFIG_MMC_TEST is not set
# #
# MMC/SD Host Controller Drivers # MMC/SD/SDIO Host Controller Drivers
# #
# CONFIG_MMC_SDHCI is not set # CONFIG_MMC_SDHCI is not set
CONFIG_MMC_ATMELMCI=y CONFIG_MMC_ATMELMCI=y
# CONFIG_MMC_ATMELMCI_DMA is not set
CONFIG_MMC_SPI=m CONFIG_MMC_SPI=m
# CONFIG_MEMSTICK is not set # CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y CONFIG_NEW_LEDS=y
@ -918,6 +938,7 @@ CONFIG_LEDS_GPIO=m
CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m CONFIG_LEDS_TRIGGER_HEARTBEAT=m
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
# CONFIG_ACCESSIBILITY is not set # CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y CONFIG_RTC_LIB=y
@ -950,25 +971,31 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_M41T80 is not set # CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set # CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set # CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
# #
# SPI RTC drivers # SPI RTC drivers
# #
# CONFIG_RTC_DRV_M41T94 is not set # CONFIG_RTC_DRV_M41T94 is not set
# CONFIG_RTC_DRV_DS1305 is not set # CONFIG_RTC_DRV_DS1305 is not set
# CONFIG_RTC_DRV_DS1390 is not set
# CONFIG_RTC_DRV_MAX6902 is not set # CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_R9701 is not set # CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_DS3234 is not set
# #
# Platform RTC drivers # Platform RTC drivers
# #
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set # CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set # CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set # CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set # CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set # CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set # CONFIG_RTC_DRV_V3020 is not set
# #
@ -989,6 +1016,8 @@ CONFIG_DMA_ENGINE=y
# CONFIG_NET_DMA is not set # CONFIG_NET_DMA is not set
CONFIG_DMATEST=m CONFIG_DMATEST=m
# CONFIG_UIO is not set # CONFIG_UIO is not set
# CONFIG_STAGING is not set
CONFIG_STAGING_EXCLUDE_BUILD=y
# #
# File systems # File systems
@ -998,12 +1027,17 @@ CONFIG_EXT2_FS=m
# CONFIG_EXT2_FS_XIP is not set # CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=m CONFIG_EXT3_FS=m
# CONFIG_EXT3_FS_XATTR is not set # CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set CONFIG_EXT4_FS=m
CONFIG_EXT4DEV_COMPAT=y
# CONFIG_EXT4_FS_XATTR is not set
CONFIG_JBD=m CONFIG_JBD=m
# CONFIG_JBD_DEBUG is not set # CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
# CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set # CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set # CONFIG_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not set # CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set # CONFIG_OCFS2_FS is not set
# CONFIG_DNOTIFY is not set # CONFIG_DNOTIFY is not set
@ -1036,6 +1070,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y CONFIG_SYSFS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_TMPFS_POSIX_ACL is not set
@ -1054,7 +1089,8 @@ CONFIG_TMPFS=y
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_DEBUG=0
# CONFIG_JFFS2_FS_WRITEBUFFER is not set CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set # CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set # CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
@ -1088,6 +1124,7 @@ CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y CONFIG_SUNRPC=y
# CONFIG_SUNRPC_REGISTER_V4 is not set
# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set # CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
@ -1185,10 +1222,21 @@ CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_FRAME_POINTER=y CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_LKDTM is not set # CONFIG_LKDTM is not set
# CONFIG_FAULT_INJECTION is not set # CONFIG_FAULT_INJECTION is not set
#
# Tracers
#
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_CONTEXT_SWITCH_TRACER is not set
# CONFIG_BOOT_TRACER is not set
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set # CONFIG_SAMPLES is not set
# #
@ -1196,17 +1244,26 @@ CONFIG_FRAME_POINTER=y
# #
# CONFIG_KEYS is not set # CONFIG_KEYS is not set
# CONFIG_SECURITY is not set # CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set # CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_CRYPTO=y CONFIG_CRYPTO=y
# #
# Crypto core or helper # Crypto core or helper
# #
CONFIG_CRYPTO_FIPS=y
CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=m CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=m CONFIG_CRYPTO_HASH=m
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=m
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_MANAGER=m CONFIG_CRYPTO_MANAGER=m
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set # CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set # CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set # CONFIG_CRYPTO_CRYPTD is not set
@ -1257,7 +1314,7 @@ CONFIG_CRYPTO_SHA1=m
# #
# Ciphers # Ciphers
# #
# CONFIG_CRYPTO_AES is not set CONFIG_CRYPTO_AES=m
# CONFIG_CRYPTO_ANUBIS is not set # CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_BLOWFISH is not set
@ -1278,14 +1335,17 @@ CONFIG_CRYPTO_DES=m
# #
CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_LZO=y
#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
# CONFIG_CRYPTO_HW is not set # CONFIG_CRYPTO_HW is not set
# #
# Library routines # Library routines
# #
CONFIG_BITREVERSE=y CONFIG_BITREVERSE=y
# CONFIG_GENERIC_FIND_FIRST_BIT is not set
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=m CONFIG_CRC_CCITT=m
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRC_T10DIF=m CONFIG_CRC_T10DIF=m

View File

@ -967,28 +967,28 @@ static inline void configure_usart0_pins(void)
{ {
u32 pin_mask = (1 << 8) | (1 << 9); /* RXD & TXD */ u32 pin_mask = (1 << 8) | (1 << 9); /* RXD & TXD */
select_peripheral(PIOA, pin_mask, PERIPH_B, 0); select_peripheral(PIOA, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
} }
static inline void configure_usart1_pins(void) static inline void configure_usart1_pins(void)
{ {
u32 pin_mask = (1 << 17) | (1 << 18); /* RXD & TXD */ u32 pin_mask = (1 << 17) | (1 << 18); /* RXD & TXD */
select_peripheral(PIOA, pin_mask, PERIPH_A, 0); select_peripheral(PIOA, pin_mask, PERIPH_A, AT32_GPIOF_PULLUP);
} }
static inline void configure_usart2_pins(void) static inline void configure_usart2_pins(void)
{ {
u32 pin_mask = (1 << 26) | (1 << 27); /* RXD & TXD */ u32 pin_mask = (1 << 26) | (1 << 27); /* RXD & TXD */
select_peripheral(PIOB, pin_mask, PERIPH_B, 0); select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
} }
static inline void configure_usart3_pins(void) static inline void configure_usart3_pins(void)
{ {
u32 pin_mask = (1 << 18) | (1 << 17); /* RXD & TXD */ u32 pin_mask = (1 << 18) | (1 << 17); /* RXD & TXD */
select_peripheral(PIOB, pin_mask, PERIPH_B, 0); select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
} }
static struct platform_device *__initdata at32_usarts[4]; static struct platform_device *__initdata at32_usarts[4];

View File

@ -4,6 +4,7 @@ menu "HP Simulator drivers"
config HP_SIMETH config HP_SIMETH
bool "Simulated Ethernet " bool "Simulated Ethernet "
depends on NET
config HP_SIMSERIAL config HP_SIMSERIAL
bool "Simulated serial driver support" bool "Simulated serial driver support"

View File

@ -48,7 +48,7 @@ config RUNTIME_DEBUG
help help
If you say Y here, some debugging macros will do run-time checking. If you say Y here, some debugging macros will do run-time checking.
If you say N here, those macros will mostly turn to no-ops. See If you say N here, those macros will mostly turn to no-ops. See
include/asm-mips/debug.h for debuging macros. arch/mips/include/asm/debug.h for debugging macros.
If unsure, say N. If unsure, say N.
endmenu endmenu

File diff suppressed because it is too large Load Diff

View File

@ -35,6 +35,16 @@
mtc0 \reg, CP0_TCSTATUS mtc0 \reg, CP0_TCSTATUS
_ehb _ehb
.endm .endm
#elif defined(CONFIG_CPU_MIPSR2)
.macro local_irq_enable reg=t0
ei
irq_enable_hazard
.endm
.macro local_irq_disable reg=t0
di
irq_disable_hazard
.endm
#else #else
.macro local_irq_enable reg=t0 .macro local_irq_enable reg=t0
mfc0 \reg, CP0_STATUS mfc0 \reg, CP0_STATUS

View File

@ -111,6 +111,7 @@ EXPORT_SYMBOL(dma_alloc_coherent);
void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr, void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,
dma_addr_t dma_handle) dma_addr_t dma_handle)
{ {
plat_unmap_dma_mem(dma_handle);
free_pages((unsigned long) vaddr, get_order(size)); free_pages((unsigned long) vaddr, get_order(size));
} }
@ -121,6 +122,8 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
{ {
unsigned long addr = (unsigned long) vaddr; unsigned long addr = (unsigned long) vaddr;
plat_unmap_dma_mem(dma_handle);
if (!plat_device_is_coherent(dev)) if (!plat_device_is_coherent(dev))
addr = CAC_ADDR(addr); addr = CAC_ADDR(addr);

View File

@ -41,6 +41,7 @@ $(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405 $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
$(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
$(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405 $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405

View File

@ -479,17 +479,20 @@ _GLOBAL(_tlbil_pid)
* (no broadcast) * (no broadcast)
*/ */
_GLOBAL(_tlbil_va) _GLOBAL(_tlbil_va)
mfmsr r10
wrteei 0
slwi r4,r4,16 slwi r4,r4,16
mtspr SPRN_MAS6,r4 /* assume AS=0 for now */ mtspr SPRN_MAS6,r4 /* assume AS=0 for now */
tlbsx 0,r3 tlbsx 0,r3
mfspr r4,SPRN_MAS1 /* check valid */ mfspr r4,SPRN_MAS1 /* check valid */
andis. r3,r4,MAS1_VALID@h andis. r3,r4,MAS1_VALID@h
beqlr beq 1f
rlwinm r4,r4,0,1,31 rlwinm r4,r4,0,1,31
mtspr SPRN_MAS1,r4 mtspr SPRN_MAS1,r4
tlbwe tlbwe
msync msync
isync isync
1: wrtee r10
blr blr
#endif /* CONFIG_FSL_BOOKE */ #endif /* CONFIG_FSL_BOOKE */

View File

@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co
be = blk->start + blk->size; be = blk->start + blk->size;
if (s >= bs && e <= be) if (s >= bs && e <= be)
break; break;
blk = NULL;
} }
if (blk == NULL) if (blk == NULL)

View File

@ -507,6 +507,9 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
{ {
struct hstate *hstate = hstate_file(file); struct hstate *hstate = hstate_file(file);
int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate)); int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate));
if (!mmu_huge_psizes[mmu_psize])
return -EINVAL;
return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0); return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0);
} }

View File

@ -901,10 +901,17 @@ static void mark_reserved_regions_for_nid(int nid)
if (end_pfn > node_ar.end_pfn) if (end_pfn > node_ar.end_pfn)
reserve_size = (node_ar.end_pfn << PAGE_SHIFT) reserve_size = (node_ar.end_pfn << PAGE_SHIFT)
- (start_pfn << PAGE_SHIFT); - (start_pfn << PAGE_SHIFT);
dbg("reserve_bootmem %lx %lx nid=%d\n", physbase, /*
reserve_size, node_ar.nid); * Only worry about *this* node, others may not
reserve_bootmem_node(NODE_DATA(node_ar.nid), physbase, * yet have valid NODE_DATA().
reserve_size, BOOTMEM_DEFAULT); */
if (node_ar.nid == nid) {
dbg("reserve_bootmem %lx %lx nid=%d\n",
physbase, reserve_size, node_ar.nid);
reserve_bootmem_node(NODE_DATA(node_ar.nid),
physbase, reserve_size,
BOOTMEM_DEFAULT);
}
/* /*
* if reserved region is contained in the active region * if reserved region is contained in the active region
* then done. * then done.
@ -929,7 +936,6 @@ static void mark_reserved_regions_for_nid(int nid)
void __init do_init_bootmem(void) void __init do_init_bootmem(void)
{ {
int nid; int nid;
unsigned int i;
min_low_pfn = 0; min_low_pfn = 0;
max_low_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; max_low_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT;

View File

@ -413,6 +413,9 @@ static int axon_msi_probe(struct of_device *device,
MSIC_CTRL_IRQ_ENABLE | MSIC_CTRL_ENABLE | MSIC_CTRL_IRQ_ENABLE | MSIC_CTRL_ENABLE |
MSIC_CTRL_FIFO_SIZE); MSIC_CTRL_FIFO_SIZE);
msic->read_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG)
& MSIC_FIFO_SIZE_MASK;
device->dev.platform_data = msic; device->dev.platform_data = msic;
ppc_md.setup_msi_irqs = axon_msi_setup_msi_irqs; ppc_md.setup_msi_irqs = axon_msi_setup_msi_irqs;

View File

@ -55,6 +55,8 @@ config GENERIC_HARDIRQS
config GENERIC_HARDIRQS_NO__DO_IRQ config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y def_bool y
depends on SUPERH32 && (!SH_DREAMCAST && !SH_SH4202_MICRODEV && \
!SH_7751_SYSTEMH && !HD64461)
config GENERIC_IRQ_PROBE config GENERIC_IRQ_PROBE
def_bool y def_bool y

View File

@ -62,6 +62,8 @@ struct sparc_stackf {
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <asm/system.h>
static inline bool pt_regs_is_syscall(struct pt_regs *regs) static inline bool pt_regs_is_syscall(struct pt_regs *regs)
{ {
return (regs->psr & PSR_SYSCALL); return (regs->psr & PSR_SYSCALL);
@ -72,6 +74,14 @@ static inline bool pt_regs_clear_syscall(struct pt_regs *regs)
return (regs->psr &= ~PSR_SYSCALL); return (regs->psr &= ~PSR_SYSCALL);
} }
#define arch_ptrace_stop_needed(exit_code, info) \
({ flush_user_windows(); \
current_thread_info()->w_saved != 0; \
})
#define arch_ptrace_stop(exit_code, info) \
synchronize_user_stack()
#define user_mode(regs) (!((regs)->psr & PSR_PS)) #define user_mode(regs) (!((regs)->psr & PSR_PS))
#define instruction_pointer(regs) ((regs)->pc) #define instruction_pointer(regs) ((regs)->pc)
#define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP]) #define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP])

View File

@ -114,6 +114,7 @@ struct sparc_trapf {
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/threads.h> #include <linux/threads.h>
#include <asm/system.h>
static inline int pt_regs_trap_type(struct pt_regs *regs) static inline int pt_regs_trap_type(struct pt_regs *regs)
{ {
@ -130,6 +131,14 @@ static inline bool pt_regs_clear_syscall(struct pt_regs *regs)
return (regs->tstate &= ~TSTATE_SYSCALL); return (regs->tstate &= ~TSTATE_SYSCALL);
} }
#define arch_ptrace_stop_needed(exit_code, info) \
({ flush_user_windows(); \
get_thread_wsaved() != 0; \
})
#define arch_ptrace_stop(exit_code, info) \
synchronize_user_stack()
struct global_reg_snapshot { struct global_reg_snapshot {
unsigned long tstate; unsigned long tstate;
unsigned long tpc; unsigned long tpc;

View File

@ -223,9 +223,15 @@ struct pci_header {
} __attribute__((packed)); } __attribute__((packed));
/* Function prototypes for bootstrapping */ /* Function prototypes for bootstrapping */
#ifdef CONFIG_VMI
extern void vmi_init(void); extern void vmi_init(void);
extern void vmi_activate(void);
extern void vmi_bringup(void); extern void vmi_bringup(void);
extern void vmi_apply_boot_page_allocations(void); #else
static inline void vmi_init(void) {}
static inline void vmi_activate(void) {}
static inline void vmi_bringup(void) {}
#endif
/* State needed to start an application processor in an SMP system. */ /* State needed to start an application processor in an SMP system. */
struct vmi_ap_state { struct vmi_ap_state {

View File

@ -441,6 +441,7 @@ static void lapic_timer_setup(enum clock_event_mode mode,
v = apic_read(APIC_LVTT); v = apic_read(APIC_LVTT);
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR); v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
apic_write(APIC_LVTT, v); apic_write(APIC_LVTT, v);
apic_write(APIC_TMICT, 0xffffffff);
break; break;
case CLOCK_EVT_MODE_RESUME: case CLOCK_EVT_MODE_RESUME:
/* Nothing to do here */ /* Nothing to do here */
@ -559,13 +560,13 @@ static int __init calibrate_by_pmtimer(long deltapm, long *delta)
} else { } else {
res = (((u64)deltapm) * mult) >> 22; res = (((u64)deltapm) * mult) >> 22;
do_div(res, 1000000); do_div(res, 1000000);
printk(KERN_WARNING "APIC calibration not consistent " pr_warning("APIC calibration not consistent "
"with PM Timer: %ldms instead of 100ms\n", "with PM Timer: %ldms instead of 100ms\n",
(long)res); (long)res);
/* Correct the lapic counter value */ /* Correct the lapic counter value */
res = (((u64)(*delta)) * pm_100ms); res = (((u64)(*delta)) * pm_100ms);
do_div(res, deltapm); do_div(res, deltapm);
printk(KERN_INFO "APIC delta adjusted to PM-Timer: " pr_info("APIC delta adjusted to PM-Timer: "
"%lu (%ld)\n", (unsigned long)res, *delta); "%lu (%ld)\n", (unsigned long)res, *delta);
*delta = (long)res; *delta = (long)res;
} }
@ -645,8 +646,7 @@ static int __init calibrate_APIC_clock(void)
*/ */
if (calibration_result < (1000000 / HZ)) { if (calibration_result < (1000000 / HZ)) {
local_irq_enable(); local_irq_enable();
printk(KERN_WARNING pr_warning("APIC frequency too slow, disabling apic timer\n");
"APIC frequency too slow, disabling apic timer\n");
return -1; return -1;
} }
@ -672,13 +672,9 @@ static int __init calibrate_APIC_clock(void)
while (lapic_cal_loops <= LAPIC_CAL_LOOPS) while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
cpu_relax(); cpu_relax();
local_irq_disable();
/* Stop the lapic timer */ /* Stop the lapic timer */
lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt); lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
local_irq_enable();
/* Jiffies delta */ /* Jiffies delta */
deltaj = lapic_cal_j2 - lapic_cal_j1; deltaj = lapic_cal_j2 - lapic_cal_j1;
apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj); apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
@ -692,8 +688,7 @@ static int __init calibrate_APIC_clock(void)
local_irq_enable(); local_irq_enable();
if (levt->features & CLOCK_EVT_FEAT_DUMMY) { if (levt->features & CLOCK_EVT_FEAT_DUMMY) {
printk(KERN_WARNING pr_warning("APIC timer disabled due to verification failure.\n");
"APIC timer disabled due to verification failure.\n");
return -1; return -1;
} }
@ -714,7 +709,7 @@ void __init setup_boot_APIC_clock(void)
* broadcast mechanism is used. On UP systems simply ignore it. * broadcast mechanism is used. On UP systems simply ignore it.
*/ */
if (disable_apic_timer) { if (disable_apic_timer) {
printk(KERN_INFO "Disabling APIC timer\n"); pr_info("Disabling APIC timer\n");
/* No broadcast on UP ! */ /* No broadcast on UP ! */
if (num_possible_cpus() > 1) { if (num_possible_cpus() > 1) {
lapic_clockevent.mult = 1; lapic_clockevent.mult = 1;
@ -741,7 +736,7 @@ void __init setup_boot_APIC_clock(void)
if (nmi_watchdog != NMI_IO_APIC) if (nmi_watchdog != NMI_IO_APIC)
lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY; lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY;
else else
printk(KERN_WARNING "APIC timer registered as dummy," pr_warning("APIC timer registered as dummy,"
" due to nmi_watchdog=%d!\n", nmi_watchdog); " due to nmi_watchdog=%d!\n", nmi_watchdog);
/* Setup the lapic or request the broadcast */ /* Setup the lapic or request the broadcast */
@ -773,8 +768,7 @@ static void local_apic_timer_interrupt(void)
* spurious. * spurious.
*/ */
if (!evt->event_handler) { if (!evt->event_handler) {
printk(KERN_WARNING pr_warning("Spurious LAPIC timer interrupt on cpu %d\n", cpu);
"Spurious LAPIC timer interrupt on cpu %d\n", cpu);
/* Switch it off */ /* Switch it off */
lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt); lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt);
return; return;
@ -1089,7 +1083,7 @@ static void __cpuinit lapic_setup_esr(void)
unsigned int oldvalue, value, maxlvt; unsigned int oldvalue, value, maxlvt;
if (!lapic_is_integrated()) { if (!lapic_is_integrated()) {
printk(KERN_INFO "No ESR for 82489DX.\n"); pr_info("No ESR for 82489DX.\n");
return; return;
} }
@ -1100,7 +1094,7 @@ static void __cpuinit lapic_setup_esr(void)
* ESR disabled - we can't do anything useful with the * ESR disabled - we can't do anything useful with the
* errors anyway - mbligh * errors anyway - mbligh
*/ */
printk(KERN_INFO "Leaving ESR disabled.\n"); pr_info("Leaving ESR disabled.\n");
return; return;
} }
@ -1294,7 +1288,7 @@ void check_x2apic(void)
rdmsr(MSR_IA32_APICBASE, msr, msr2); rdmsr(MSR_IA32_APICBASE, msr, msr2);
if (msr & X2APIC_ENABLE) { if (msr & X2APIC_ENABLE) {
printk("x2apic enabled by BIOS, switching to x2apic ops\n"); pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
x2apic_preenabled = x2apic = 1; x2apic_preenabled = x2apic = 1;
apic_ops = &x2apic_ops; apic_ops = &x2apic_ops;
} }
@ -1306,7 +1300,7 @@ void enable_x2apic(void)
rdmsr(MSR_IA32_APICBASE, msr, msr2); rdmsr(MSR_IA32_APICBASE, msr, msr2);
if (!(msr & X2APIC_ENABLE)) { if (!(msr & X2APIC_ENABLE)) {
printk("Enabling x2apic\n"); pr_info("Enabling x2apic\n");
wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0); wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0);
} }
} }
@ -1321,9 +1315,8 @@ void __init enable_IR_x2apic(void)
return; return;
if (!x2apic_preenabled && disable_x2apic) { if (!x2apic_preenabled && disable_x2apic) {
printk(KERN_INFO pr_info("Skipped enabling x2apic and Interrupt-remapping "
"Skipped enabling x2apic and Interrupt-remapping " "because of nox2apic\n");
"because of nox2apic\n");
return; return;
} }
@ -1331,22 +1324,19 @@ void __init enable_IR_x2apic(void)
panic("Bios already enabled x2apic, can't enforce nox2apic"); panic("Bios already enabled x2apic, can't enforce nox2apic");
if (!x2apic_preenabled && skip_ioapic_setup) { if (!x2apic_preenabled && skip_ioapic_setup) {
printk(KERN_INFO pr_info("Skipped enabling x2apic and Interrupt-remapping "
"Skipped enabling x2apic and Interrupt-remapping " "because of skipping io-apic setup\n");
"because of skipping io-apic setup\n");
return; return;
} }
ret = dmar_table_init(); ret = dmar_table_init();
if (ret) { if (ret) {
printk(KERN_INFO pr_info("dmar_table_init() failed with %d:\n", ret);
"dmar_table_init() failed with %d:\n", ret);
if (x2apic_preenabled) if (x2apic_preenabled)
panic("x2apic enabled by bios. But IR enabling failed"); panic("x2apic enabled by bios. But IR enabling failed");
else else
printk(KERN_INFO pr_info("Not enabling x2apic,Intr-remapping\n");
"Not enabling x2apic,Intr-remapping\n");
return; return;
} }
@ -1355,7 +1345,7 @@ void __init enable_IR_x2apic(void)
ret = save_mask_IO_APIC_setup(); ret = save_mask_IO_APIC_setup();
if (ret) { if (ret) {
printk(KERN_INFO "Saving IO-APIC state failed: %d\n", ret); pr_info("Saving IO-APIC state failed: %d\n", ret);
goto end; goto end;
} }
@ -1390,14 +1380,11 @@ end:
if (!ret) { if (!ret) {
if (!x2apic_preenabled) if (!x2apic_preenabled)
printk(KERN_INFO pr_info("Enabled x2apic and interrupt-remapping\n");
"Enabled x2apic and interrupt-remapping\n");
else else
printk(KERN_INFO pr_info("Enabled Interrupt-remapping\n");
"Enabled Interrupt-remapping\n");
} else } else
printk(KERN_ERR pr_err("Failed to enable Interrupt-remapping and x2apic\n");
"Failed to enable Interrupt-remapping and x2apic\n");
#else #else
if (!cpu_has_x2apic) if (!cpu_has_x2apic)
return; return;
@ -1406,8 +1393,8 @@ end:
panic("x2apic enabled prior OS handover," panic("x2apic enabled prior OS handover,"
" enable CONFIG_INTR_REMAP"); " enable CONFIG_INTR_REMAP");
printk(KERN_INFO "Enable CONFIG_INTR_REMAP for enabling intr-remapping " pr_info("Enable CONFIG_INTR_REMAP for enabling intr-remapping "
" and x2apic\n"); " and x2apic\n");
#endif #endif
return; return;
@ -1424,7 +1411,7 @@ end:
static int __init detect_init_APIC(void) static int __init detect_init_APIC(void)
{ {
if (!cpu_has_apic) { if (!cpu_has_apic) {
printk(KERN_INFO "No local APIC present\n"); pr_info("No local APIC present\n");
return -1; return -1;
} }
@ -1465,8 +1452,8 @@ static int __init detect_init_APIC(void)
* "lapic" specified. * "lapic" specified.
*/ */
if (!force_enable_local_apic) { if (!force_enable_local_apic) {
printk(KERN_INFO "Local APIC disabled by BIOS -- " pr_info("Local APIC disabled by BIOS -- "
"you can enable it with \"lapic\"\n"); "you can enable it with \"lapic\"\n");
return -1; return -1;
} }
/* /*
@ -1476,8 +1463,7 @@ static int __init detect_init_APIC(void)
*/ */
rdmsr(MSR_IA32_APICBASE, l, h); rdmsr(MSR_IA32_APICBASE, l, h);
if (!(l & MSR_IA32_APICBASE_ENABLE)) { if (!(l & MSR_IA32_APICBASE_ENABLE)) {
printk(KERN_INFO pr_info("Local APIC disabled by BIOS -- reenabling.\n");
"Local APIC disabled by BIOS -- reenabling.\n");
l &= ~MSR_IA32_APICBASE_BASE; l &= ~MSR_IA32_APICBASE_BASE;
l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE; l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
wrmsr(MSR_IA32_APICBASE, l, h); wrmsr(MSR_IA32_APICBASE, l, h);
@ -1490,7 +1476,7 @@ static int __init detect_init_APIC(void)
*/ */
features = cpuid_edx(1); features = cpuid_edx(1);
if (!(features & (1 << X86_FEATURE_APIC))) { if (!(features & (1 << X86_FEATURE_APIC))) {
printk(KERN_WARNING "Could not enable APIC!\n"); pr_warning("Could not enable APIC!\n");
return -1; return -1;
} }
set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC); set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
@ -1501,14 +1487,14 @@ static int __init detect_init_APIC(void)
if (l & MSR_IA32_APICBASE_ENABLE) if (l & MSR_IA32_APICBASE_ENABLE)
mp_lapic_addr = l & MSR_IA32_APICBASE_BASE; mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
printk(KERN_INFO "Found and enabled local APIC!\n"); pr_info("Found and enabled local APIC!\n");
apic_pm_activate(); apic_pm_activate();
return 0; return 0;
no_apic: no_apic:
printk(KERN_INFO "No local APIC present or hardware disabled\n"); pr_info("No local APIC present or hardware disabled\n");
return -1; return -1;
} }
#endif #endif
@ -1584,12 +1570,12 @@ int __init APIC_init_uniprocessor(void)
{ {
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
if (disable_apic) { if (disable_apic) {
printk(KERN_INFO "Apic disabled\n"); pr_info("Apic disabled\n");
return -1; return -1;
} }
if (!cpu_has_apic) { if (!cpu_has_apic) {
disable_apic = 1; disable_apic = 1;
printk(KERN_INFO "Apic disabled by BIOS\n"); pr_info("Apic disabled by BIOS\n");
return -1; return -1;
} }
#else #else
@ -1601,8 +1587,8 @@ int __init APIC_init_uniprocessor(void)
*/ */
if (!cpu_has_apic && if (!cpu_has_apic &&
APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
printk(KERN_ERR "BIOS bug, local APIC 0x%x not detected!...\n", pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
boot_cpu_physical_apicid); boot_cpu_physical_apicid);
clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC); clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
return -1; return -1;
} }
@ -1694,8 +1680,8 @@ void smp_spurious_interrupt(struct pt_regs *regs)
inc_irq_stat(irq_spurious_count); inc_irq_stat(irq_spurious_count);
/* see sw-dev-man vol 3, chapter 7.4.13.5 */ /* see sw-dev-man vol 3, chapter 7.4.13.5 */
printk(KERN_INFO "spurious APIC interrupt on CPU#%d, " pr_info("spurious APIC interrupt on CPU#%d, "
"should never happen.\n", smp_processor_id()); "should never happen.\n", smp_processor_id());
irq_exit(); irq_exit();
} }
@ -1717,17 +1703,18 @@ void smp_error_interrupt(struct pt_regs *regs)
ack_APIC_irq(); ack_APIC_irq();
atomic_inc(&irq_err_count); atomic_inc(&irq_err_count);
/* Here is what the APIC error bits mean: /*
0: Send CS error * Here is what the APIC error bits mean:
1: Receive CS error * 0: Send CS error
2: Send accept error * 1: Receive CS error
3: Receive accept error * 2: Send accept error
4: Reserved * 3: Receive accept error
5: Send illegal vector * 4: Reserved
6: Received illegal vector * 5: Send illegal vector
7: Illegal register address * 6: Received illegal vector
*/ * 7: Illegal register address
printk(KERN_DEBUG "APIC error on CPU%d: %02x(%02x)\n", */
pr_debug("APIC error on CPU%d: %02x(%02x)\n",
smp_processor_id(), v , v1); smp_processor_id(), v , v1);
irq_exit(); irq_exit();
} }
@ -1831,15 +1818,15 @@ void __cpuinit generic_processor_info(int apicid, int version)
* Validate version * Validate version
*/ */
if (version == 0x0) { if (version == 0x0) {
printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! " pr_warning("BIOS bug, APIC version is 0 for CPU#%d! "
"fixing up to 0x10. (tell your hw vendor)\n", "fixing up to 0x10. (tell your hw vendor)\n",
version); version);
version = 0x10; version = 0x10;
} }
apic_version[apicid] = version; apic_version[apicid] = version;
if (num_processors >= NR_CPUS) { if (num_processors >= NR_CPUS) {
printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached." pr_warning("WARNING: NR_CPUS limit of %i reached."
" Processor ignored.\n", NR_CPUS); " Processor ignored.\n", NR_CPUS);
return; return;
} }
@ -2202,7 +2189,7 @@ static int __init apic_set_verbosity(char *arg)
else if (strcmp("verbose", arg) == 0) else if (strcmp("verbose", arg) == 0)
apic_verbosity = APIC_VERBOSE; apic_verbosity = APIC_VERBOSE;
else { else {
printk(KERN_WARNING "APIC Verbosity level %s not recognised" pr_warning("APIC Verbosity level %s not recognised"
" use apic=verbose or apic=debug\n", arg); " use apic=verbose or apic=debug\n", arg);
return -EINVAL; return -EINVAL;
} }

View File

@ -131,6 +131,11 @@ static void report_broken_nmi(int cpu, int *prev_nmi_count)
atomic_dec(&nmi_active); atomic_dec(&nmi_active);
} }
static void __acpi_nmi_disable(void *__unused)
{
apic_write(APIC_LVT0, APIC_DM_NMI | APIC_LVT_MASKED);
}
int __init check_nmi_watchdog(void) int __init check_nmi_watchdog(void)
{ {
unsigned int *prev_nmi_count; unsigned int *prev_nmi_count;
@ -179,8 +184,12 @@ int __init check_nmi_watchdog(void)
kfree(prev_nmi_count); kfree(prev_nmi_count);
return 0; return 0;
error: error:
if (nmi_watchdog == NMI_IO_APIC && !timer_through_8259) if (nmi_watchdog == NMI_IO_APIC) {
disable_8259A_irq(0); if (!timer_through_8259)
disable_8259A_irq(0);
on_each_cpu(__acpi_nmi_disable, NULL, 1);
}
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
timer_ack = 0; timer_ack = 0;
#endif #endif
@ -285,11 +294,6 @@ void acpi_nmi_enable(void)
on_each_cpu(__acpi_nmi_enable, NULL, 1); on_each_cpu(__acpi_nmi_enable, NULL, 1);
} }
static void __acpi_nmi_disable(void *__unused)
{
apic_write(APIC_LVT0, APIC_DM_NMI | APIC_LVT_MASKED);
}
/* /*
* Disable timer based NMIs on all CPUs: * Disable timer based NMIs on all CPUs:
*/ */
@ -340,6 +344,8 @@ void stop_apic_nmi_watchdog(void *unused)
return; return;
if (nmi_watchdog == NMI_LOCAL_APIC) if (nmi_watchdog == NMI_LOCAL_APIC)
lapic_watchdog_stop(); lapic_watchdog_stop();
else
__acpi_nmi_disable(NULL);
__get_cpu_var(wd_enabled) = 0; __get_cpu_var(wd_enabled) = 0;
atomic_dec(&nmi_active); atomic_dec(&nmi_active);
} }
@ -465,6 +471,24 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
static void enable_ioapic_nmi_watchdog_single(void *unused)
{
__get_cpu_var(wd_enabled) = 1;
atomic_inc(&nmi_active);
__acpi_nmi_enable(NULL);
}
static void enable_ioapic_nmi_watchdog(void)
{
on_each_cpu(enable_ioapic_nmi_watchdog_single, NULL, 1);
touch_nmi_watchdog();
}
static void disable_ioapic_nmi_watchdog(void)
{
on_each_cpu(stop_apic_nmi_watchdog, NULL, 1);
}
static int __init setup_unknown_nmi_panic(char *str) static int __init setup_unknown_nmi_panic(char *str)
{ {
unknown_nmi_panic = 1; unknown_nmi_panic = 1;
@ -507,6 +531,11 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
enable_lapic_nmi_watchdog(); enable_lapic_nmi_watchdog();
else else
disable_lapic_nmi_watchdog(); disable_lapic_nmi_watchdog();
} else if (nmi_watchdog == NMI_IO_APIC) {
if (nmi_watchdog_enabled)
enable_ioapic_nmi_watchdog();
else
disable_ioapic_nmi_watchdog();
} else { } else {
printk(KERN_WARNING printk(KERN_WARNING
"NMI watchdog doesn't know what hardware to touch\n"); "NMI watchdog doesn't know what hardware to touch\n");

View File

@ -794,6 +794,9 @@ void __init setup_arch(char **cmdline_p)
printk(KERN_INFO "Command line: %s\n", boot_command_line); printk(KERN_INFO "Command line: %s\n", boot_command_line);
#endif #endif
/* VMI may relocate the fixmap; do this before touching ioremap area */
vmi_init();
early_cpu_init(); early_cpu_init();
early_ioremap_init(); early_ioremap_init();
@ -880,13 +883,8 @@ void __init setup_arch(char **cmdline_p)
check_efer(); check_efer();
#endif #endif
#if defined(CONFIG_VMI) && defined(CONFIG_X86_32) /* Must be before kernel pagetables are setup */
/* vmi_activate();
* Must be before kernel pagetables are setup
* or fixmap area is touched.
*/
vmi_init();
#endif
/* after early param, so could get panic from serial */ /* after early param, so could get panic from serial */
reserve_early_setup_data(); reserve_early_setup_data();

View File

@ -294,9 +294,7 @@ static void __cpuinit start_secondary(void *unused)
* fragile that we want to limit the things done here to the * fragile that we want to limit the things done here to the
* most necessary things. * most necessary things.
*/ */
#ifdef CONFIG_VMI
vmi_bringup(); vmi_bringup();
#endif
cpu_init(); cpu_init();
preempt_disable(); preempt_disable();
smp_callin(); smp_callin();

View File

@ -960,8 +960,6 @@ static inline int __init activate_vmi(void)
void __init vmi_init(void) void __init vmi_init(void)
{ {
unsigned long flags;
if (!vmi_rom) if (!vmi_rom)
probe_vmi_rom(); probe_vmi_rom();
else else
@ -973,13 +971,21 @@ void __init vmi_init(void)
reserve_top_address(-vmi_rom->virtual_top); reserve_top_address(-vmi_rom->virtual_top);
local_irq_save(flags);
activate_vmi();
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
/* This is virtual hardware; timer routing is wired correctly */ /* This is virtual hardware; timer routing is wired correctly */
no_timer_check = 1; no_timer_check = 1;
#endif #endif
}
void vmi_activate(void)
{
unsigned long flags;
if (!vmi_rom)
return;
local_irq_save(flags);
activate_vmi();
local_irq_restore(flags & X86_EFLAGS_IF); local_irq_restore(flags & X86_EFLAGS_IF);
} }

View File

@ -53,10 +53,17 @@ do_async_xor(struct dma_chan *chan, struct page *dest, struct page **src_list,
int xor_src_cnt; int xor_src_cnt;
dma_addr_t dma_dest; dma_addr_t dma_dest;
dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_FROM_DEVICE); /* map the dest bidrectional in case it is re-used as a source */
for (i = 0; i < src_cnt; i++) dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_BIDIRECTIONAL);
for (i = 0; i < src_cnt; i++) {
/* only map the dest once */
if (unlikely(src_list[i] == dest)) {
dma_src[i] = dma_dest;
continue;
}
dma_src[i] = dma_map_page(dma->dev, src_list[i], offset, dma_src[i] = dma_map_page(dma->dev, src_list[i], offset,
len, DMA_TO_DEVICE); len, DMA_TO_DEVICE);
}
while (src_cnt) { while (src_cnt) {
async_flags = flags; async_flags = flags;

View File

@ -824,32 +824,36 @@ static int __init toshiba_acpi_init(void)
toshiba_acpi_exit(); toshiba_acpi_exit();
return -ENOMEM; return -ENOMEM;
} }
}
/* Register input device for kill switch */ /* Register input device for kill switch */
toshiba_acpi.poll_dev = input_allocate_polled_device(); toshiba_acpi.poll_dev = input_allocate_polled_device();
if (!toshiba_acpi.poll_dev) { if (!toshiba_acpi.poll_dev) {
printk(MY_ERR "unable to allocate kill-switch input device\n"); printk(MY_ERR
toshiba_acpi_exit(); "unable to allocate kill-switch input device\n");
return -ENOMEM; toshiba_acpi_exit();
} return -ENOMEM;
toshiba_acpi.poll_dev->private = &toshiba_acpi; }
toshiba_acpi.poll_dev->poll = bt_poll_rfkill; toshiba_acpi.poll_dev->private = &toshiba_acpi;
toshiba_acpi.poll_dev->poll_interval = 1000; /* msecs */ toshiba_acpi.poll_dev->poll = bt_poll_rfkill;
toshiba_acpi.poll_dev->poll_interval = 1000; /* msecs */
toshiba_acpi.poll_dev->input->name = toshiba_acpi.rfk_name; toshiba_acpi.poll_dev->input->name = toshiba_acpi.rfk_name;
toshiba_acpi.poll_dev->input->id.bustype = BUS_HOST; toshiba_acpi.poll_dev->input->id.bustype = BUS_HOST;
toshiba_acpi.poll_dev->input->id.vendor = 0x0930; /* Toshiba USB ID */ /* Toshiba USB ID */
set_bit(EV_SW, toshiba_acpi.poll_dev->input->evbit); toshiba_acpi.poll_dev->input->id.vendor = 0x0930;
set_bit(SW_RFKILL_ALL, toshiba_acpi.poll_dev->input->swbit); set_bit(EV_SW, toshiba_acpi.poll_dev->input->evbit);
input_report_switch(toshiba_acpi.poll_dev->input, SW_RFKILL_ALL, TRUE); set_bit(SW_RFKILL_ALL, toshiba_acpi.poll_dev->input->swbit);
input_sync(toshiba_acpi.poll_dev->input); input_report_switch(toshiba_acpi.poll_dev->input,
SW_RFKILL_ALL, TRUE);
input_sync(toshiba_acpi.poll_dev->input);
ret = input_register_polled_device(toshiba_acpi.poll_dev); ret = input_register_polled_device(toshiba_acpi.poll_dev);
if (ret) { if (ret) {
printk(MY_ERR "unable to register kill-switch input device\n"); printk(MY_ERR
toshiba_acpi_exit(); "unable to register kill-switch input device\n");
return ret; toshiba_acpi_exit();
return ret;
}
} }
return 0; return 0;

View File

@ -4050,17 +4050,70 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
{ "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ },
/* Seagate NCQ + FLUSH CACHE firmware bug */ /* Seagate NCQ + FLUSH CACHE firmware bug */
{ "ST31500341AS", "9JU138", ATA_HORKAGE_NONCQ | { "ST31500341AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
{ "ST31000333AS", "9FZ136", ATA_HORKAGE_NONCQ | { "ST31500341AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "9FZ164", ATA_HORKAGE_NONCQ | { "ST31500341AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "9FZ134", ATA_HORKAGE_NONCQ | { "ST31500341AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "9FZ182", ATA_HORKAGE_NONCQ | { "ST31500341AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "9FZ162", ATA_HORKAGE_NONCQ |
{ "ST31000333AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST31000333AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST31000333AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST31000333AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST31000333AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640623AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3640323AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320813AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "SD15", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "SD16", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "SD17", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "SD18", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN },
{ "ST3320613AS", "SD19", ATA_HORKAGE_NONCQ |
ATA_HORKAGE_FIRMWARE_WARN }, ATA_HORKAGE_FIRMWARE_WARN },
/* Blacklist entries taken from Silicon Image 3124/3132 /* Blacklist entries taken from Silicon Image 3124/3132

View File

@ -183,7 +183,9 @@ static unsigned long hpt366_filter(struct ata_device *adev, unsigned long mask)
mask &= ~(0xF8 << ATA_SHIFT_UDMA); mask &= ~(0xF8 << ATA_SHIFT_UDMA);
if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4)) if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4))
mask &= ~(0xF0 << ATA_SHIFT_UDMA); mask &= ~(0xF0 << ATA_SHIFT_UDMA);
} } else if (adev->class == ATA_DEV_ATAPI)
mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
return ata_bmdma_mode_filter(adev, mask); return ata_bmdma_mode_filter(adev, mask);
} }
@ -211,11 +213,15 @@ static u32 hpt36x_find_mode(struct ata_port *ap, int speed)
static int hpt36x_cable_detect(struct ata_port *ap) static int hpt36x_cable_detect(struct ata_port *ap)
{ {
u8 ata66;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
u8 ata66;
/*
* Each channel of pata_hpt366 occupies separate PCI function
* as the primary channel and bit1 indicates the cable type.
*/
pci_read_config_byte(pdev, 0x5A, &ata66); pci_read_config_byte(pdev, 0x5A, &ata66);
if (ata66 & (1 << ap->port_no)) if (ata66 & 2)
return ATA_CBL_PATA40; return ATA_CBL_PATA40;
return ATA_CBL_PATA80; return ATA_CBL_PATA80;
} }

View File

@ -2081,10 +2081,6 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
if (!q) if (!q)
return -ENXIO; return -ENXIO;
rq = blk_get_request(q, READ, GFP_KERNEL);
if (!rq)
return -ENOMEM;
cdi->last_sense = 0; cdi->last_sense = 0;
while (nframes) { while (nframes) {
@ -2096,9 +2092,17 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
len = nr * CD_FRAMESIZE_RAW; len = nr * CD_FRAMESIZE_RAW;
ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL); rq = blk_get_request(q, READ, GFP_KERNEL);
if (ret) if (!rq) {
ret = -ENOMEM;
break; break;
}
ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL);
if (ret) {
blk_put_request(rq);
break;
}
rq->cmd[0] = GPCMD_READ_CD; rq->cmd[0] = GPCMD_READ_CD;
rq->cmd[1] = 1 << 2; rq->cmd[1] = 1 << 2;
@ -2124,6 +2128,7 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
if (blk_rq_unmap_user(bio)) if (blk_rq_unmap_user(bio))
ret = -EFAULT; ret = -EFAULT;
blk_put_request(rq);
if (ret) if (ret)
break; break;
@ -2133,7 +2138,6 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
ubuf += len; ubuf += len;
} }
blk_put_request(rq);
return ret; return ret;
} }

View File

@ -27,7 +27,7 @@
0x0c U+2640 0x0c U+2640
0x0d U+266a 0x0d U+266a
0x0e U+266b 0x0e U+266b
0x0f U+263c 0x0f U+263c U+00a4
0x10 U+25b6 U+25ba 0x10 U+25b6 U+25ba
0x11 U+25c0 U+25c4 0x11 U+25c0 U+25c4
0x12 U+2195 0x12 U+2195
@ -55,7 +55,7 @@
0x24 U+0024 0x24 U+0024
0x25 U+0025 0x25 U+0025
0x26 U+0026 0x26 U+0026
0x27 U+0027 0x27 U+0027 U+00b4
0x28 U+0028 0x28 U+0028
0x29 U+0029 0x29 U+0029
0x2a U+002a 0x2a U+002a
@ -84,7 +84,7 @@
0x41 U+0041 U+00c0 U+00c1 U+00c2 U+00c3 0x41 U+0041 U+00c0 U+00c1 U+00c2 U+00c3
0x42 U+0042 0x42 U+0042
0x43 U+0043 U+00a9 0x43 U+0043 U+00a9
0x44 U+0044 0x44 U+0044 U+00d0
0x45 U+0045 U+00c8 U+00ca U+00cb 0x45 U+0045 U+00c8 U+00ca U+00cb
0x46 U+0046 0x46 U+0046
0x47 U+0047 0x47 U+0047
@ -140,7 +140,7 @@
0x79 U+0079 U+00fd 0x79 U+0079 U+00fd
0x7a U+007a 0x7a U+007a
0x7b U+007b 0x7b U+007b
0x7c U+007c U+00a5 0x7c U+007c U+00a6
0x7d U+007d 0x7d U+007d
0x7e U+007e 0x7e U+007e
# #
@ -263,10 +263,10 @@
0xe8 U+03a6 U+00d8 0xe8 U+03a6 U+00d8
0xe9 U+0398 0xe9 U+0398
0xea U+03a9 U+2126 0xea U+03a9 U+2126
0xeb U+03b4 0xeb U+03b4 U+00f0
0xec U+221e 0xec U+221e
0xed U+03c6 U+00f8 0xed U+03c6 U+00f8
0xee U+03b5 0xee U+03b5 U+2208
0xef U+2229 0xef U+2229
0xf0 U+2261 0xf0 U+2261
0xf1 U+00b1 0xf1 U+00b1

View File

@ -2274,7 +2274,7 @@ rescan_last_byte:
continue; /* nothing to display */ continue; /* nothing to display */
} }
/* Glyph not found */ /* Glyph not found */
if ((!(vc->vc_utf && !vc->vc_disp_ctrl) || c < 128) && !(c & ~charmask)) { if ((!(vc->vc_utf && !vc->vc_disp_ctrl) && c < 128) && !(c & ~charmask)) {
/* In legacy mode use the glyph we get by a 1:1 mapping. /* In legacy mode use the glyph we get by a 1:1 mapping.
This would make absolutely no sense with Unicode in mind, This would make absolutely no sense with Unicode in mind,
but do this for ASCII characters since a font may lack but do this for ASCII characters since a font may lack

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2008 Xilinx Inc. * (c) Copyright 2003-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2008 Xilinx Inc. * (c) Copyright 2003-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2002 Xilinx Inc., Systems Engineering Group * (c) Copyright 2002 Xilinx Inc., Systems Engineering Group
* (c) Copyright 2004 Xilinx Inc., Systems Engineering Group * (c) Copyright 2004 Xilinx Inc., Systems Engineering Group
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.

View File

@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2007 Xilinx Inc. * (c) Copyright 2003-2007 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *

View File

@ -388,7 +388,10 @@ int dma_async_device_register(struct dma_device *device)
init_completion(&device->done); init_completion(&device->done);
kref_init(&device->refcount); kref_init(&device->refcount);
mutex_lock(&dma_list_mutex);
device->dev_id = id++; device->dev_id = id++;
mutex_unlock(&dma_list_mutex);
/* represent channels in sysfs. Probably want devs too */ /* represent channels in sysfs. Probably want devs too */
list_for_each_entry(chan, &device->channels, device_node) { list_for_each_entry(chan, &device->channels, device_node) {

View File

@ -1341,10 +1341,12 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan)
*/ */
#define IOAT_TEST_SIZE 2000 #define IOAT_TEST_SIZE 2000
DECLARE_COMPLETION(test_completion);
static void ioat_dma_test_callback(void *dma_async_param) static void ioat_dma_test_callback(void *dma_async_param)
{ {
printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n", printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n",
dma_async_param); dma_async_param);
complete(&test_completion);
} }
/** /**
@ -1410,7 +1412,8 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
goto free_resources; goto free_resources;
} }
device->common.device_issue_pending(dma_chan); device->common.device_issue_pending(dma_chan);
msleep(1);
wait_for_completion_timeout(&test_completion, msecs_to_jiffies(3000));
if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL) if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL)
!= DMA_SUCCESS) { != DMA_SUCCESS) {

View File

@ -85,18 +85,28 @@ iop_adma_run_tx_complete_actions(struct iop_adma_desc_slot *desc,
enum dma_ctrl_flags flags = desc->async_tx.flags; enum dma_ctrl_flags flags = desc->async_tx.flags;
u32 src_cnt; u32 src_cnt;
dma_addr_t addr; dma_addr_t addr;
dma_addr_t dest;
src_cnt = unmap->unmap_src_cnt;
dest = iop_desc_get_dest_addr(unmap, iop_chan);
if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) { if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
addr = iop_desc_get_dest_addr(unmap, iop_chan); enum dma_data_direction dir;
dma_unmap_page(dev, addr, len, DMA_FROM_DEVICE);
if (src_cnt > 1) /* is xor? */
dir = DMA_BIDIRECTIONAL;
else
dir = DMA_FROM_DEVICE;
dma_unmap_page(dev, dest, len, dir);
} }
if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) { if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
src_cnt = unmap->unmap_src_cnt;
while (src_cnt--) { while (src_cnt--) {
addr = iop_desc_get_src_addr(unmap, addr = iop_desc_get_src_addr(unmap,
iop_chan, iop_chan,
src_cnt); src_cnt);
if (addr == dest)
continue;
dma_unmap_page(dev, addr, len, dma_unmap_page(dev, addr, len,
DMA_TO_DEVICE); DMA_TO_DEVICE);
} }

View File

@ -311,17 +311,26 @@ mv_xor_run_tx_complete_actions(struct mv_xor_desc_slot *desc,
enum dma_ctrl_flags flags = desc->async_tx.flags; enum dma_ctrl_flags flags = desc->async_tx.flags;
u32 src_cnt; u32 src_cnt;
dma_addr_t addr; dma_addr_t addr;
dma_addr_t dest;
src_cnt = unmap->unmap_src_cnt;
dest = mv_desc_get_dest_addr(unmap);
if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) { if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
addr = mv_desc_get_dest_addr(unmap); enum dma_data_direction dir;
dma_unmap_page(dev, addr, len, DMA_FROM_DEVICE);
if (src_cnt > 1) /* is xor ? */
dir = DMA_BIDIRECTIONAL;
else
dir = DMA_FROM_DEVICE;
dma_unmap_page(dev, dest, len, dir);
} }
if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) { if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
src_cnt = unmap->unmap_src_cnt;
while (src_cnt--) { while (src_cnt--) {
addr = mv_desc_get_src_addr(unmap, addr = mv_desc_get_src_addr(unmap,
src_cnt); src_cnt);
if (addr == dest)
continue;
dma_unmap_page(dev, addr, len, dma_unmap_page(dev, addr, len,
DMA_TO_DEVICE); DMA_TO_DEVICE);
} }

View File

@ -365,6 +365,7 @@ static int cpm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
pmsg = &msgs[tptr]; pmsg = &msgs[tptr];
if (pmsg->flags & I2C_M_RD) if (pmsg->flags & I2C_M_RD)
ret = wait_event_interruptible_timeout(cpm->i2c_wait, ret = wait_event_interruptible_timeout(cpm->i2c_wait,
(in_be16(&tbdf[tptr].cbd_sc) & BD_SC_NAK) ||
!(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY), !(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY),
1 * HZ); 1 * HZ);
else else

View File

@ -92,7 +92,7 @@ static void highlander_i2c_setup(struct highlander_i2c_dev *dev)
static void smbus_write_data(u8 *src, u16 *dst, int len) static void smbus_write_data(u8 *src, u16 *dst, int len)
{ {
for (; len > 1; len -= 2) { for (; len > 1; len -= 2) {
*dst++ = be16_to_cpup((u16 *)src); *dst++ = be16_to_cpup((__be16 *)src);
src += 2; src += 2;
} }
@ -103,7 +103,7 @@ static void smbus_write_data(u8 *src, u16 *dst, int len)
static void smbus_read_data(u16 *src, u8 *dst, int len) static void smbus_read_data(u16 *src, u8 *dst, int len)
{ {
for (; len > 1; len -= 2) { for (; len > 1; len -= 2) {
*(u16 *)dst = cpu_to_be16p(src++); *(__be16 *)dst = cpu_to_be16p(src++);
dst += 2; dst += 2;
} }

View File

@ -486,7 +486,7 @@ static enum pmcmsptwi_xfer_result pmcmsptwi_xfer_cmd(
if (cmd->type == MSP_TWI_CMD_WRITE || if (cmd->type == MSP_TWI_CMD_WRITE ||
cmd->type == MSP_TWI_CMD_WRITE_READ) { cmd->type == MSP_TWI_CMD_WRITE_READ) {
__be64 tmp = cpu_to_be64p((u64 *)cmd->write_data); u64 tmp = be64_to_cpup((__be64 *)cmd->write_data);
tmp >>= (MSP_MAX_BYTES_PER_RW - cmd->write_len) * 8; tmp >>= (MSP_MAX_BYTES_PER_RW - cmd->write_len) * 8;
dev_dbg(&pmcmsptwi_adapter.dev, "Writing 0x%016llx\n", tmp); dev_dbg(&pmcmsptwi_adapter.dev, "Writing 0x%016llx\n", tmp);
pmcmsptwi_writel(tmp & 0x00000000ffffffffLL, pmcmsptwi_writel(tmp & 0x00000000ffffffffLL,

View File

@ -56,6 +56,7 @@ enum s3c24xx_i2c_state {
struct s3c24xx_i2c { struct s3c24xx_i2c {
spinlock_t lock; spinlock_t lock;
wait_queue_head_t wait; wait_queue_head_t wait;
unsigned int suspended:1;
struct i2c_msg *msg; struct i2c_msg *msg;
unsigned int msg_num; unsigned int msg_num;
@ -507,7 +508,7 @@ static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, struct i2c_msg *msgs, int
unsigned long timeout; unsigned long timeout;
int ret; int ret;
if (!(readl(i2c->regs + S3C2410_IICCON) & S3C2410_IICCON_IRQEN)) if (i2c->suspended)
return -EIO; return -EIO;
ret = s3c24xx_i2c_set_master(i2c); ret = s3c24xx_i2c_set_master(i2c);
@ -986,17 +987,26 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev)
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int s3c24xx_i2c_suspend_late(struct platform_device *dev,
pm_message_t msg)
{
struct s3c24xx_i2c *i2c = platform_get_drvdata(dev);
i2c->suspended = 1;
return 0;
}
static int s3c24xx_i2c_resume(struct platform_device *dev) static int s3c24xx_i2c_resume(struct platform_device *dev)
{ {
struct s3c24xx_i2c *i2c = platform_get_drvdata(dev); struct s3c24xx_i2c *i2c = platform_get_drvdata(dev);
if (i2c != NULL) i2c->suspended = 0;
s3c24xx_i2c_init(i2c); s3c24xx_i2c_init(i2c);
return 0; return 0;
} }
#else #else
#define s3c24xx_i2c_suspend_late NULL
#define s3c24xx_i2c_resume NULL #define s3c24xx_i2c_resume NULL
#endif #endif
@ -1005,6 +1015,7 @@ static int s3c24xx_i2c_resume(struct platform_device *dev)
static struct platform_driver s3c2410_i2c_driver = { static struct platform_driver s3c2410_i2c_driver = {
.probe = s3c24xx_i2c_probe, .probe = s3c24xx_i2c_probe,
.remove = s3c24xx_i2c_remove, .remove = s3c24xx_i2c_remove,
.suspend_late = s3c24xx_i2c_suspend_late,
.resume = s3c24xx_i2c_resume, .resume = s3c24xx_i2c_resume,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
@ -1015,6 +1026,7 @@ static struct platform_driver s3c2410_i2c_driver = {
static struct platform_driver s3c2440_i2c_driver = { static struct platform_driver s3c2440_i2c_driver = {
.probe = s3c24xx_i2c_probe, .probe = s3c24xx_i2c_probe,
.remove = s3c24xx_i2c_remove, .remove = s3c24xx_i2c_remove,
.suspend_late = s3c24xx_i2c_suspend_late,
.resume = s3c24xx_i2c_resume, .resume = s3c24xx_i2c_resume,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,

View File

@ -115,8 +115,14 @@ static int nodemgr_bus_read(struct csr1212_csr *csr, u64 addr, u16 length,
return error; return error;
} }
#define OUI_FREECOM_TECHNOLOGIES_GMBH 0x0001db
static int nodemgr_get_max_rom(quadlet_t *bus_info_data, void *__ci) static int nodemgr_get_max_rom(quadlet_t *bus_info_data, void *__ci)
{ {
/* Freecom FireWire Hard Drive firmware bug */
if (be32_to_cpu(bus_info_data[3]) >> 8 == OUI_FREECOM_TECHNOLOGIES_GMBH)
return 0;
return (be32_to_cpu(bus_info_data[2]) >> 8) & 0x3; return (be32_to_cpu(bus_info_data[2]) >> 8) & 0x3;
} }

View File

@ -543,9 +543,9 @@ bnx2_free_rx_mem(struct bnx2 *bp)
for (j = 0; j < bp->rx_max_pg_ring; j++) { for (j = 0; j < bp->rx_max_pg_ring; j++) {
if (rxr->rx_pg_desc_ring[j]) if (rxr->rx_pg_desc_ring[j])
pci_free_consistent(bp->pdev, RXBD_RING_SIZE, pci_free_consistent(bp->pdev, RXBD_RING_SIZE,
rxr->rx_pg_desc_ring[i], rxr->rx_pg_desc_ring[j],
rxr->rx_pg_desc_mapping[i]); rxr->rx_pg_desc_mapping[j]);
rxr->rx_pg_desc_ring[i] = NULL; rxr->rx_pg_desc_ring[j] = NULL;
} }
if (rxr->rx_pg_ring) if (rxr->rx_pg_ring)
vfree(rxr->rx_pg_ring); vfree(rxr->rx_pg_ring);

View File

@ -1893,12 +1893,17 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
ctrl |= E1000_CTRL_PHY_RST; ctrl |= E1000_CTRL_PHY_RST;
} }
ret_val = e1000_acquire_swflag_ich8lan(hw); ret_val = e1000_acquire_swflag_ich8lan(hw);
/* Whether or not the swflag was acquired, we need to reset the part */
hw_dbg(hw, "Issuing a global reset to ich8lan"); hw_dbg(hw, "Issuing a global reset to ich8lan");
ew32(CTRL, (ctrl | E1000_CTRL_RST)); ew32(CTRL, (ctrl | E1000_CTRL_RST));
msleep(20); msleep(20);
/* release the swflag because it is not reset by hardware reset */ if (!ret_val) {
e1000_release_swflag_ich8lan(hw); /* release the swflag because it is not reset by
* hardware reset
*/
e1000_release_swflag_ich8lan(hw);
}
ret_val = e1000e_get_auto_rd_done(hw); ret_val = e1000e_get_auto_rd_done(hw);
if (ret_val) { if (ret_val) {

View File

@ -959,7 +959,7 @@ static void enc28j60_hw_rx(struct net_device *ndev)
ndev->stats.rx_packets++; ndev->stats.rx_packets++;
ndev->stats.rx_bytes += len; ndev->stats.rx_bytes += len;
ndev->last_rx = jiffies; ndev->last_rx = jiffies;
netif_rx(skb); netif_rx_ni(skb);
} }
} }
/* /*

View File

@ -22,7 +22,7 @@
*/ */
#ifndef __JME_H_INCLUDED__ #ifndef __JME_H_INCLUDED__
#define __JME_H_INCLUDEE__ #define __JME_H_INCLUDED__
#define DRV_NAME "jme" #define DRV_NAME "jme"
#define DRV_VERSION "1.0.3" #define DRV_VERSION "1.0.3"

View File

@ -105,8 +105,6 @@ int mdiobus_register(struct mii_bus *bus)
return -EINVAL; return -EINVAL;
} }
bus->state = MDIOBUS_REGISTERED;
mutex_init(&bus->mdio_lock); mutex_init(&bus->mdio_lock);
if (bus->reset) if (bus->reset)
@ -123,6 +121,9 @@ int mdiobus_register(struct mii_bus *bus)
} }
} }
if (!err)
bus->state = MDIOBUS_REGISTERED;
pr_info("%s: probed\n", bus->name); pr_info("%s: probed\n", bus->name);
return err; return err;

View File

@ -1509,6 +1509,11 @@ static int __netdev_rx(struct net_device *dev, int *quota)
desc->status = 0; desc->status = 0;
np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE;
} }
if (*quota == 0) { /* out of rx quota */
retcode = 1;
goto out;
}
writew(np->rx_done, np->base + CompletionQConsumerIdx); writew(np->rx_done, np->base + CompletionQConsumerIdx);
out: out:

View File

@ -1142,6 +1142,70 @@ static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
static void gem_pcs_reset(struct gem *gp)
{
int limit;
u32 val;
/* Reset PCS unit. */
val = readl(gp->regs + PCS_MIICTRL);
val |= PCS_MIICTRL_RST;
writel(val, gp->regs + PCS_MIICTRL);
limit = 32;
while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) {
udelay(100);
if (limit-- <= 0)
break;
}
if (limit <= 0)
printk(KERN_WARNING "%s: PCS reset bit would not clear.\n",
gp->dev->name);
}
static void gem_pcs_reinit_adv(struct gem *gp)
{
u32 val;
/* Make sure PCS is disabled while changing advertisement
* configuration.
*/
val = readl(gp->regs + PCS_CFG);
val &= ~(PCS_CFG_ENABLE | PCS_CFG_TO);
writel(val, gp->regs + PCS_CFG);
/* Advertise all capabilities except assymetric
* pause.
*/
val = readl(gp->regs + PCS_MIIADV);
val |= (PCS_MIIADV_FD | PCS_MIIADV_HD |
PCS_MIIADV_SP | PCS_MIIADV_AP);
writel(val, gp->regs + PCS_MIIADV);
/* Enable and restart auto-negotiation, disable wrapback/loopback,
* and re-enable PCS.
*/
val = readl(gp->regs + PCS_MIICTRL);
val |= (PCS_MIICTRL_RAN | PCS_MIICTRL_ANE);
val &= ~PCS_MIICTRL_WB;
writel(val, gp->regs + PCS_MIICTRL);
val = readl(gp->regs + PCS_CFG);
val |= PCS_CFG_ENABLE;
writel(val, gp->regs + PCS_CFG);
/* Make sure serialink loopback is off. The meaning
* of this bit is logically inverted based upon whether
* you are in Serialink or SERDES mode.
*/
val = readl(gp->regs + PCS_SCTRL);
if (gp->phy_type == phy_serialink)
val &= ~PCS_SCTRL_LOOP;
else
val |= PCS_SCTRL_LOOP;
writel(val, gp->regs + PCS_SCTRL);
}
#define STOP_TRIES 32 #define STOP_TRIES 32
/* Must be invoked under gp->lock and gp->tx_lock. */ /* Must be invoked under gp->lock and gp->tx_lock. */
@ -1168,6 +1232,9 @@ static void gem_reset(struct gem *gp)
if (limit <= 0) if (limit <= 0)
printk(KERN_ERR "%s: SW reset is ghetto.\n", gp->dev->name); printk(KERN_ERR "%s: SW reset is ghetto.\n", gp->dev->name);
if (gp->phy_type == phy_serialink || gp->phy_type == phy_serdes)
gem_pcs_reinit_adv(gp);
} }
/* Must be invoked under gp->lock and gp->tx_lock. */ /* Must be invoked under gp->lock and gp->tx_lock. */
@ -1324,7 +1391,7 @@ static int gem_set_link_modes(struct gem *gp)
gp->phy_type == phy_serdes) { gp->phy_type == phy_serdes) {
u32 pcs_lpa = readl(gp->regs + PCS_MIILP); u32 pcs_lpa = readl(gp->regs + PCS_MIILP);
if (pcs_lpa & PCS_MIIADV_FD) if ((pcs_lpa & PCS_MIIADV_FD) || gp->phy_type == phy_serdes)
full_duplex = 1; full_duplex = 1;
speed = SPEED_1000; speed = SPEED_1000;
} }
@ -1488,6 +1555,9 @@ static void gem_link_timer(unsigned long data)
val = readl(gp->regs + PCS_MIISTAT); val = readl(gp->regs + PCS_MIISTAT);
if ((val & PCS_MIISTAT_LS) != 0) { if ((val & PCS_MIISTAT_LS) != 0) {
if (gp->lstate == link_up)
goto restart;
gp->lstate = link_up; gp->lstate = link_up;
netif_carrier_on(gp->dev); netif_carrier_on(gp->dev);
(void)gem_set_link_modes(gp); (void)gem_set_link_modes(gp);
@ -1708,61 +1778,8 @@ static void gem_init_phy(struct gem *gp)
if (gp->phy_mii.def && gp->phy_mii.def->ops->init) if (gp->phy_mii.def && gp->phy_mii.def->ops->init)
gp->phy_mii.def->ops->init(&gp->phy_mii); gp->phy_mii.def->ops->init(&gp->phy_mii);
} else { } else {
u32 val; gem_pcs_reset(gp);
int limit; gem_pcs_reinit_adv(gp);
/* Reset PCS unit. */
val = readl(gp->regs + PCS_MIICTRL);
val |= PCS_MIICTRL_RST;
writel(val, gp->regs + PCS_MIICTRL);
limit = 32;
while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) {
udelay(100);
if (limit-- <= 0)
break;
}
if (limit <= 0)
printk(KERN_WARNING "%s: PCS reset bit would not clear.\n",
gp->dev->name);
/* Make sure PCS is disabled while changing advertisement
* configuration.
*/
val = readl(gp->regs + PCS_CFG);
val &= ~(PCS_CFG_ENABLE | PCS_CFG_TO);
writel(val, gp->regs + PCS_CFG);
/* Advertise all capabilities except assymetric
* pause.
*/
val = readl(gp->regs + PCS_MIIADV);
val |= (PCS_MIIADV_FD | PCS_MIIADV_HD |
PCS_MIIADV_SP | PCS_MIIADV_AP);
writel(val, gp->regs + PCS_MIIADV);
/* Enable and restart auto-negotiation, disable wrapback/loopback,
* and re-enable PCS.
*/
val = readl(gp->regs + PCS_MIICTRL);
val |= (PCS_MIICTRL_RAN | PCS_MIICTRL_ANE);
val &= ~PCS_MIICTRL_WB;
writel(val, gp->regs + PCS_MIICTRL);
val = readl(gp->regs + PCS_CFG);
val |= PCS_CFG_ENABLE;
writel(val, gp->regs + PCS_CFG);
/* Make sure serialink loopback is off. The meaning
* of this bit is logically inverted based upon whether
* you are in Serialink or SERDES mode.
*/
val = readl(gp->regs + PCS_SCTRL);
if (gp->phy_type == phy_serialink)
val &= ~PCS_SCTRL_LOOP;
else
val |= PCS_SCTRL_LOOP;
writel(val, gp->regs + PCS_SCTRL);
} }
/* Default aneg parameters */ /* Default aneg parameters */
@ -2680,6 +2697,21 @@ static int gem_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
cmd->speed = 0; cmd->speed = 0;
cmd->duplex = cmd->port = cmd->phy_address = cmd->duplex = cmd->port = cmd->phy_address =
cmd->transceiver = cmd->autoneg = 0; cmd->transceiver = cmd->autoneg = 0;
/* serdes means usually a Fibre connector, with most fixed */
if (gp->phy_type == phy_serdes) {
cmd->port = PORT_FIBRE;
cmd->supported = (SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full |
SUPPORTED_FIBRE | SUPPORTED_Autoneg |
SUPPORTED_Pause | SUPPORTED_Asym_Pause);
cmd->advertising = cmd->supported;
cmd->transceiver = XCVR_INTERNAL;
if (gp->lstate == link_up)
cmd->speed = SPEED_1000;
cmd->duplex = DUPLEX_FULL;
cmd->autoneg = 1;
}
} }
cmd->maxtxpkt = cmd->maxrxpkt = 0; cmd->maxtxpkt = cmd->maxrxpkt = 0;

View File

@ -1098,6 +1098,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
dma_addr_t tail_list_phys; dma_addr_t tail_list_phys;
u8 *tail_buffer; u8 *tail_buffer;
unsigned long flags; unsigned long flags;
unsigned int txlen;
if ( ! priv->phyOnline ) { if ( ! priv->phyOnline ) {
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n",
@ -1108,6 +1109,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
if (skb_padto(skb, TLAN_MIN_FRAME_SIZE)) if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
return 0; return 0;
txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE);
tail_list = priv->txList + priv->txTail; tail_list = priv->txList + priv->txTail;
tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail;
@ -1125,16 +1127,16 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
if ( bbuf ) { if ( bbuf ) {
tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE );
skb_copy_from_linear_data(skb, tail_buffer, skb->len); skb_copy_from_linear_data(skb, tail_buffer, txlen);
} else { } else {
tail_list->buffer[0].address = pci_map_single(priv->pciDev, tail_list->buffer[0].address = pci_map_single(priv->pciDev,
skb->data, skb->len, skb->data, txlen,
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
TLan_StoreSKB(tail_list, skb); TLan_StoreSKB(tail_list, skb);
} }
tail_list->frameSize = (u16) skb->len; tail_list->frameSize = (u16) txlen;
tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len; tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen;
tail_list->buffer[1].count = 0; tail_list->buffer[1].count = 0;
tail_list->buffer[1].address = 0; tail_list->buffer[1].address = 0;
@ -1431,7 +1433,9 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int )
if ( ! bbuf ) { if ( ! bbuf ) {
struct sk_buff *skb = TLan_GetSKB(head_list); struct sk_buff *skb = TLan_GetSKB(head_list);
pci_unmap_single(priv->pciDev, head_list->buffer[0].address, pci_unmap_single(priv->pciDev, head_list->buffer[0].address,
skb->len, PCI_DMA_TODEVICE); max(skb->len,
(unsigned int)TLAN_MIN_FRAME_SIZE),
PCI_DMA_TODEVICE);
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
head_list->buffer[8].address = 0; head_list->buffer[8].address = 0;
head_list->buffer[9].address = 0; head_list->buffer[9].address = 0;
@ -2055,9 +2059,12 @@ static void TLan_FreeLists( struct net_device *dev )
list = priv->txList + i; list = priv->txList + i;
skb = TLan_GetSKB(list); skb = TLan_GetSKB(list);
if ( skb ) { if ( skb ) {
pci_unmap_single(priv->pciDev, pci_unmap_single(
list->buffer[0].address, skb->len, priv->pciDev,
PCI_DMA_TODEVICE); list->buffer[0].address,
max(skb->len,
(unsigned int)TLAN_MIN_FRAME_SIZE),
PCI_DMA_TODEVICE);
dev_kfree_skb_any( skb ); dev_kfree_skb_any( skb );
list->buffer[8].address = 0; list->buffer[8].address = 0;
list->buffer[9].address = 0; list->buffer[9].address = 0;

View File

@ -334,6 +334,6 @@ static void __exit bfin_cf_exit(void)
module_init(bfin_cf_init); module_init(bfin_cf_init);
module_exit(bfin_cf_exit); module_exit(bfin_cf_exit);
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>") MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
MODULE_DESCRIPTION("BFIN CF/PCMCIA Driver"); MODULE_DESCRIPTION("BFIN CF/PCMCIA Driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

View File

@ -107,6 +107,7 @@ static int hp_sw_tur(struct scsi_device *sdev, struct hp_sw_dh_data *h)
struct request *req; struct request *req;
int ret; int ret;
retry:
req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO);
if (!req) if (!req)
return SCSI_DH_RES_TEMP_UNAVAIL; return SCSI_DH_RES_TEMP_UNAVAIL;
@ -121,7 +122,6 @@ static int hp_sw_tur(struct scsi_device *sdev, struct hp_sw_dh_data *h)
memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE); memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE);
req->sense_len = 0; req->sense_len = 0;
retry:
ret = blk_execute_rq(req->q, NULL, req, 1); ret = blk_execute_rq(req->q, NULL, req, 1);
if (ret == -EIO) { if (ret == -EIO) {
if (req->sense_len > 0) { if (req->sense_len > 0) {
@ -136,8 +136,10 @@ retry:
h->path_state = HP_SW_PATH_ACTIVE; h->path_state = HP_SW_PATH_ACTIVE;
ret = SCSI_DH_OK; ret = SCSI_DH_OK;
} }
if (ret == SCSI_DH_IMM_RETRY) if (ret == SCSI_DH_IMM_RETRY) {
blk_put_request(req);
goto retry; goto retry;
}
if (ret == SCSI_DH_DEV_OFFLINED) { if (ret == SCSI_DH_DEV_OFFLINED) {
h->path_state = HP_SW_PATH_PASSIVE; h->path_state = HP_SW_PATH_PASSIVE;
ret = SCSI_DH_OK; ret = SCSI_DH_OK;
@ -200,6 +202,7 @@ static int hp_sw_start_stop(struct scsi_device *sdev, struct hp_sw_dh_data *h)
struct request *req; struct request *req;
int ret, retry; int ret, retry;
retry:
req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO);
if (!req) if (!req)
return SCSI_DH_RES_TEMP_UNAVAIL; return SCSI_DH_RES_TEMP_UNAVAIL;
@ -216,7 +219,6 @@ static int hp_sw_start_stop(struct scsi_device *sdev, struct hp_sw_dh_data *h)
req->sense_len = 0; req->sense_len = 0;
retry = h->retries; retry = h->retries;
retry:
ret = blk_execute_rq(req->q, NULL, req, 1); ret = blk_execute_rq(req->q, NULL, req, 1);
if (ret == -EIO) { if (ret == -EIO) {
if (req->sense_len > 0) { if (req->sense_len > 0) {
@ -231,8 +233,10 @@ retry:
ret = SCSI_DH_OK; ret = SCSI_DH_OK;
if (ret == SCSI_DH_RETRY) { if (ret == SCSI_DH_RETRY) {
if (--retry) if (--retry) {
blk_put_request(req);
goto retry; goto retry;
}
ret = SCSI_DH_IO; ret = SCSI_DH_IO;
} }

View File

@ -827,7 +827,7 @@ static int __init maple_bus_init(void)
maple_queue_cache = maple_queue_cache =
kmem_cache_create("maple_queue_cache", 0x400, 0, kmem_cache_create("maple_queue_cache", 0x400, 0,
SLAB_POISON|SLAB_HWCACHE_ALIGN, NULL); SLAB_HWCACHE_ALIGN, NULL);
if (!maple_queue_cache) if (!maple_queue_cache)
goto cleanup_bothirqs; goto cleanup_bothirqs;

View File

@ -22,6 +22,8 @@ menuconfig STAGING
If in doubt, say N here. If in doubt, say N here.
if STAGING
config STAGING_EXCLUDE_BUILD config STAGING_EXCLUDE_BUILD
bool "Exclude Staging drivers from being built" if STAGING bool "Exclude Staging drivers from being built" if STAGING
default y default y
@ -62,3 +64,4 @@ source "drivers/staging/at76_usb/Kconfig"
source "drivers/staging/poch/Kconfig" source "drivers/staging/poch/Kconfig"
endif # !STAGING_EXCLUDE_BUILD endif # !STAGING_EXCLUDE_BUILD
endif # STAGING

View File

@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = {
{ USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
{ 0, } /* terminating entry */ { 0, } /* terminating entry */
}; };
MODULE_DEVICE_TABLE(usb, usbtmc_devices);
/* /*
* This structure is the capabilities for the device * This structure is the capabilities for the device

View File

@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev)
* altsetting means creating new endpoint device entries). * altsetting means creating new endpoint device entries).
* When either of these happens, defer the Set-Interface. * When either of these happens, defer the Set-Interface.
*/ */
if (!error && intf->dev.power.status == DPM_ON) if (intf->cur_altsetting->desc.bAlternateSetting == 0)
; /* Already in altsetting 0 so skip Set-Interface */
else if (!error && intf->dev.power.status == DPM_ON)
usb_set_interface(udev, intf->altsetting[0]. usb_set_interface(udev, intf->altsetting[0].
desc.bInterfaceNumber, 0); desc.bInterfaceNumber, 0);
else else

View File

@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
fs_in_desc.bEndpointAddress; fs_in_desc.bEndpointAddress;
hs_out_desc.bEndpointAddress = hs_out_desc.bEndpointAddress =
fs_out_desc.bEndpointAddress; fs_out_desc.bEndpointAddress;
hs_notify_desc.bEndpointAddress =
fs_notify_desc.bEndpointAddress;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(eth_hs_function); f->hs_descriptors = usb_copy_descriptors(eth_hs_function);
@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
f->hs_descriptors, &hs_in_desc); f->hs_descriptors, &hs_in_desc);
rndis->hs.out = usb_find_endpoint(eth_hs_function, rndis->hs.out = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_out_desc); f->hs_descriptors, &hs_out_desc);
rndis->hs.notify = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_notify_desc);
} }
rndis->port.open = rndis_open; rndis->port.open = rndis_open;

View File

@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
static struct usb_device_id id_table_combined [] = { static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },

View File

@ -40,6 +40,9 @@
/* AlphaMicro Components AMC-232USB01 device */ /* AlphaMicro Components AMC-232USB01 device */
#define FTDI_AMC232_PID 0xFF00 /* Product Id */ #define FTDI_AMC232_PID 0xFF00 /* Product Id */
/* www.candapter.com Ewert Energy Systems CANdapter device */
#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
/* the VID is the standard ftdi vid (FTDI_VID) */ /* the VID is the standard ftdi vid (FTDI_VID) */
#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
@ -75,6 +78,9 @@
/* OpenDCC (www.opendcc.de) product id */ /* OpenDCC (www.opendcc.de) product id */
#define FTDI_OPENDCC_PID 0xBFD8 #define FTDI_OPENDCC_PID 0xBFD8
/* Sprog II (Andrew Crosland's SprogII DCC interface) */
#define FTDI_SPROG_II 0xF0C8
/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
/* they use the ftdi chipset for the USB interface and the vendor id is the same */ /* they use the ftdi chipset for the USB interface and the vendor id is the same */
#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */

View File

@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
{ USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
{ USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
{ USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };

View File

@ -110,3 +110,11 @@
/* Y.C. Cable U.S.A., Inc - USB to RS-232 */ /* Y.C. Cable U.S.A., Inc - USB to RS-232 */
#define YCCABLE_VENDOR_ID 0x05ad #define YCCABLE_VENDOR_ID 0x05ad
#define YCCABLE_PRODUCT_ID 0x0fba #define YCCABLE_PRODUCT_ID 0x0fba
/* "Superial" USB - Serial */
#define SUPERIAL_VENDOR_ID 0x5372
#define SUPERIAL_PRODUCT_ID 0x2303
/* Hewlett-Packard LD220-HP POS Pole Display */
#define HP_VENDOR_ID 0x03f0
#define HP_LD220_PRODUCT_ID 0x3524

View File

@ -16,56 +16,6 @@
* For questions or problems with this driver, contact Texas Instruments * For questions or problems with this driver, contact Texas Instruments
* technical support, or Al Borchers <alborchers@steinerpoint.com>, or * technical support, or Al Borchers <alborchers@steinerpoint.com>, or
* Peter Berger <pberger@brimson.com>. * Peter Berger <pberger@brimson.com>.
*
* This driver needs this hotplug script in /etc/hotplug/usb/ti_usb_3410_5052
* or in /etc/hotplug.d/usb/ti_usb_3410_5052.hotplug to set the device
* configuration.
*
* #!/bin/bash
*
* BOOT_CONFIG=1
* ACTIVE_CONFIG=2
*
* if [[ "$ACTION" != "add" ]]
* then
* exit
* fi
*
* CONFIG_PATH=/sys${DEVPATH%/?*}/bConfigurationValue
*
* if [[ 0`cat $CONFIG_PATH` -ne $BOOT_CONFIG ]]
* then
* exit
* fi
*
* PRODUCT=${PRODUCT%/?*} # delete version
* VENDOR_ID=`printf "%d" 0x${PRODUCT%/?*}`
* PRODUCT_ID=`printf "%d" 0x${PRODUCT#*?/}`
*
* PARAM_PATH=/sys/module/ti_usb_3410_5052/parameters
*
* function scan() {
* s=$1
* shift
* for i
* do
* if [[ $s -eq $i ]]
* then
* return 0
* fi
* done
* return 1
* }
*
* IFS=$IFS,
*
* if (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_3410` &&
* scan $PRODUCT_ID 13328 `cat $PARAM_PATH/product_3410`) ||
* (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_5052` &&
* scan $PRODUCT_ID 20562 20818 20570 20575 `cat $PARAM_PATH/product_5052`)
* then
* echo $ACTIVE_CONFIG > $CONFIG_PATH
* fi
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial)
goto free_tdev; goto free_tdev;
} }
/* the second configuration must be set (in sysfs by hotplug script) */ /* the second configuration must be set */
if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) { if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) {
status = -ENODEV; status = usb_driver_set_configuration(dev, TI_ACTIVE_CONFIG);
status = status ? status : -ENODEV;
goto free_tdev; goto free_tdev;
} }

View File

@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ), US_FL_FIX_CAPACITY ),
/* Reported by Ozan Sener <themgzzy@gmail.com> */
UNUSUAL_DEV( 0x0421, 0x0060, 0x0551, 0x0551,
"Nokia",
"3500c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Reported by CSECSY Laszlo <boobaa@frugalware.org> */
UNUSUAL_DEV( 0x0421, 0x0063, 0x0001, 0x0601,
"Nokia",
"Nokia 3109c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Patch for Nokia 5310 capacity */ /* Patch for Nokia 5310 capacity */
UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0701,
"Nokia", "Nokia",
"5310", "5310",
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,

View File

@ -5,61 +5,61 @@
* --dte * --dte
*/ */
#define FLUSH_CACHE_WORKAROUND 1 static void radeon_fixup_offset(struct radeonfb_info *rinfo)
void radeon_fifo_update_and_wait(struct radeonfb_info *rinfo, int entries)
{ {
int i; u32 local_base;
for (i=0; i<2000000; i++) { /* *** Ugly workaround *** */
rinfo->fifo_free = INREG(RBBM_STATUS) & 0x7f; /*
if (rinfo->fifo_free >= entries) * On some platforms, the video memory is mapped at 0 in radeon chip space
return; * (like PPCs) by the firmware. X will always move it up so that it's seen
udelay(10); * by the chip to be at the same address as the PCI BAR.
} * That means that when switching back from X, there is a mismatch between
printk(KERN_ERR "radeonfb: FIFO Timeout !\n"); * the offsets programmed into the engine. This means that potentially,
/* XXX Todo: attempt to reset the engine */ * accel operations done before radeonfb has a chance to re-init the engine
} * will have incorrect offsets, and potentially trash system memory !
*
* The correct fix is for fbcon to never call any accel op before the engine
* has properly been re-initialized (by a call to set_var), but this is a
* complex fix. This workaround in the meantime, called before every accel
* operation, makes sure the offsets are in sync.
*/
static inline void radeon_fifo_wait(struct radeonfb_info *rinfo, int entries) radeon_fifo_wait (1);
{ local_base = INREG(MC_FB_LOCATION) << 16;
if (entries <= rinfo->fifo_free) if (local_base == rinfo->fb_local_base)
rinfo->fifo_free -= entries;
else
radeon_fifo_update_and_wait(rinfo, entries);
}
static inline void radeonfb_set_creg(struct radeonfb_info *rinfo, u32 reg,
u32 *cache, u32 new_val)
{
if (new_val == *cache)
return; return;
*cache = new_val;
radeon_fifo_wait(rinfo, 1); rinfo->fb_local_base = local_base;
OUTREG(reg, new_val);
radeon_fifo_wait (3);
OUTREG(DEFAULT_PITCH_OFFSET, (rinfo->pitch << 0x16) |
(rinfo->fb_local_base >> 10));
OUTREG(DST_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10));
OUTREG(SRC_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10));
} }
static void radeonfb_prim_fillrect(struct radeonfb_info *rinfo, static void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
const struct fb_fillrect *region) const struct fb_fillrect *region)
{ {
radeonfb_set_creg(rinfo, DP_GUI_MASTER_CNTL, &rinfo->dp_gui_mc_cache, radeon_fifo_wait(4);
rinfo->dp_gui_mc_base | GMC_BRUSH_SOLID_COLOR | ROP3_P);
radeonfb_set_creg(rinfo, DP_CNTL, &rinfo->dp_cntl_cache, OUTREG(DP_GUI_MASTER_CNTL,
DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM); rinfo->dp_gui_master_cntl /* contains, like GMC_DST_32BPP */
radeonfb_set_creg(rinfo, DP_BRUSH_FRGD_CLR, &rinfo->dp_brush_fg_cache, | GMC_BRUSH_SOLID_COLOR
region->color); | ROP3_P);
if (radeon_get_dstbpp(rinfo->depth) != DST_8BPP)
OUTREG(DP_BRUSH_FRGD_CLR, rinfo->pseudo_palette[region->color]);
else
OUTREG(DP_BRUSH_FRGD_CLR, region->color);
OUTREG(DP_WRITE_MSK, 0xffffffff);
OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
/* Ensure the dst cache is flushed and the engine idle before radeon_fifo_wait(2);
* issuing the operation.
*
* This works around engine lockups on some cards
*/
#if FLUSH_CACHE_WORKAROUND
radeon_fifo_wait(rinfo, 2);
OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL); OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL);
OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE)); OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE));
#endif
radeon_fifo_wait(rinfo, 2); radeon_fifo_wait(2);
OUTREG(DST_Y_X, (region->dy << 16) | region->dx); OUTREG(DST_Y_X, (region->dy << 16) | region->dx);
OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height); OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height);
} }
@ -70,14 +70,15 @@ void radeonfb_fillrect(struct fb_info *info, const struct fb_fillrect *region)
struct fb_fillrect modded; struct fb_fillrect modded;
int vxres, vyres; int vxres, vyres;
WARN_ON(rinfo->gfx_mode); if (info->state != FBINFO_STATE_RUNNING)
if (info->state != FBINFO_STATE_RUNNING || rinfo->gfx_mode)
return; return;
if (info->flags & FBINFO_HWACCEL_DISABLED) { if (info->flags & FBINFO_HWACCEL_DISABLED) {
cfb_fillrect(info, region); cfb_fillrect(info, region);
return; return;
} }
radeon_fixup_offset(rinfo);
vxres = info->var.xres_virtual; vxres = info->var.xres_virtual;
vyres = info->var.yres_virtual; vyres = info->var.yres_virtual;
@ -90,10 +91,6 @@ void radeonfb_fillrect(struct fb_info *info, const struct fb_fillrect *region)
if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx; if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx;
if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy; if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
info->fix.visual == FB_VISUAL_DIRECTCOLOR )
modded.color = ((u32 *) (info->pseudo_palette))[region->color];
radeonfb_prim_fillrect(rinfo, &modded); radeonfb_prim_fillrect(rinfo, &modded);
} }
@ -112,22 +109,22 @@ static void radeonfb_prim_copyarea(struct radeonfb_info *rinfo,
if ( xdir < 0 ) { sx += w-1; dx += w-1; } if ( xdir < 0 ) { sx += w-1; dx += w-1; }
if ( ydir < 0 ) { sy += h-1; dy += h-1; } if ( ydir < 0 ) { sy += h-1; dy += h-1; }
radeonfb_set_creg(rinfo, DP_GUI_MASTER_CNTL, &rinfo->dp_gui_mc_cache, radeon_fifo_wait(3);
rinfo->dp_gui_mc_base | OUTREG(DP_GUI_MASTER_CNTL,
GMC_BRUSH_NONE | rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */
GMC_SRC_DATATYPE_COLOR | | GMC_BRUSH_NONE
ROP3_S | | GMC_SRC_DSTCOLOR
DP_SRC_SOURCE_MEMORY); | ROP3_S
radeonfb_set_creg(rinfo, DP_CNTL, &rinfo->dp_cntl_cache, | DP_SRC_SOURCE_MEMORY );
(xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0) | OUTREG(DP_WRITE_MSK, 0xffffffff);
(ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0)); OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0)
| (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0));
#if FLUSH_CACHE_WORKAROUND radeon_fifo_wait(2);
radeon_fifo_wait(rinfo, 2);
OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL); OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL);
OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE)); OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE));
#endif
radeon_fifo_wait(rinfo, 3); radeon_fifo_wait(3);
OUTREG(SRC_Y_X, (sy << 16) | sx); OUTREG(SRC_Y_X, (sy << 16) | sx);
OUTREG(DST_Y_X, (dy << 16) | dx); OUTREG(DST_Y_X, (dy << 16) | dx);
OUTREG(DST_HEIGHT_WIDTH, (h << 16) | w); OUTREG(DST_HEIGHT_WIDTH, (h << 16) | w);
@ -146,14 +143,15 @@ void radeonfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
modded.width = area->width; modded.width = area->width;
modded.height = area->height; modded.height = area->height;
WARN_ON(rinfo->gfx_mode); if (info->state != FBINFO_STATE_RUNNING)
if (info->state != FBINFO_STATE_RUNNING || rinfo->gfx_mode)
return; return;
if (info->flags & FBINFO_HWACCEL_DISABLED) { if (info->flags & FBINFO_HWACCEL_DISABLED) {
cfb_copyarea(info, area); cfb_copyarea(info, area);
return; return;
} }
radeon_fixup_offset(rinfo);
vxres = info->var.xres_virtual; vxres = info->var.xres_virtual;
vyres = info->var.yres_virtual; vyres = info->var.yres_virtual;
@ -170,116 +168,13 @@ void radeonfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
radeonfb_prim_copyarea(rinfo, &modded); radeonfb_prim_copyarea(rinfo, &modded);
} }
static void radeonfb_prim_imageblit(struct radeonfb_info *rinfo,
const struct fb_image *image,
u32 fg, u32 bg)
{
unsigned int dwords;
u32 *bits;
radeonfb_set_creg(rinfo, DP_GUI_MASTER_CNTL, &rinfo->dp_gui_mc_cache,
rinfo->dp_gui_mc_base |
GMC_BRUSH_NONE | GMC_DST_CLIP_LEAVE |
GMC_SRC_DATATYPE_MONO_FG_BG |
ROP3_S |
GMC_BYTE_ORDER_MSB_TO_LSB |
DP_SRC_SOURCE_HOST_DATA);
radeonfb_set_creg(rinfo, DP_CNTL, &rinfo->dp_cntl_cache,
DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM);
radeonfb_set_creg(rinfo, DP_SRC_FRGD_CLR, &rinfo->dp_src_fg_cache, fg);
radeonfb_set_creg(rinfo, DP_SRC_BKGD_CLR, &rinfo->dp_src_bg_cache, bg);
/* Ensure the dst cache is flushed and the engine idle before
* issuing the operation.
*
* This works around engine lockups on some cards
*/
#if FLUSH_CACHE_WORKAROUND
radeon_fifo_wait(rinfo, 2);
OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL);
OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE));
#endif
/* X here pads width to a multiple of 32 and uses the clipper to
* adjust the result. Is that really necessary ? Things seem to
* work ok for me without that and the doco doesn't seem to imply]
* there is such a restriction.
*/
radeon_fifo_wait(rinfo, 4);
OUTREG(SC_TOP_LEFT, (image->dy << 16) | image->dx);
OUTREG(SC_BOTTOM_RIGHT, ((image->dy + image->height) << 16) |
(image->dx + image->width));
OUTREG(DST_Y_X, (image->dy << 16) | image->dx);
OUTREG(DST_HEIGHT_WIDTH, (image->height << 16) | ((image->width + 31) & ~31));
dwords = (image->width + 31) >> 5;
dwords *= image->height;
bits = (u32*)(image->data);
while(dwords >= 8) {
radeon_fifo_wait(rinfo, 8);
#if BITS_PER_LONG == 64
__raw_writeq(*((u64 *)(bits)), rinfo->mmio_base + HOST_DATA0);
__raw_writeq(*((u64 *)(bits+2)), rinfo->mmio_base + HOST_DATA2);
__raw_writeq(*((u64 *)(bits+4)), rinfo->mmio_base + HOST_DATA4);
__raw_writeq(*((u64 *)(bits+6)), rinfo->mmio_base + HOST_DATA6);
bits += 8;
#else
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA0);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA1);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA2);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA3);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA4);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA5);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA6);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA7);
#endif
dwords -= 8;
}
while(dwords--) {
radeon_fifo_wait(rinfo, 1);
__raw_writel(*(bits++), rinfo->mmio_base + HOST_DATA0);
}
}
void radeonfb_imageblit(struct fb_info *info, const struct fb_image *image) void radeonfb_imageblit(struct fb_info *info, const struct fb_image *image)
{ {
struct radeonfb_info *rinfo = info->par; struct radeonfb_info *rinfo = info->par;
u32 fg, bg;
WARN_ON(rinfo->gfx_mode); if (info->state != FBINFO_STATE_RUNNING)
if (info->state != FBINFO_STATE_RUNNING || rinfo->gfx_mode)
return; return;
radeon_engine_idle();
if (!image->width || !image->height)
return;
/* We only do 1 bpp color expansion for now */
if (!accel_cexp ||
(info->flags & FBINFO_HWACCEL_DISABLED) || image->depth != 1)
goto fallback;
/* Fallback if running out of the screen. We may do clipping
* in the future */
if ((image->dx + image->width) > info->var.xres_virtual ||
(image->dy + image->height) > info->var.yres_virtual)
goto fallback;
if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
fg = ((u32*)(info->pseudo_palette))[image->fg_color];
bg = ((u32*)(info->pseudo_palette))[image->bg_color];
} else {
fg = image->fg_color;
bg = image->bg_color;
}
radeonfb_prim_imageblit(rinfo, image, fg, bg);
return;
fallback:
radeon_engine_idle(rinfo);
cfb_imageblit(info, image); cfb_imageblit(info, image);
} }
@ -290,8 +185,7 @@ int radeonfb_sync(struct fb_info *info)
if (info->state != FBINFO_STATE_RUNNING) if (info->state != FBINFO_STATE_RUNNING)
return 0; return 0;
radeon_engine_idle();
radeon_engine_idle(rinfo);
return 0; return 0;
} }
@ -367,10 +261,9 @@ void radeonfb_engine_init (struct radeonfb_info *rinfo)
/* disable 3D engine */ /* disable 3D engine */
OUTREG(RB3D_CNTL, 0); OUTREG(RB3D_CNTL, 0);
rinfo->fifo_free = 0;
radeonfb_engine_reset(rinfo); radeonfb_engine_reset(rinfo);
radeon_fifo_wait(rinfo, 1); radeon_fifo_wait (1);
if (IS_R300_VARIANT(rinfo)) { if (IS_R300_VARIANT(rinfo)) {
OUTREG(RB2D_DSTCACHE_MODE, INREG(RB2D_DSTCACHE_MODE) | OUTREG(RB2D_DSTCACHE_MODE, INREG(RB2D_DSTCACHE_MODE) |
RB2D_DC_AUTOFLUSH_ENABLE | RB2D_DC_AUTOFLUSH_ENABLE |
@ -384,7 +277,7 @@ void radeonfb_engine_init (struct radeonfb_info *rinfo)
OUTREG(RB2D_DSTCACHE_MODE, 0); OUTREG(RB2D_DSTCACHE_MODE, 0);
} }
radeon_fifo_wait(rinfo, 3); radeon_fifo_wait (3);
/* We re-read MC_FB_LOCATION from card as it can have been /* We re-read MC_FB_LOCATION from card as it can have been
* modified by XFree drivers (ouch !) * modified by XFree drivers (ouch !)
*/ */
@ -395,57 +288,41 @@ void radeonfb_engine_init (struct radeonfb_info *rinfo)
OUTREG(DST_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10)); OUTREG(DST_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10));
OUTREG(SRC_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10)); OUTREG(SRC_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10));
radeon_fifo_wait(rinfo, 1); radeon_fifo_wait (1);
#ifdef __BIG_ENDIAN #if defined(__BIG_ENDIAN)
OUTREGP(DP_DATATYPE, HOST_BIG_ENDIAN_EN, ~HOST_BIG_ENDIAN_EN); OUTREGP(DP_DATATYPE, HOST_BIG_ENDIAN_EN, ~HOST_BIG_ENDIAN_EN);
#else #else
OUTREGP(DP_DATATYPE, 0, ~HOST_BIG_ENDIAN_EN); OUTREGP(DP_DATATYPE, 0, ~HOST_BIG_ENDIAN_EN);
#endif #endif
radeon_fifo_wait(rinfo, 2); radeon_fifo_wait (2);
OUTREG(DEFAULT_SC_TOP_LEFT, 0); OUTREG(DEFAULT_SC_TOP_LEFT, 0);
OUTREG(DEFAULT_SC_BOTTOM_RIGHT, (DEFAULT_SC_RIGHT_MAX | OUTREG(DEFAULT_SC_BOTTOM_RIGHT, (DEFAULT_SC_RIGHT_MAX |
DEFAULT_SC_BOTTOM_MAX)); DEFAULT_SC_BOTTOM_MAX));
/* set default DP_GUI_MASTER_CNTL */
temp = radeon_get_dstbpp(rinfo->depth); temp = radeon_get_dstbpp(rinfo->depth);
rinfo->dp_gui_mc_base = ((temp << 8) | GMC_CLR_CMP_CNTL_DIS); rinfo->dp_gui_master_cntl = ((temp << 8) | GMC_CLR_CMP_CNTL_DIS);
rinfo->dp_gui_mc_cache = rinfo->dp_gui_mc_base | radeon_fifo_wait (1);
GMC_BRUSH_SOLID_COLOR | OUTREG(DP_GUI_MASTER_CNTL, (rinfo->dp_gui_master_cntl |
GMC_SRC_DATATYPE_COLOR; GMC_BRUSH_SOLID_COLOR |
radeon_fifo_wait(rinfo, 1); GMC_SRC_DATATYPE_COLOR));
OUTREG(DP_GUI_MASTER_CNTL, rinfo->dp_gui_mc_cache);
radeon_fifo_wait (7);
/* clear line drawing regs */ /* clear line drawing regs */
radeon_fifo_wait(rinfo, 2);
OUTREG(DST_LINE_START, 0); OUTREG(DST_LINE_START, 0);
OUTREG(DST_LINE_END, 0); OUTREG(DST_LINE_END, 0);
/* set brush and source color regs */ /* set brush color regs */
rinfo->dp_brush_fg_cache = 0xffffffff; OUTREG(DP_BRUSH_FRGD_CLR, 0xffffffff);
rinfo->dp_brush_bg_cache = 0x00000000; OUTREG(DP_BRUSH_BKGD_CLR, 0x00000000);
rinfo->dp_src_fg_cache = 0xffffffff;
rinfo->dp_src_bg_cache = 0x00000000;
radeon_fifo_wait(rinfo, 4);
OUTREG(DP_BRUSH_FRGD_CLR, rinfo->dp_brush_fg_cache);
OUTREG(DP_BRUSH_BKGD_CLR, rinfo->dp_brush_bg_cache);
OUTREG(DP_SRC_FRGD_CLR, rinfo->dp_src_fg_cache);
OUTREG(DP_SRC_BKGD_CLR, rinfo->dp_src_bg_cache);
/* Default direction */ /* set source color regs */
rinfo->dp_cntl_cache = DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM; OUTREG(DP_SRC_FRGD_CLR, 0xffffffff);
radeon_fifo_wait(rinfo, 1); OUTREG(DP_SRC_BKGD_CLR, 0x00000000);
OUTREG(DP_CNTL, rinfo->dp_cntl_cache);
/* default write mask */ /* default write mask */
radeon_fifo_wait(rinfo, 1);
OUTREG(DP_WRITE_MSK, 0xffffffff); OUTREG(DP_WRITE_MSK, 0xffffffff);
/* Default to no swapping of host data */ radeon_engine_idle ();
radeon_fifo_wait(rinfo, 1);
OUTREG(RBBM_GUICNTL, RBBM_GUICNTL_HOST_DATA_SWAP_NONE);
/* Make sure it's settled */
radeon_engine_idle(rinfo);
} }

View File

@ -66,7 +66,7 @@ static int radeon_bl_update_status(struct backlight_device *bd)
level = bd->props.brightness; level = bd->props.brightness;
del_timer_sync(&rinfo->lvds_timer); del_timer_sync(&rinfo->lvds_timer);
radeon_engine_idle(rinfo); radeon_engine_idle();
lvds_gen_cntl = INREG(LVDS_GEN_CNTL); lvds_gen_cntl = INREG(LVDS_GEN_CNTL);
if (level > 0) { if (level > 0) {

View File

@ -282,8 +282,6 @@ static int backlight = 1;
static int backlight = 0; static int backlight = 0;
#endif #endif
int accel_cexp = 0;
/* /*
* prototypes * prototypes
*/ */
@ -854,6 +852,7 @@ static int radeonfb_pan_display (struct fb_var_screeninfo *var,
if (rinfo->asleep) if (rinfo->asleep)
return 0; return 0;
radeon_fifo_wait(2);
OUTREG(CRTC_OFFSET, ((var->yoffset * var->xres_virtual + var->xoffset) OUTREG(CRTC_OFFSET, ((var->yoffset * var->xres_virtual + var->xoffset)
* var->bits_per_pixel / 8) & ~7); * var->bits_per_pixel / 8) & ~7);
return 0; return 0;
@ -883,6 +882,7 @@ static int radeonfb_ioctl (struct fb_info *info, unsigned int cmd,
if (rc) if (rc)
return rc; return rc;
radeon_fifo_wait(2);
if (value & 0x01) { if (value & 0x01) {
tmp = INREG(LVDS_GEN_CNTL); tmp = INREG(LVDS_GEN_CNTL);
@ -940,7 +940,7 @@ int radeon_screen_blank(struct radeonfb_info *rinfo, int blank, int mode_switch)
if (rinfo->lock_blank) if (rinfo->lock_blank)
return 0; return 0;
radeon_engine_idle(rinfo); radeon_engine_idle();
val = INREG(CRTC_EXT_CNTL); val = INREG(CRTC_EXT_CNTL);
val &= ~(CRTC_DISPLAY_DIS | CRTC_HSYNC_DIS | val &= ~(CRTC_DISPLAY_DIS | CRTC_HSYNC_DIS |
@ -1048,7 +1048,7 @@ static int radeonfb_blank (int blank, struct fb_info *info)
if (rinfo->asleep) if (rinfo->asleep)
return 0; return 0;
return radeon_screen_blank(rinfo, blank, 0); return radeon_screen_blank(rinfo, blank, 0);
} }
@ -1074,6 +1074,8 @@ static int radeon_setcolreg (unsigned regno, unsigned red, unsigned green,
pindex = regno; pindex = regno;
if (!rinfo->asleep) { if (!rinfo->asleep) {
radeon_fifo_wait(9);
if (rinfo->bpp == 16) { if (rinfo->bpp == 16) {
pindex = regno * 8; pindex = regno * 8;
@ -1242,6 +1244,8 @@ static void radeon_write_pll_regs(struct radeonfb_info *rinfo, struct radeon_reg
{ {
int i; int i;
radeon_fifo_wait(20);
/* Workaround from XFree */ /* Workaround from XFree */
if (rinfo->is_mobility) { if (rinfo->is_mobility) {
/* A temporal workaround for the occational blanking on certain laptop /* A temporal workaround for the occational blanking on certain laptop
@ -1337,7 +1341,7 @@ static void radeon_lvds_timer_func(unsigned long data)
{ {
struct radeonfb_info *rinfo = (struct radeonfb_info *)data; struct radeonfb_info *rinfo = (struct radeonfb_info *)data;
radeon_engine_idle(rinfo); radeon_engine_idle();
OUTREG(LVDS_GEN_CNTL, rinfo->pending_lvds_gen_cntl); OUTREG(LVDS_GEN_CNTL, rinfo->pending_lvds_gen_cntl);
} }
@ -1355,11 +1359,10 @@ void radeon_write_mode (struct radeonfb_info *rinfo, struct radeon_regs *mode,
if (nomodeset) if (nomodeset)
return; return;
radeon_engine_idle(rinfo);
if (!regs_only) if (!regs_only)
radeon_screen_blank(rinfo, FB_BLANK_NORMAL, 0); radeon_screen_blank(rinfo, FB_BLANK_NORMAL, 0);
radeon_fifo_wait(31);
for (i=0; i<10; i++) for (i=0; i<10; i++)
OUTREG(common_regs[i].reg, common_regs[i].val); OUTREG(common_regs[i].reg, common_regs[i].val);
@ -1387,6 +1390,7 @@ void radeon_write_mode (struct radeonfb_info *rinfo, struct radeon_regs *mode,
radeon_write_pll_regs(rinfo, mode); radeon_write_pll_regs(rinfo, mode);
if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) { if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) {
radeon_fifo_wait(10);
OUTREG(FP_CRTC_H_TOTAL_DISP, mode->fp_crtc_h_total_disp); OUTREG(FP_CRTC_H_TOTAL_DISP, mode->fp_crtc_h_total_disp);
OUTREG(FP_CRTC_V_TOTAL_DISP, mode->fp_crtc_v_total_disp); OUTREG(FP_CRTC_V_TOTAL_DISP, mode->fp_crtc_v_total_disp);
OUTREG(FP_H_SYNC_STRT_WID, mode->fp_h_sync_strt_wid); OUTREG(FP_H_SYNC_STRT_WID, mode->fp_h_sync_strt_wid);
@ -1401,6 +1405,7 @@ void radeon_write_mode (struct radeonfb_info *rinfo, struct radeon_regs *mode,
if (!regs_only) if (!regs_only)
radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 0); radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 0);
radeon_fifo_wait(2);
OUTPLL(VCLK_ECP_CNTL, mode->vclk_ecp_cntl); OUTPLL(VCLK_ECP_CNTL, mode->vclk_ecp_cntl);
return; return;
@ -1551,7 +1556,7 @@ static int radeonfb_set_par(struct fb_info *info)
/* We always want engine to be idle on a mode switch, even /* We always want engine to be idle on a mode switch, even
* if we won't actually change the mode * if we won't actually change the mode
*/ */
radeon_engine_idle(rinfo); radeon_engine_idle();
hSyncStart = mode->xres + mode->right_margin; hSyncStart = mode->xres + mode->right_margin;
hSyncEnd = hSyncStart + mode->hsync_len; hSyncEnd = hSyncStart + mode->hsync_len;
@ -1846,6 +1851,7 @@ static int radeonfb_set_par(struct fb_info *info)
return 0; return 0;
} }
static struct fb_ops radeonfb_ops = { static struct fb_ops radeonfb_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.fb_check_var = radeonfb_check_var, .fb_check_var = radeonfb_check_var,
@ -1869,7 +1875,6 @@ static int __devinit radeon_set_fbinfo (struct radeonfb_info *rinfo)
info->par = rinfo; info->par = rinfo;
info->pseudo_palette = rinfo->pseudo_palette; info->pseudo_palette = rinfo->pseudo_palette;
info->flags = FBINFO_DEFAULT info->flags = FBINFO_DEFAULT
| FBINFO_HWACCEL_IMAGEBLIT
| FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_COPYAREA
| FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_FILLRECT
| FBINFO_HWACCEL_XPAN | FBINFO_HWACCEL_XPAN
@ -1877,7 +1882,6 @@ static int __devinit radeon_set_fbinfo (struct radeonfb_info *rinfo)
info->fbops = &radeonfb_ops; info->fbops = &radeonfb_ops;
info->screen_base = rinfo->fb_base; info->screen_base = rinfo->fb_base;
info->screen_size = rinfo->mapped_vram; info->screen_size = rinfo->mapped_vram;
/* Fill fix common fields */ /* Fill fix common fields */
strlcpy(info->fix.id, rinfo->name, sizeof(info->fix.id)); strlcpy(info->fix.id, rinfo->name, sizeof(info->fix.id));
info->fix.smem_start = rinfo->fb_base_phys; info->fix.smem_start = rinfo->fb_base_phys;
@ -1892,25 +1896,8 @@ static int __devinit radeon_set_fbinfo (struct radeonfb_info *rinfo)
info->fix.mmio_len = RADEON_REGSIZE; info->fix.mmio_len = RADEON_REGSIZE;
info->fix.accel = FB_ACCEL_ATI_RADEON; info->fix.accel = FB_ACCEL_ATI_RADEON;
/* Allocate colormap */
fb_alloc_cmap(&info->cmap, 256, 0); fb_alloc_cmap(&info->cmap, 256, 0);
/* Setup pixmap used for acceleration */
#define PIXMAP_SIZE (2048 * 4)
info->pixmap.addr = kmalloc(PIXMAP_SIZE, GFP_KERNEL);
if (!info->pixmap.addr) {
printk(KERN_ERR "radeonfb: Failed to allocate pixmap !\n");
noaccel = 1;
goto bail;
}
info->pixmap.size = PIXMAP_SIZE;
info->pixmap.flags = FB_PIXMAP_SYSTEM;
info->pixmap.scan_align = 4;
info->pixmap.buf_align = 4;
info->pixmap.access_align = 32;
bail:
if (noaccel) if (noaccel)
info->flags |= FBINFO_HWACCEL_DISABLED; info->flags |= FBINFO_HWACCEL_DISABLED;
@ -2019,6 +2006,7 @@ static void radeon_identify_vram(struct radeonfb_info *rinfo)
u32 tom = INREG(NB_TOM); u32 tom = INREG(NB_TOM);
tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024); tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);
radeon_fifo_wait(6);
OUTREG(MC_FB_LOCATION, tom); OUTREG(MC_FB_LOCATION, tom);
OUTREG(DISPLAY_BASE_ADDR, (tom & 0xffff) << 16); OUTREG(DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
OUTREG(CRTC2_DISPLAY_BASE_ADDR, (tom & 0xffff) << 16); OUTREG(CRTC2_DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
@ -2522,8 +2510,6 @@ static int __init radeonfb_setup (char *options)
} else if (!strncmp(this_opt, "ignore_devlist", 14)) { } else if (!strncmp(this_opt, "ignore_devlist", 14)) {
ignore_devlist = 1; ignore_devlist = 1;
#endif #endif
} else if (!strncmp(this_opt, "accel_cexp", 12)) {
accel_cexp = 1;
} else } else
mode_option = this_opt; mode_option = this_opt;
} }
@ -2571,8 +2557,6 @@ module_param(monitor_layout, charp, 0);
MODULE_PARM_DESC(monitor_layout, "Specify monitor mapping (like XFree86)"); MODULE_PARM_DESC(monitor_layout, "Specify monitor mapping (like XFree86)");
module_param(force_measure_pll, bool, 0); module_param(force_measure_pll, bool, 0);
MODULE_PARM_DESC(force_measure_pll, "Force measurement of PLL (debug)"); MODULE_PARM_DESC(force_measure_pll, "Force measurement of PLL (debug)");
module_param(accel_cexp, bool, 0);
MODULE_PARM_DESC(accel_cexp, "Use acceleration engine for color expansion");
#ifdef CONFIG_MTRR #ifdef CONFIG_MTRR
module_param(nomtrr, bool, 0); module_param(nomtrr, bool, 0);
MODULE_PARM_DESC(nomtrr, "bool: disable use of MTRR registers"); MODULE_PARM_DESC(nomtrr, "bool: disable use of MTRR registers");

View File

@ -2653,9 +2653,9 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
if (!(info->flags & FBINFO_HWACCEL_DISABLED)) { if (!(info->flags & FBINFO_HWACCEL_DISABLED)) {
/* Make sure engine is reset */ /* Make sure engine is reset */
radeon_engine_idle(rinfo); radeon_engine_idle();
radeonfb_engine_reset(rinfo); radeonfb_engine_reset(rinfo);
radeon_engine_idle(rinfo); radeon_engine_idle();
} }
/* Blank display and LCD */ /* Blank display and LCD */
@ -2767,7 +2767,7 @@ int radeonfb_pci_resume(struct pci_dev *pdev)
rinfo->asleep = 0; rinfo->asleep = 0;
} else } else
radeon_engine_idle(rinfo); radeon_engine_idle();
/* Restore display & engine */ /* Restore display & engine */
radeon_write_mode (rinfo, &rinfo->state, 1); radeon_write_mode (rinfo, &rinfo->state, 1);

View File

@ -336,15 +336,7 @@ struct radeonfb_info {
int mon2_type; int mon2_type;
u8 *mon2_EDID; u8 *mon2_EDID;
/* accel bits */ u32 dp_gui_master_cntl;
u32 dp_gui_mc_base;
u32 dp_gui_mc_cache;
u32 dp_cntl_cache;
u32 dp_brush_fg_cache;
u32 dp_brush_bg_cache;
u32 dp_src_fg_cache;
u32 dp_src_bg_cache;
u32 fifo_free;
struct pll_info pll; struct pll_info pll;
@ -356,7 +348,6 @@ struct radeonfb_info {
int lock_blank; int lock_blank;
int dynclk; int dynclk;
int no_schedule; int no_schedule;
int gfx_mode;
enum radeon_pm_mode pm_mode; enum radeon_pm_mode pm_mode;
reinit_function_ptr reinit_func; reinit_function_ptr reinit_func;
@ -401,14 +392,8 @@ static inline void _radeon_msleep(struct radeonfb_info *rinfo, unsigned long ms)
#define OUTREG8(addr,val) writeb(val, (rinfo->mmio_base)+addr) #define OUTREG8(addr,val) writeb(val, (rinfo->mmio_base)+addr)
#define INREG16(addr) readw((rinfo->mmio_base)+addr) #define INREG16(addr) readw((rinfo->mmio_base)+addr)
#define OUTREG16(addr,val) writew(val, (rinfo->mmio_base)+addr) #define OUTREG16(addr,val) writew(val, (rinfo->mmio_base)+addr)
#ifdef CONFIG_PPC
#define INREG(addr) ({ eieio(); ld_le32(rinfo->mmio_base+(addr)); })
#define OUTREG(addr,val) do { eieio(); st_le32(rinfo->mmio_base+(addr),(val)); } while(0)
#else
#define INREG(addr) readl((rinfo->mmio_base)+addr) #define INREG(addr) readl((rinfo->mmio_base)+addr)
#define OUTREG(addr,val) writel(val, (rinfo->mmio_base)+addr) #define OUTREG(addr,val) writel(val, (rinfo->mmio_base)+addr)
#endif
static inline void _OUTREGP(struct radeonfb_info *rinfo, u32 addr, static inline void _OUTREGP(struct radeonfb_info *rinfo, u32 addr,
u32 val, u32 mask) u32 val, u32 mask)
@ -550,7 +535,17 @@ static inline u32 radeon_get_dstbpp(u16 depth)
* 2D Engine helper routines * 2D Engine helper routines
*/ */
extern void radeon_fifo_update_and_wait(struct radeonfb_info *rinfo, int entries); static inline void _radeon_fifo_wait(struct radeonfb_info *rinfo, int entries)
{
int i;
for (i=0; i<2000000; i++) {
if ((INREG(RBBM_STATUS) & 0x7f) >= entries)
return;
udelay(1);
}
printk(KERN_ERR "radeonfb: FIFO Timeout !\n");
}
static inline void radeon_engine_flush (struct radeonfb_info *rinfo) static inline void radeon_engine_flush (struct radeonfb_info *rinfo)
{ {
@ -563,7 +558,7 @@ static inline void radeon_engine_flush (struct radeonfb_info *rinfo)
/* Ensure FIFO is empty, ie, make sure the flush commands /* Ensure FIFO is empty, ie, make sure the flush commands
* has reached the cache * has reached the cache
*/ */
radeon_fifo_update_and_wait(rinfo, 64); _radeon_fifo_wait (rinfo, 64);
/* Wait for the flush to complete */ /* Wait for the flush to complete */
for (i=0; i < 2000000; i++) { for (i=0; i < 2000000; i++) {
@ -575,12 +570,12 @@ static inline void radeon_engine_flush (struct radeonfb_info *rinfo)
} }
static inline void radeon_engine_idle(struct radeonfb_info *rinfo) static inline void _radeon_engine_idle(struct radeonfb_info *rinfo)
{ {
int i; int i;
/* ensure FIFO is empty before waiting for idle */ /* ensure FIFO is empty before waiting for idle */
radeon_fifo_update_and_wait (rinfo, 64); _radeon_fifo_wait (rinfo, 64);
for (i=0; i<2000000; i++) { for (i=0; i<2000000; i++) {
if (((INREG(RBBM_STATUS) & GUI_ACTIVE)) == 0) { if (((INREG(RBBM_STATUS) & GUI_ACTIVE)) == 0) {
@ -593,6 +588,8 @@ static inline void radeon_engine_idle(struct radeonfb_info *rinfo)
} }
#define radeon_engine_idle() _radeon_engine_idle(rinfo)
#define radeon_fifo_wait(entries) _radeon_fifo_wait(rinfo,entries)
#define radeon_msleep(ms) _radeon_msleep(rinfo,ms) #define radeon_msleep(ms) _radeon_msleep(rinfo,ms)
@ -622,7 +619,6 @@ extern void radeonfb_imageblit(struct fb_info *p, const struct fb_image *image);
extern int radeonfb_sync(struct fb_info *info); extern int radeonfb_sync(struct fb_info *info);
extern void radeonfb_engine_init (struct radeonfb_info *rinfo); extern void radeonfb_engine_init (struct radeonfb_info *rinfo);
extern void radeonfb_engine_reset(struct radeonfb_info *rinfo); extern void radeonfb_engine_reset(struct radeonfb_info *rinfo);
extern void radeon_fixup_mem_offset(struct radeonfb_info *rinfo);
/* Other functions */ /* Other functions */
extern int radeon_screen_blank(struct radeonfb_info *rinfo, int blank, int mode_switch); extern int radeon_screen_blank(struct radeonfb_info *rinfo, int blank, int mode_switch);
@ -638,6 +634,4 @@ static inline void radeonfb_bl_init(struct radeonfb_info *rinfo) {}
static inline void radeonfb_bl_exit(struct radeonfb_info *rinfo) {} static inline void radeonfb_bl_exit(struct radeonfb_info *rinfo) {}
#endif #endif
extern int accel_cexp;
#endif /* __RADEONFB_H__ */ #endif /* __RADEONFB_H__ */

View File

@ -3983,7 +3983,8 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
node->flags = le16_to_cpu(pSMBr->DFSFlags); node->flags = le16_to_cpu(pSMBr->DFSFlags);
if (is_unicode) { if (is_unicode) {
__le16 *tmp = kmalloc(strlen(searchName)*2, GFP_KERNEL); __le16 *tmp = kmalloc(strlen(searchName)*2 + 2,
GFP_KERNEL);
cifsConvertToUCS((__le16 *) tmp, searchName, cifsConvertToUCS((__le16 *) tmp, searchName,
PATH_MAX, nls_codepage, remap); PATH_MAX, nls_codepage, remap);
node->path_consumed = hostlen_fromUCS(tmp, node->path_consumed = hostlen_fromUCS(tmp,

View File

@ -86,7 +86,8 @@
#define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \ #define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \
OCFS2_SB(sb)->s_feature_incompat &= ~(mask) OCFS2_SB(sb)->s_feature_incompat &= ~(mask)
#define OCFS2_FEATURE_COMPAT_SUPP OCFS2_FEATURE_COMPAT_BACKUP_SB #define OCFS2_FEATURE_COMPAT_SUPP (OCFS2_FEATURE_COMPAT_BACKUP_SB \
| OCFS2_FEATURE_COMPAT_JBD2_SB)
#define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \ #define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \
| OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \ | OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \
| OCFS2_FEATURE_INCOMPAT_INLINE_DATA \ | OCFS2_FEATURE_INCOMPAT_INLINE_DATA \
@ -152,6 +153,11 @@
*/ */
#define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001 #define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001
/*
* The filesystem will correctly handle journal feature bits.
*/
#define OCFS2_FEATURE_COMPAT_JBD2_SB 0x0002
/* /*
* Unwritten extents support. * Unwritten extents support.
*/ */

View File

@ -2645,9 +2645,9 @@ static int ocfs2_xattr_update_xattr_search(struct inode *inode,
return ret; return ret;
} }
i = xs->here - old_xh->xh_entries;
xs->here = &xs->header->xh_entries[i];
} }
i = xs->here - old_xh->xh_entries;
xs->here = &xs->header->xh_entries[i];
} }
return ret; return ret;

View File

@ -319,6 +319,7 @@ enum
{ {
NAPI_STATE_SCHED, /* Poll is scheduled */ NAPI_STATE_SCHED, /* Poll is scheduled */
NAPI_STATE_DISABLE, /* Disable pending */ NAPI_STATE_DISABLE, /* Disable pending */
NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
}; };
extern void __napi_schedule(struct napi_struct *n); extern void __napi_schedule(struct napi_struct *n);
@ -1497,6 +1498,12 @@ static inline void netif_rx_complete(struct net_device *dev,
{ {
unsigned long flags; unsigned long flags;
/*
* don't let napi dequeue from the cpu poll list
* just in case its running on a different cpu
*/
if (unlikely(test_bit(NAPI_STATE_NPSVC, &napi->state)))
return;
local_irq_save(flags); local_irq_save(flags);
__netif_rx_complete(dev, napi); __netif_rx_complete(dev, napi);
local_irq_restore(flags); local_irq_restore(flags);

View File

@ -141,6 +141,7 @@ enum ctattr_protonat {
#define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1) #define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1)
enum ctattr_natseq { enum ctattr_natseq {
CTA_NAT_SEQ_UNSPEC,
CTA_NAT_SEQ_CORRECTION_POS, CTA_NAT_SEQ_CORRECTION_POS,
CTA_NAT_SEQ_OFFSET_BEFORE, CTA_NAT_SEQ_OFFSET_BEFORE,
CTA_NAT_SEQ_OFFSET_AFTER, CTA_NAT_SEQ_OFFSET_AFTER,

View File

@ -146,6 +146,8 @@ static inline void smp_send_reschedule(int cpu) { }
}) })
#define smp_call_function_mask(mask, func, info, wait) \ #define smp_call_function_mask(mask, func, info, wait) \
(up_smp_call_function(func, info)) (up_smp_call_function(func, info))
#define smp_call_function_many(mask, func, info, wait) \
(up_smp_call_function(func, info))
static inline void init_call_single_data(void) static inline void init_call_single_data(void)
{ {
} }

View File

@ -158,8 +158,12 @@ struct usb_ctrlrequest {
* (rarely) accepted by SET_DESCRIPTOR. * (rarely) accepted by SET_DESCRIPTOR.
* *
* Note that all multi-byte values here are encoded in little endian * Note that all multi-byte values here are encoded in little endian
* byte order "on the wire". But when exposed through Linux-USB APIs, * byte order "on the wire". Within the kernel and when exposed
* they've been converted to cpu byte order. * through the Linux-USB APIs, they are not converted to cpu byte
* order; it is the responsibility of the client code to do this.
* The single exception is when device and configuration descriptors (but
* not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
* in this case the fields are converted to host endianness by the kernel.
*/ */
/* /*

View File

@ -135,9 +135,11 @@ struct dongle_reg {
/* /*
* Per-packet information we need to hide inside sk_buff * Per-packet information we need to hide inside sk_buff
* (must not exceed 48 bytes, check with struct sk_buff) * (must not exceed 48 bytes, check with struct sk_buff)
* The default_qdisc_pad field is a temporary hack.
*/ */
struct irda_skb_cb { struct irda_skb_cb {
unsigned int default_qdisc_pad;
magic_t magic; /* Be sure that we can trust the information */ magic_t magic; /* Be sure that we can trust the information */
__u32 next_speed; /* The Speed to be set *after* this frame */ __u32 next_speed; /* The Speed to be set *after* this frame */
__u16 mtt; /* Minimum turn around time */ __u16 mtt; /* Minimum turn around time */

View File

@ -525,9 +525,6 @@
#define CRTC_DISPLAY_DIS (1 << 10) #define CRTC_DISPLAY_DIS (1 << 10)
#define CRTC_CRT_ON (1 << 15) #define CRTC_CRT_ON (1 << 15)
/* DSTCACHE_MODE bits constants */
#define RB2D_DC_AUTOFLUSH_ENABLE (1 << 8)
#define RB2D_DC_DC_DISABLE_IGNORE_PE (1 << 17)
/* DSTCACHE_CTLSTAT bit constants */ /* DSTCACHE_CTLSTAT bit constants */
#define RB2D_DC_FLUSH_2D (1 << 0) #define RB2D_DC_FLUSH_2D (1 << 0)
@ -869,10 +866,15 @@
#define GMC_DST_16BPP_YVYU422 0x00000c00 #define GMC_DST_16BPP_YVYU422 0x00000c00
#define GMC_DST_32BPP_AYUV444 0x00000e00 #define GMC_DST_32BPP_AYUV444 0x00000e00
#define GMC_DST_16BPP_ARGB4444 0x00000f00 #define GMC_DST_16BPP_ARGB4444 0x00000f00
#define GMC_SRC_MONO 0x00000000
#define GMC_SRC_MONO_LBKGD 0x00001000
#define GMC_SRC_DSTCOLOR 0x00003000
#define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000 #define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000
#define GMC_BYTE_ORDER_LSB_TO_MSB 0x00004000 #define GMC_BYTE_ORDER_LSB_TO_MSB 0x00004000
#define GMC_DP_CONVERSION_TEMP_9300 0x00008000 #define GMC_DP_CONVERSION_TEMP_9300 0x00008000
#define GMC_DP_CONVERSION_TEMP_6500 0x00000000 #define GMC_DP_CONVERSION_TEMP_6500 0x00000000
#define GMC_DP_SRC_RECT 0x02000000
#define GMC_DP_SRC_HOST 0x03000000
#define GMC_DP_SRC_HOST_BYTEALIGN 0x04000000 #define GMC_DP_SRC_HOST_BYTEALIGN 0x04000000
#define GMC_3D_FCN_EN_CLR 0x00000000 #define GMC_3D_FCN_EN_CLR 0x00000000
#define GMC_3D_FCN_EN_SET 0x08000000 #define GMC_3D_FCN_EN_SET 0x08000000
@ -883,9 +885,6 @@
#define GMC_WRITE_MASK_LEAVE 0x00000000 #define GMC_WRITE_MASK_LEAVE 0x00000000
#define GMC_WRITE_MASK_SET 0x40000000 #define GMC_WRITE_MASK_SET 0x40000000
#define GMC_CLR_CMP_CNTL_DIS (1 << 28) #define GMC_CLR_CMP_CNTL_DIS (1 << 28)
#define GMC_SRC_DATATYPE_MASK (3 << 12)
#define GMC_SRC_DATATYPE_MONO_FG_BG (0 << 12)
#define GMC_SRC_DATATYPE_MONO_FG_LA (1 << 12)
#define GMC_SRC_DATATYPE_COLOR (3 << 12) #define GMC_SRC_DATATYPE_COLOR (3 << 12)
#define ROP3_S 0x00cc0000 #define ROP3_S 0x00cc0000
#define ROP3_SRCCOPY 0x00cc0000 #define ROP3_SRCCOPY 0x00cc0000
@ -894,7 +893,6 @@
#define DP_SRC_SOURCE_MASK (7 << 24) #define DP_SRC_SOURCE_MASK (7 << 24)
#define GMC_BRUSH_NONE (15 << 4) #define GMC_BRUSH_NONE (15 << 4)
#define DP_SRC_SOURCE_MEMORY (2 << 24) #define DP_SRC_SOURCE_MEMORY (2 << 24)
#define DP_SRC_SOURCE_HOST_DATA (3 << 24)
#define GMC_BRUSH_SOLIDCOLOR 0x000000d0 #define GMC_BRUSH_SOLIDCOLOR 0x000000d0
/* DP_MIX bit constants */ /* DP_MIX bit constants */
@ -980,12 +978,6 @@
#define DISP_PWR_MAN_TV_ENABLE_RST (1 << 25) #define DISP_PWR_MAN_TV_ENABLE_RST (1 << 25)
#define DISP_PWR_MAN_AUTO_PWRUP_EN (1 << 26) #define DISP_PWR_MAN_AUTO_PWRUP_EN (1 << 26)
/* RBBM_GUICNTL constants */
#define RBBM_GUICNTL_HOST_DATA_SWAP_NONE (0 << 0)
#define RBBM_GUICNTL_HOST_DATA_SWAP_16BIT (1 << 0)
#define RBBM_GUICNTL_HOST_DATA_SWAP_32BIT (2 << 0)
#define RBBM_GUICNTL_HOST_DATA_SWAP_HDW (3 << 0)
/* masks */ /* masks */
#define CONFIG_MEMSIZE_MASK 0x1f000000 #define CONFIG_MEMSIZE_MASK 0x1f000000

View File

@ -702,7 +702,7 @@ static int rebind_subsystems(struct cgroupfs_root *root,
* any child cgroups exist. This is theoretically supportable * any child cgroups exist. This is theoretically supportable
* but involves complex error handling, so it's being left until * but involves complex error handling, so it's being left until
* later */ * later */
if (!list_empty(&cgrp->children)) if (root->number_of_cgroups > 1)
return -EBUSY; return -EBUSY;
/* Process each subsystem */ /* Process each subsystem */

View File

@ -118,13 +118,13 @@ static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now)
/* /*
* scd->clock = clamp(scd->tick_gtod + delta, * scd->clock = clamp(scd->tick_gtod + delta,
* max(scd->tick_gtod, scd->clock), * max(scd->tick_gtod, scd->clock),
* max(scd->clock, scd->tick_gtod + TICK_NSEC)); * scd->tick_gtod + TICK_NSEC);
*/ */
clock = scd->tick_gtod + delta; clock = scd->tick_gtod + delta;
min_clock = wrap_max(scd->tick_gtod, scd->clock); min_clock = wrap_max(scd->tick_gtod, scd->clock);
max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC); max_clock = scd->tick_gtod + TICK_NSEC;
clock = wrap_max(clock, min_clock); clock = wrap_max(clock, min_clock);
clock = wrap_min(clock, max_clock); clock = wrap_min(clock, max_clock);

View File

@ -135,7 +135,7 @@ int unregister_dynamic_debug_module(char *mod_name)
nr_entries--; nr_entries--;
out: out:
up(&debug_list_mutex); up(&debug_list_mutex);
return 0; return ret;
} }
EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module); EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module);
@ -289,7 +289,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf,
dynamic_enabled = DYNAMIC_ENABLED_SOME; dynamic_enabled = DYNAMIC_ENABLED_SOME;
err = 0; err = 0;
printk(KERN_DEBUG printk(KERN_DEBUG
"debugging enabled for module %s", "debugging enabled for module %s\n",
elem->name); elem->name);
} else if (!value && (elem->enable == 1)) { } else if (!value && (elem->enable == 1)) {
elem->enable = 0; elem->enable = 0;
@ -309,7 +309,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf,
err = 0; err = 0;
printk(KERN_DEBUG printk(KERN_DEBUG
"debugging disabled for module " "debugging disabled for module "
"%s", elem->name); "%s\n", elem->name);
} }
} }
} }

View File

@ -998,7 +998,7 @@ static void do_pages_stat_array(struct mm_struct *mm, unsigned long nr_pages,
unsigned long addr = (unsigned long)(*pages); unsigned long addr = (unsigned long)(*pages);
struct vm_area_struct *vma; struct vm_area_struct *vma;
struct page *page; struct page *page;
int err; int err = -EFAULT;
vma = find_vma(mm, addr); vma = find_vma(mm, addr);
if (!vma) if (!vma)

View File

@ -535,7 +535,7 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size,
struct kmem_cache *c; struct kmem_cache *c;
c = slob_alloc(sizeof(struct kmem_cache), c = slob_alloc(sizeof(struct kmem_cache),
flags, ARCH_KMALLOC_MINALIGN, -1); GFP_KERNEL, ARCH_KMALLOC_MINALIGN, -1);
if (c) { if (c) {
c->name = name; c->name = name;

View File

@ -133,9 +133,11 @@ static int poll_one_napi(struct netpoll_info *npinfo,
npinfo->rx_flags |= NETPOLL_RX_DROP; npinfo->rx_flags |= NETPOLL_RX_DROP;
atomic_inc(&trapped); atomic_inc(&trapped);
set_bit(NAPI_STATE_NPSVC, &napi->state);
work = napi->poll(napi, budget); work = napi->poll(napi, budget);
clear_bit(NAPI_STATE_NPSVC, &napi->state);
atomic_dec(&trapped); atomic_dec(&trapped);
npinfo->rx_flags &= ~NETPOLL_RX_DROP; npinfo->rx_flags &= ~NETPOLL_RX_DROP;

View File

@ -61,7 +61,7 @@ static struct
static struct xt_table nat_table = { static struct xt_table nat_table = {
.name = "nat", .name = "nat",
.valid_hooks = NAT_VALID_HOOKS, .valid_hooks = NAT_VALID_HOOKS,
.lock = __RW_LOCK_UNLOCKED(__nat_table.lock), .lock = __RW_LOCK_UNLOCKED(nat_table.lock),
.me = THIS_MODULE, .me = THIS_MODULE,
.af = AF_INET, .af = AF_INET,
}; };

Some files were not shown because too many files have changed in this diff Show More