Merge branch 'akpm' (Andrew's patch-bomb)
Merge misc patches from Andrew Morton: "The MM tree is rather stuck while I wait to find out what the heck is happening with sched/numa. Probably I'll need to route around all the code which was added to -next, sigh. So this is "everything else", or at least most of it - other small bits are still awaiting resolutions of various kinds." * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (180 commits) lib/decompress.c add __init to decompress_method and data kernel/resource.c: fix stack overflow in __reserve_region_with_split() omfs: convert to use beXX_add_cpu() taskstats: cgroupstats_user_cmd() may leak on error aoe: update aoe-internal version number to 50 aoe: update documentation to better reflect aoe-plus-udev usage aoe: remove unused code aoe: make dynamic block minor numbers the default aoe: update and specify AoE address guards and error messages aoe: retain static block device numbers for backwards compatibility aoe: support more AoE addresses with dynamic block device minor numbers aoe: update documentation with new URL and VM settings reference aoe: update copyright year in touched files aoe: update internal version number to 49 aoe: remove unused code and add cosmetic improvements aoe: increase net_device reference count while using it aoe: associate frames with the AoE storage target aoe: disallow unsupported AoE minor addresses aoe: do revalidation steps in order aoe: failover remote interface based on aoe_deadsecs parameter ...
This commit is contained in:
commit
11126c611e
|
@ -454,6 +454,16 @@ The preferred style for long (multi-line) comments is:
|
|||
* with beginning and ending almost-blank lines.
|
||||
*/
|
||||
|
||||
For files in net/ and drivers/net/ the preferred style for long (multi-line)
|
||||
comments is a little different.
|
||||
|
||||
/* The preferred comment style for files in net/ and drivers/net
|
||||
* looks like this.
|
||||
*
|
||||
* It is nearly the same as the generally preferred comment style,
|
||||
* but there is no initial almost-blank line.
|
||||
*/
|
||||
|
||||
It's also important to comment data, whether they are basic types or derived
|
||||
types. To this end, use just one data declaration per line (no commas for
|
||||
multiple data declarations). This leaves you room for a small comment on each
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ...
|
||||
ATA over Ethernet is a network protocol that provides simple access to
|
||||
block storage on the LAN.
|
||||
|
||||
http://www.coraid.com/SUPPORT/EtherDrive-HBA
|
||||
http://support.coraid.com/documents/AoEr11.txt
|
||||
|
||||
It has many tips and hints!
|
||||
The EtherDrive (R) HOWTO for 2.6 and 3.x kernels is found at ...
|
||||
|
||||
http://support.coraid.com/support/linux/EtherDrive-2.6-HOWTO.html
|
||||
|
||||
It has many tips and hints! Please see, especially, recommended
|
||||
tunings for virtual memory:
|
||||
|
||||
http://support.coraid.com/support/linux/EtherDrive-2.6-HOWTO-5.html#ss5.19
|
||||
|
||||
The aoetools are userland programs that are designed to work with this
|
||||
driver. The aoetools are on sourceforge.
|
||||
|
@ -23,20 +31,12 @@ CREATING DEVICE NODES
|
|||
There is a udev-install.sh script that shows how to install these
|
||||
rules on your system.
|
||||
|
||||
If you are not using udev, two scripts are provided in
|
||||
Documentation/aoe as examples of static device node creation for
|
||||
using the aoe driver.
|
||||
|
||||
rm -rf /dev/etherd
|
||||
sh Documentation/aoe/mkdevs.sh /dev/etherd
|
||||
|
||||
... or to make just one shelf's worth of block device nodes ...
|
||||
|
||||
sh Documentation/aoe/mkshelf.sh /dev/etherd 0
|
||||
|
||||
There is also an autoload script that shows how to edit
|
||||
/etc/modprobe.d/aoe.conf to ensure that the aoe module is loaded when
|
||||
necessary.
|
||||
necessary. Preloading the aoe module is preferable to autoloading,
|
||||
however, because AoE discovery takes a few seconds. It can be
|
||||
confusing when an AoE device is not present the first time the a
|
||||
command is run but appears a second later.
|
||||
|
||||
USING DEVICE NODES
|
||||
|
||||
|
@ -51,9 +51,9 @@ USING DEVICE NODES
|
|||
"echo > /dev/etherd/discover" tells the driver to find out what AoE
|
||||
devices are available.
|
||||
|
||||
These character devices may disappear and be replaced by sysfs
|
||||
counterparts. Using the commands in aoetools insulates users from
|
||||
these implementation details.
|
||||
In the future these character devices may disappear and be replaced
|
||||
by sysfs counterparts. Using the commands in aoetools insulates
|
||||
users from these implementation details.
|
||||
|
||||
The block devices are named like this:
|
||||
|
||||
|
@ -76,8 +76,8 @@ USING SYSFS
|
|||
The netif attribute is the network interface on the localhost
|
||||
through which we are communicating with the remote AoE device.
|
||||
|
||||
There is a script in this directory that formats this information
|
||||
in a convenient way. Users with aoetools can use the aoe-stat
|
||||
There is a script in this directory that formats this information in
|
||||
a convenient way. Users with aoetools should use the aoe-stat
|
||||
command.
|
||||
|
||||
root@makki root# sh Documentation/aoe/status.sh
|
||||
|
@ -121,3 +121,21 @@ DRIVER OPTIONS
|
|||
usage example for the module parameter.
|
||||
|
||||
modprobe aoe_iflist="eth1 eth3"
|
||||
|
||||
The aoe_deadsecs module parameter determines the maximum number of
|
||||
seconds that the driver will wait for an AoE device to provide a
|
||||
response to an AoE command. After aoe_deadsecs seconds have
|
||||
elapsed, the AoE device will be marked as "down".
|
||||
|
||||
The aoe_maxout module parameter has a default of 128. This is the
|
||||
maximum number of unresponded packets that will be sent to an AoE
|
||||
target at one time.
|
||||
|
||||
The aoe_dyndevs module parameter defaults to 1, meaning that the
|
||||
driver will assign a block device minor number to a discovered AoE
|
||||
target based on the order of its discovery. With dynamic minor
|
||||
device numbers in use, a greater range of AoE shelf and slot
|
||||
addresses can be supported. Users with udev will never have to
|
||||
think about minor numbers. Using aoe_dyndevs=0 allows device nodes
|
||||
to be pre-created using a static minor-number scheme with the
|
||||
aoe-mkshelf script in the aoetools.
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
n_shelves=${n_shelves:-10}
|
||||
n_partitions=${n_partitions:-16}
|
||||
|
||||
if test "$#" != "1"; then
|
||||
echo "Usage: sh `basename $0` {dir}" 1>&2
|
||||
echo " n_partitions=16 sh `basename $0` {dir}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
dir=$1
|
||||
|
||||
MAJOR=152
|
||||
|
||||
echo "Creating AoE devnode files in $dir ..."
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p $dir
|
||||
|
||||
# (Status info is in sysfs. See status.sh.)
|
||||
# rm -f $dir/stat
|
||||
# mknod -m 0400 $dir/stat c $MAJOR 1
|
||||
rm -f $dir/err
|
||||
mknod -m 0400 $dir/err c $MAJOR 2
|
||||
rm -f $dir/discover
|
||||
mknod -m 0200 $dir/discover c $MAJOR 3
|
||||
rm -f $dir/interfaces
|
||||
mknod -m 0200 $dir/interfaces c $MAJOR 4
|
||||
rm -f $dir/revalidate
|
||||
mknod -m 0200 $dir/revalidate c $MAJOR 5
|
||||
rm -f $dir/flush
|
||||
mknod -m 0200 $dir/flush c $MAJOR 6
|
||||
|
||||
export n_partitions
|
||||
mkshelf=`echo $0 | sed 's!mkdevs!mkshelf!'`
|
||||
i=0
|
||||
while test $i -lt $n_shelves; do
|
||||
sh -xc "sh $mkshelf $dir $i"
|
||||
i=`expr $i + 1`
|
||||
done
|
|
@ -1,28 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
if test "$#" != "2"; then
|
||||
echo "Usage: sh `basename $0` {dir} {shelfaddress}" 1>&2
|
||||
echo " n_partitions=16 sh `basename $0` {dir} {shelfaddress}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
n_partitions=${n_partitions:-16}
|
||||
dir=$1
|
||||
shelf=$2
|
||||
nslots=16
|
||||
maxslot=`echo $nslots 1 - p | dc`
|
||||
MAJOR=152
|
||||
|
||||
set -e
|
||||
|
||||
minor=`echo $nslots \* $shelf \* $n_partitions | bc`
|
||||
endp=`echo $n_partitions - 1 | bc`
|
||||
for slot in `seq 0 $maxslot`; do
|
||||
for part in `seq 0 $endp`; do
|
||||
name=e$shelf.$slot
|
||||
test "$part" != "0" && name=${name}p$part
|
||||
rm -f $dir/$name
|
||||
mknod -m 0660 $dir/$name b $MAJOR $minor
|
||||
|
||||
minor=`expr $minor + 1`
|
||||
done
|
||||
done
|
|
@ -1,5 +1,8 @@
|
|||
#! /bin/sh
|
||||
# collate and present sysfs information about AoE storage
|
||||
#
|
||||
# A more complete version of this script is aoe-stat, in the
|
||||
# aoetools.
|
||||
|
||||
set -e
|
||||
format="%8s\t%8s\t%8s\n"
|
||||
|
|
|
@ -9,6 +9,7 @@ Copyright (C) 2008-2011 Freescale Semiconductor Inc.
|
|||
-Run Time Integrity Check (RTIC) Node
|
||||
-Run Time Integrity Check (RTIC) Memory Node
|
||||
-Secure Non-Volatile Storage (SNVS) Node
|
||||
-Secure Non-Volatile Storage (SNVS) Low Power (LP) RTC Node
|
||||
-Full Example
|
||||
|
||||
NOTE: the SEC 4 is also known as Freescale's Cryptographic Accelerator
|
||||
|
@ -294,6 +295,27 @@ Secure Non-Volatile Storage (SNVS) Node
|
|||
address and length of the SEC4 configuration
|
||||
registers.
|
||||
|
||||
- #address-cells
|
||||
Usage: required
|
||||
Value type: <u32>
|
||||
Definition: A standard property. Defines the number of cells
|
||||
for representing physical addresses in child nodes. Must
|
||||
have a value of 1.
|
||||
|
||||
- #size-cells
|
||||
Usage: required
|
||||
Value type: <u32>
|
||||
Definition: A standard property. Defines the number of cells
|
||||
for representing the size of physical addresses in
|
||||
child nodes. Must have a value of 1.
|
||||
|
||||
- ranges
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: A standard property. Specifies the physical address
|
||||
range of the SNVS register space. A triplet that includes
|
||||
the child address, parent address, & length.
|
||||
|
||||
- interrupts
|
||||
Usage: required
|
||||
Value type: <prop_encoded-array>
|
||||
|
@ -314,10 +336,33 @@ EXAMPLE
|
|||
sec_mon@314000 {
|
||||
compatible = "fsl,sec-v4.0-mon";
|
||||
reg = <0x314000 0x1000>;
|
||||
ranges = <0 0x314000 0x1000>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <93 2>;
|
||||
};
|
||||
|
||||
=====================================================================
|
||||
Secure Non-Volatile Storage (SNVS) Low Power (LP) RTC Node
|
||||
|
||||
A SNVS child node that defines SNVS LP RTC.
|
||||
|
||||
- compatible
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: Must include "fsl,sec-v4.0-mon-rtc-lp".
|
||||
|
||||
- reg
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: A standard property. Specifies the physical
|
||||
address and length of the SNVS LP configuration registers.
|
||||
|
||||
EXAMPLE
|
||||
sec_mon_rtc_lp@314000 {
|
||||
compatible = "fsl,sec-v4.0-mon-rtc-lp";
|
||||
reg = <0x34 0x58>;
|
||||
};
|
||||
|
||||
=====================================================================
|
||||
FULL EXAMPLE
|
||||
|
||||
|
@ -390,8 +435,14 @@ FULL EXAMPLE
|
|||
sec_mon: sec_mon@314000 {
|
||||
compatible = "fsl,sec-v4.0-mon";
|
||||
reg = <0x314000 0x1000>;
|
||||
ranges = <0 0x314000 0x1000>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <93 2>;
|
||||
|
||||
sec_mon_rtc_lp@34 {
|
||||
compatible = "fsl,sec-v4.0-mon-rtc-lp";
|
||||
reg = <0x34 0x58>;
|
||||
};
|
||||
};
|
||||
|
||||
=====================================================================
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
See Documentation/devicetree/bindings/crypto/fsl-sec4.txt for details.
|
|
@ -69,6 +69,7 @@ MAC/FDDI addresses:
|
|||
%pMR 05:04:03:02:01:00
|
||||
%pMF 00-01-02-03-04-05
|
||||
%pm 000102030405
|
||||
%pmR 050403020100
|
||||
|
||||
For printing 6-byte MAC/FDDI addresses in hex notation. The 'M' and 'm'
|
||||
specifiers result in a printed address with ('M') or without ('m') byte
|
||||
|
|
|
@ -119,8 +119,9 @@ three different userspace interfaces:
|
|||
* /sys/class/rtc/rtcN ... sysfs attributes support readonly
|
||||
access to some RTC attributes.
|
||||
|
||||
* /proc/driver/rtc ... the first RTC (rtc0) may expose itself
|
||||
using a procfs interface. More information is (currently) shown
|
||||
* /proc/driver/rtc ... the system clock RTC may expose itself
|
||||
using a procfs interface. If there is no RTC for the system clock,
|
||||
rtc0 is used by default. More information is (currently) shown
|
||||
here than through sysfs.
|
||||
|
||||
The RTC Class framework supports a wide variety of RTCs, ranging from those
|
||||
|
|
|
@ -181,6 +181,8 @@ core_pattern is used to specify a core dumpfile pattern name.
|
|||
%p pid
|
||||
%u uid
|
||||
%g gid
|
||||
%d dump mode, matches PR_SET_DUMPABLE and
|
||||
/proc/sys/fs/suid_dumpable
|
||||
%s signal number
|
||||
%t UNIX time of dump
|
||||
%h hostname
|
||||
|
|
|
@ -760,6 +760,7 @@ S: Maintained
|
|||
T: git git://git.pengutronix.de/git/imx/linux-2.6.git
|
||||
F: arch/arm/mach-imx/
|
||||
F: arch/arm/plat-mxc/
|
||||
F: arch/arm/configs/imx*_defconfig
|
||||
|
||||
ARM/FREESCALE IMX6
|
||||
M: Shawn Guo <shawn.guo@linaro.org>
|
||||
|
@ -1245,7 +1246,7 @@ F: include/linux/i2c/at24.h
|
|||
|
||||
ATA OVER ETHERNET (AOE) DRIVER
|
||||
M: "Ed L. Cashin" <ecashin@coraid.com>
|
||||
W: http://www.coraid.com/support/linux
|
||||
W: http://support.coraid.com/support/linux
|
||||
S: Supported
|
||||
F: Documentation/aoe/
|
||||
F: drivers/block/aoe/
|
||||
|
@ -3123,6 +3124,7 @@ T: git git://git.secretlab.ca/git/linux-2.6.git
|
|||
F: Documentation/gpio.txt
|
||||
F: drivers/gpio/
|
||||
F: include/linux/gpio*
|
||||
F: include/asm-generic/gpio.h
|
||||
|
||||
GRE DEMULTIPLEXER DRIVER
|
||||
M: Dmitry Kozlov <xeb@mail.ru>
|
||||
|
@ -5265,7 +5267,7 @@ F: include/linux/i2c-algo-pca.h
|
|||
F: include/linux/i2c-pca-platform.h
|
||||
|
||||
PCDP - PRIMARY CONSOLE AND DEBUG PORT
|
||||
M: Khalid Aziz <khalid.aziz@hp.com>
|
||||
M: Khalid Aziz <khalid@gonehiking.org>
|
||||
S: Maintained
|
||||
F: drivers/firmware/pcdp.*
|
||||
|
||||
|
@ -5554,7 +5556,7 @@ S: Maintained
|
|||
W: http://linuxptp.sourceforge.net/
|
||||
F: Documentation/ABI/testing/sysfs-ptp
|
||||
F: Documentation/ptp/*
|
||||
F: drivers/net/gianfar_ptp.c
|
||||
F: drivers/net/ethernet/freescale/gianfar_ptp.c
|
||||
F: drivers/net/phy/dp83640*
|
||||
F: drivers/ptp/*
|
||||
F: include/linux/ptp_cl*
|
||||
|
|
|
@ -625,7 +625,7 @@ fail:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct clk *const standard_pmc_clocks[] __initdata = {
|
||||
static struct clk *const standard_pmc_clocks[] __initconst = {
|
||||
/* four primary clocks */
|
||||
&clk32k,
|
||||
&main_clk,
|
||||
|
|
|
@ -88,7 +88,7 @@ static struct davinci_mmc_config mmc_config = {
|
|||
.version = MMC_CTLR_VERSION_1,
|
||||
};
|
||||
|
||||
static const short sdio1_pins[] __initdata = {
|
||||
static const short sdio1_pins[] __initconst = {
|
||||
TNETV107X_SDIO1_CLK_1, TNETV107X_SDIO1_CMD_1,
|
||||
TNETV107X_SDIO1_DATA0_1, TNETV107X_SDIO1_DATA1_1,
|
||||
TNETV107X_SDIO1_DATA2_1, TNETV107X_SDIO1_DATA3_1,
|
||||
|
@ -96,12 +96,12 @@ static const short sdio1_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
static const short uart1_pins[] __initdata = {
|
||||
static const short uart1_pins[] __initconst = {
|
||||
TNETV107X_UART1_RD, TNETV107X_UART1_TD,
|
||||
-1
|
||||
};
|
||||
|
||||
static const short ssp_pins[] __initdata = {
|
||||
static const short ssp_pins[] __initconst = {
|
||||
TNETV107X_SSP0_0, TNETV107X_SSP0_1, TNETV107X_SSP0_2,
|
||||
TNETV107X_SSP1_0, TNETV107X_SSP1_1, TNETV107X_SSP1_2,
|
||||
TNETV107X_SSP1_3, -1
|
||||
|
|
|
@ -838,7 +838,7 @@ static const struct mux_config da830_pins[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
const short da830_emif25_pins[] __initdata = {
|
||||
const short da830_emif25_pins[] __initconst = {
|
||||
DA830_EMA_D_0, DA830_EMA_D_1, DA830_EMA_D_2, DA830_EMA_D_3,
|
||||
DA830_EMA_D_4, DA830_EMA_D_5, DA830_EMA_D_6, DA830_EMA_D_7,
|
||||
DA830_EMA_D_8, DA830_EMA_D_9, DA830_EMA_D_10, DA830_EMA_D_11,
|
||||
|
@ -853,19 +853,19 @@ const short da830_emif25_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_spi0_pins[] __initdata = {
|
||||
const short da830_spi0_pins[] __initconst = {
|
||||
DA830_SPI0_SOMI_0, DA830_SPI0_SIMO_0, DA830_SPI0_CLK, DA830_NSPI0_ENA,
|
||||
DA830_NSPI0_SCS_0,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_spi1_pins[] __initdata = {
|
||||
const short da830_spi1_pins[] __initconst = {
|
||||
DA830_SPI1_SOMI_0, DA830_SPI1_SIMO_0, DA830_SPI1_CLK, DA830_NSPI1_ENA,
|
||||
DA830_NSPI1_SCS_0,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_mmc_sd_pins[] __initdata = {
|
||||
const short da830_mmc_sd_pins[] __initconst = {
|
||||
DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2,
|
||||
DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5,
|
||||
DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK,
|
||||
|
@ -873,32 +873,32 @@ const short da830_mmc_sd_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_uart0_pins[] __initdata = {
|
||||
const short da830_uart0_pins[] __initconst = {
|
||||
DA830_NUART0_CTS, DA830_NUART0_RTS, DA830_UART0_RXD, DA830_UART0_TXD,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_uart1_pins[] __initdata = {
|
||||
const short da830_uart1_pins[] __initconst = {
|
||||
DA830_UART1_RXD, DA830_UART1_TXD,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_uart2_pins[] __initdata = {
|
||||
const short da830_uart2_pins[] __initconst = {
|
||||
DA830_UART2_RXD, DA830_UART2_TXD,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_usb20_pins[] __initdata = {
|
||||
const short da830_usb20_pins[] __initconst = {
|
||||
DA830_USB0_DRVVBUS, DA830_USB_REFCLKIN,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_usb11_pins[] __initdata = {
|
||||
const short da830_usb11_pins[] __initconst = {
|
||||
DA830_USB_REFCLKIN,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_uhpi_pins[] __initdata = {
|
||||
const short da830_uhpi_pins[] __initconst = {
|
||||
DA830_UHPI_HD_0, DA830_UHPI_HD_1, DA830_UHPI_HD_2, DA830_UHPI_HD_3,
|
||||
DA830_UHPI_HD_4, DA830_UHPI_HD_5, DA830_UHPI_HD_6, DA830_UHPI_HD_7,
|
||||
DA830_UHPI_HD_8, DA830_UHPI_HD_9, DA830_UHPI_HD_10, DA830_UHPI_HD_11,
|
||||
|
@ -909,14 +909,14 @@ const short da830_uhpi_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_cpgmac_pins[] __initdata = {
|
||||
const short da830_cpgmac_pins[] __initconst = {
|
||||
DA830_RMII_TXD_0, DA830_RMII_TXD_1, DA830_RMII_TXEN, DA830_RMII_CRS_DV,
|
||||
DA830_RMII_RXD_0, DA830_RMII_RXD_1, DA830_RMII_RXER, DA830_MDIO_CLK,
|
||||
DA830_MDIO_D,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_emif3c_pins[] __initdata = {
|
||||
const short da830_emif3c_pins[] __initconst = {
|
||||
DA830_EMB_SDCKE, DA830_EMB_CLK_GLUE, DA830_EMB_CLK, DA830_NEMB_CS_0,
|
||||
DA830_NEMB_CAS, DA830_NEMB_RAS, DA830_NEMB_WE, DA830_EMB_BA_1,
|
||||
DA830_EMB_BA_0, DA830_EMB_A_0, DA830_EMB_A_1, DA830_EMB_A_2,
|
||||
|
@ -935,7 +935,7 @@ const short da830_emif3c_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_mcasp0_pins[] __initdata = {
|
||||
const short da830_mcasp0_pins[] __initconst = {
|
||||
DA830_AHCLKX0, DA830_ACLKX0, DA830_AFSX0,
|
||||
DA830_AHCLKR0, DA830_ACLKR0, DA830_AFSR0, DA830_AMUTE0,
|
||||
DA830_AXR0_0, DA830_AXR0_1, DA830_AXR0_2, DA830_AXR0_3,
|
||||
|
@ -945,7 +945,7 @@ const short da830_mcasp0_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_mcasp1_pins[] __initdata = {
|
||||
const short da830_mcasp1_pins[] __initconst = {
|
||||
DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1,
|
||||
DA830_AHCLKR1, DA830_ACLKR1, DA830_AFSR1, DA830_AMUTE1,
|
||||
DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_3,
|
||||
|
@ -954,24 +954,24 @@ const short da830_mcasp1_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_mcasp2_pins[] __initdata = {
|
||||
const short da830_mcasp2_pins[] __initconst = {
|
||||
DA830_AHCLKX2, DA830_ACLKX2, DA830_AFSX2,
|
||||
DA830_AHCLKR2, DA830_ACLKR2, DA830_AFSR2, DA830_AMUTE2,
|
||||
DA830_AXR2_0, DA830_AXR2_1, DA830_AXR2_2, DA830_AXR2_3,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_i2c0_pins[] __initdata = {
|
||||
const short da830_i2c0_pins[] __initconst = {
|
||||
DA830_I2C0_SDA, DA830_I2C0_SCL,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_i2c1_pins[] __initdata = {
|
||||
const short da830_i2c1_pins[] __initconst = {
|
||||
DA830_I2C1_SCL, DA830_I2C1_SDA,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_lcdcntl_pins[] __initdata = {
|
||||
const short da830_lcdcntl_pins[] __initconst = {
|
||||
DA830_LCD_D_0, DA830_LCD_D_1, DA830_LCD_D_2, DA830_LCD_D_3,
|
||||
DA830_LCD_D_4, DA830_LCD_D_5, DA830_LCD_D_6, DA830_LCD_D_7,
|
||||
DA830_LCD_D_8, DA830_LCD_D_9, DA830_LCD_D_10, DA830_LCD_D_11,
|
||||
|
@ -981,34 +981,34 @@ const short da830_lcdcntl_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da830_pwm_pins[] __initdata = {
|
||||
const short da830_pwm_pins[] __initconst = {
|
||||
DA830_ECAP0_APWM0, DA830_ECAP1_APWM1, DA830_EPWM0B, DA830_EPWM0A,
|
||||
DA830_EPWMSYNCI, DA830_EPWMSYNC0, DA830_ECAP2_APWM2, DA830_EHRPWMGLUETZ,
|
||||
DA830_EPWM2B, DA830_EPWM2A, DA830_EPWM1B, DA830_EPWM1A,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_ecap0_pins[] __initdata = {
|
||||
const short da830_ecap0_pins[] __initconst = {
|
||||
DA830_ECAP0_APWM0,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_ecap1_pins[] __initdata = {
|
||||
const short da830_ecap1_pins[] __initconst = {
|
||||
DA830_ECAP1_APWM1,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_ecap2_pins[] __initdata = {
|
||||
const short da830_ecap2_pins[] __initconst = {
|
||||
DA830_ECAP2_APWM2,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_eqep0_pins[] __initdata = {
|
||||
const short da830_eqep0_pins[] __initconst = {
|
||||
DA830_EQEP0I, DA830_EQEP0S, DA830_EQEP0A, DA830_EQEP0B,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da830_eqep1_pins[] __initdata = {
|
||||
const short da830_eqep1_pins[] __initconst = {
|
||||
DA830_EQEP1I, DA830_EQEP1S, DA830_EQEP1A, DA830_EQEP1B,
|
||||
-1
|
||||
};
|
||||
|
|
|
@ -576,17 +576,17 @@ static const struct mux_config da850_pins[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
const short da850_i2c0_pins[] __initdata = {
|
||||
const short da850_i2c0_pins[] __initconst = {
|
||||
DA850_I2C0_SDA, DA850_I2C0_SCL,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da850_i2c1_pins[] __initdata = {
|
||||
const short da850_i2c1_pins[] __initconst = {
|
||||
DA850_I2C1_SCL, DA850_I2C1_SDA,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da850_lcdcntl_pins[] __initdata = {
|
||||
const short da850_lcdcntl_pins[] __initconst = {
|
||||
DA850_LCD_D_0, DA850_LCD_D_1, DA850_LCD_D_2, DA850_LCD_D_3,
|
||||
DA850_LCD_D_4, DA850_LCD_D_5, DA850_LCD_D_6, DA850_LCD_D_7,
|
||||
DA850_LCD_D_8, DA850_LCD_D_9, DA850_LCD_D_10, DA850_LCD_D_11,
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
#include "devices.h"
|
||||
#include "common.h"
|
||||
|
||||
static const resource_size_t qsd8x50_surf_smc91x_base __initdata = 0x70000300;
|
||||
static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156;
|
||||
static const resource_size_t qsd8x50_surf_smc91x_base __initconst = 0x70000300;
|
||||
static const unsigned qsd8x50_surf_smc91x_gpio __initconst = 156;
|
||||
|
||||
/* Leave smc91x resources empty here, as we'll fill them in
|
||||
* at run-time: they vary from board to board, and the true
|
||||
|
|
|
@ -76,14 +76,14 @@ struct omap_dss_hwmod_data {
|
|||
const int id;
|
||||
};
|
||||
|
||||
static const struct omap_dss_hwmod_data omap2_dss_hwmod_data[] __initdata = {
|
||||
static const struct omap_dss_hwmod_data omap2_dss_hwmod_data[] __initconst = {
|
||||
{ "dss_core", "omapdss_dss", -1 },
|
||||
{ "dss_dispc", "omapdss_dispc", -1 },
|
||||
{ "dss_rfbi", "omapdss_rfbi", -1 },
|
||||
{ "dss_venc", "omapdss_venc", -1 },
|
||||
};
|
||||
|
||||
static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initdata = {
|
||||
static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initconst = {
|
||||
{ "dss_core", "omapdss_dss", -1 },
|
||||
{ "dss_dispc", "omapdss_dispc", -1 },
|
||||
{ "dss_rfbi", "omapdss_rfbi", -1 },
|
||||
|
@ -91,7 +91,7 @@ static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initdata = {
|
|||
{ "dss_dsi1", "omapdss_dsi", 0 },
|
||||
};
|
||||
|
||||
static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
|
||||
static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initconst = {
|
||||
{ "dss_core", "omapdss_dss", -1 },
|
||||
{ "dss_dispc", "omapdss_dispc", -1 },
|
||||
{ "dss_rfbi", "omapdss_rfbi", -1 },
|
||||
|
|
|
@ -55,6 +55,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -130,6 +131,64 @@ typedef u32 compat_old_sigset_t;
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
/* The padding is the same size as AArch64. */
|
||||
int _pad[128/sizeof(int) - 3];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
compat_uptr_t _addr; /* faulting insn/memory ref. */
|
||||
short _addr_lsb; /* LSB of the reported address */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
compat_long_t _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -139,7 +198,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -30,59 +30,6 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/unistd.h>
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
/* The padding is the same size as AArch64. */
|
||||
int _pad[SI_PAD_SIZE];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
__compat_uid32_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
compat_uptr_t _addr; /* faulting insn/memory ref. */
|
||||
short _addr_lsb; /* LSB of the reported address */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
compat_long_t _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
struct compat_sigaction {
|
||||
compat_uptr_t sa_handler;
|
||||
compat_ulong_t sa_flags;
|
||||
|
|
|
@ -102,6 +102,7 @@ typedef struct user_fpu_struct elf_fpregset_t;
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif /* __ASM_AVR32_ELF_H */
|
||||
|
|
|
@ -132,6 +132,7 @@ do { \
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -77,7 +77,8 @@ do { \
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
/* C6X specific section types */
|
||||
#define SHT_C6000_UNWIND 0x70000001
|
||||
|
|
|
@ -86,6 +86,7 @@ typedef unsigned long elf_fpregset_t;
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -137,6 +137,7 @@ do { \
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -153,23 +153,22 @@ static int user_atoi(char __user *ubuf, size_t len)
|
|||
static int sysctl_pm_do_suspend(ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *lenp, loff_t *fpos)
|
||||
{
|
||||
int retval, mode;
|
||||
int mode;
|
||||
|
||||
if (*lenp <= 0)
|
||||
return -EIO;
|
||||
|
||||
mode = user_atoi(buffer, *lenp);
|
||||
if ((mode != 1) && (mode != 5))
|
||||
switch (mode) {
|
||||
case 1:
|
||||
return pm_do_suspend();
|
||||
|
||||
case 5:
|
||||
return pm_do_bus_sleep();
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
if (retval == 0) {
|
||||
if (mode == 5)
|
||||
retval = pm_do_bus_sleep();
|
||||
else
|
||||
retval = pm_do_suspend();
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int try_set_cmode(int new_cmode)
|
||||
|
|
|
@ -184,7 +184,7 @@ static struct clock_cmode __pminitdata clock_cmodes_fr555[16] = {
|
|||
[6] = { _x1, _x1_5, _x1_5, _x4_5, _x0_375 },
|
||||
};
|
||||
|
||||
static const struct clock_cmode __pminitdata *clock_cmodes;
|
||||
static const struct clock_cmode __pminitconst *clock_cmodes;
|
||||
static int __pminitdata clock_doubled;
|
||||
|
||||
static struct uart_port __pminitdata __frv_uart0 = {
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
static const uint8_t __initdata pci_bus0_irq_routing[32][4] = {
|
||||
static const uint8_t __initconst pci_bus0_irq_routing[32][4] = {
|
||||
[0 ] = { IRQ_FPGA_MB86943_PCI_INTA },
|
||||
[16] = { IRQ_FPGA_RTL8029_INTA },
|
||||
[17] = { IRQ_FPGA_PCI_INTC, IRQ_FPGA_PCI_INTD, IRQ_FPGA_PCI_INTA, IRQ_FPGA_PCI_INTB },
|
||||
|
|
|
@ -54,7 +54,8 @@ typedef unsigned long elf_fpregset_t;
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#define R_H8_NONE 0
|
||||
#define R_H8_DIR32 1
|
||||
|
|
|
@ -51,6 +51,7 @@ asmlinkage void syscall_print(void *dummy,...)
|
|||
* Do a system call from kernel instead of calling sys_execve so we
|
||||
* end up with proper pt_regs.
|
||||
*/
|
||||
asmlinkage
|
||||
int kernel_execve(const char *filename,
|
||||
const char *const argv[],
|
||||
const char *const envp[])
|
||||
|
|
|
@ -62,7 +62,7 @@ static struct irqaction itu_irq = {
|
|||
.flags = IRQF_DISABLED | IRQF_TIMER,
|
||||
};
|
||||
|
||||
static const int __initdata divide_rate[] = {1, 2, 4, 8};
|
||||
static const int __initconst divide_rate[] = {1, 2, 4, 8};
|
||||
|
||||
void __init h8300_timer_setup(void)
|
||||
{
|
||||
|
|
|
@ -57,7 +57,7 @@ static struct irqaction timer16_irq = {
|
|||
.flags = IRQF_DISABLED | IRQF_TIMER,
|
||||
};
|
||||
|
||||
static const int __initdata divide_rate[] = {1, 2, 4, 8};
|
||||
static const int __initconst divide_rate[] = {1, 2, 4, 8};
|
||||
|
||||
void __init h8300_timer_setup(void)
|
||||
{
|
||||
|
|
|
@ -77,7 +77,7 @@ static struct irqaction timer8_irq = {
|
|||
.flags = IRQF_DISABLED | IRQF_TIMER,
|
||||
};
|
||||
|
||||
static const int __initdata divide_rate[] = {8, 64, 8192};
|
||||
static const int __initconst divide_rate[] = {8, 64, 8192};
|
||||
|
||||
void __init h8300_timer_setup(void)
|
||||
{
|
||||
|
|
|
@ -66,7 +66,7 @@ static struct irqaction tpu_irq = {
|
|||
.flags = IRQF_DISABLED | IRQF_TIMER,
|
||||
};
|
||||
|
||||
static const int __initdata divide_rate[] = {
|
||||
static const int __initconst divide_rate[] = {
|
||||
#if CONFIG_H8300_TPU_CH == 0
|
||||
1,4,16,64,0,0,0,0,
|
||||
#elif (CONFIG_H8300_TPU_CH == 1) || (CONFIG_H8300_TPU_CH == 5)
|
||||
|
|
|
@ -14,14 +14,14 @@
|
|||
#include <asm/gpio-internal.h>
|
||||
#include <asm/regs306x.h>
|
||||
|
||||
const int __initdata h8300_saved_vectors[] = {
|
||||
const int __initconst h8300_saved_vectors[] = {
|
||||
#if defined(CONFIG_GDB_DEBUG)
|
||||
TRAP3_VEC, /* TRAPA #3 is GDB breakpoint */
|
||||
#endif
|
||||
-1,
|
||||
};
|
||||
|
||||
const h8300_vector __initdata h8300_trap_table[] = {
|
||||
const h8300_vector __initconst h8300_trap_table[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
system_call,
|
||||
0,
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <asm/regs267x.h>
|
||||
|
||||
/* saved vector list */
|
||||
const int __initdata h8300_saved_vectors[]={
|
||||
const int __initconst h8300_saved_vectors[] = {
|
||||
#if defined(CONFIG_GDB_DEBUG)
|
||||
TRACE_VEC,
|
||||
TRAP3_VEC,
|
||||
|
@ -27,7 +27,7 @@ const int __initdata h8300_saved_vectors[]={
|
|||
};
|
||||
|
||||
/* trap entry table */
|
||||
const H8300_VECTOR __initdata h8300_trap_table[] = {
|
||||
const H8300_VECTOR __initconst h8300_trap_table[] = {
|
||||
0,0,0,0,0,
|
||||
trace_break, /* TRACE */
|
||||
0,0,
|
||||
|
|
|
@ -217,7 +217,8 @@ do { \
|
|||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
#endif
|
||||
|
||||
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
|
||||
|
|
|
@ -433,7 +433,7 @@ xen_resend_irq(unsigned int vector)
|
|||
(void)resend_irq_on_evtchn(vector);
|
||||
}
|
||||
|
||||
const struct pv_irq_ops xen_irq_ops __initdata = {
|
||||
const struct pv_irq_ops xen_irq_ops __initconst = {
|
||||
.register_ipi = xen_register_ipi,
|
||||
|
||||
.assign_irq_vector = xen_assign_irq_vector,
|
||||
|
|
|
@ -27,7 +27,7 @@ extern void (*late_time_init)(void);
|
|||
extern char xen_event_callback;
|
||||
void __init xen_init_IRQ(void);
|
||||
|
||||
extern const struct pv_irq_ops xen_irq_ops __initdata;
|
||||
extern const struct pv_irq_ops xen_irq_ops __initconst;
|
||||
extern void xen_smp_intr_init(void);
|
||||
extern void xen_send_ipi(int cpu, int vec);
|
||||
|
||||
|
|
|
@ -128,6 +128,7 @@ typedef elf_fpreg_t elf_fpregset_t;
|
|||
intent than poking at uname or /proc/cpuinfo. */
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif /* _ASM_M32R__ELF_H */
|
||||
|
|
|
@ -113,6 +113,7 @@ typedef struct user_m68kfp_struct elf_fpregset_t;
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -116,7 +116,8 @@ do { \
|
|||
} while (0)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK)))
|
||||
#endif
|
||||
|
||||
#endif /* __uClinux__ */
|
||||
|
|
|
@ -632,7 +632,7 @@ static struct board_info __initdata board_DWVS0 = {
|
|||
/*
|
||||
* all boards
|
||||
*/
|
||||
static const struct board_info __initdata *bcm963xx_boards[] = {
|
||||
static const struct board_info __initconst *bcm963xx_boards[] = {
|
||||
#ifdef CONFIG_BCM63XX_CPU_6328
|
||||
&board_96328avng,
|
||||
#endif
|
||||
|
|
|
@ -10,68 +10,6 @@
|
|||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_code;
|
||||
int si_errno;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* IRIX SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
compat_clock_t _utime;
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _stime;
|
||||
} _irix_sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
s32 _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL, SIGXFSZ (To do ...) */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval;/* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d,
|
||||
const sigset_t *s)
|
||||
{
|
||||
|
|
|
@ -43,6 +43,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -124,6 +125,73 @@ typedef u32 compat_old_sigset_t; /* at least 32 bits */
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
#define SI_PAD_SIZE32 (128/sizeof(int) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_code;
|
||||
int si_errno;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* IRIX SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
compat_clock_t _utime;
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _stime;
|
||||
} _irix_sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
s32 _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL, SIGXFSZ (To do ...) */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval;/* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -133,7 +201,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -58,7 +58,7 @@ union octeon_pci_address {
|
|||
} s;
|
||||
};
|
||||
|
||||
int __initdata (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
int __initconst (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin);
|
||||
enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ CHECKFLAGS +=
|
|||
PROCESSOR := unset
|
||||
UNIT := unset
|
||||
|
||||
KBUILD_CFLAGS += -mam33 -mmem-funcs -DCPU=AM33
|
||||
KBUILD_CFLAGS += -mam33 -DCPU=AM33 $(call cc-option,-mmem-funcs,)
|
||||
KBUILD_AFLAGS += -mam33 -DCPU=AM33
|
||||
|
||||
ifeq ($(CONFIG_MN10300_CURRENT_IN_E2),y)
|
||||
|
|
|
@ -151,7 +151,8 @@ do { \
|
|||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_ELF_H */
|
||||
|
|
|
@ -110,7 +110,8 @@ extern void dump_elf_thread(elf_greg_t *dest, struct pt_regs *pt);
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif
|
||||
|
|
|
@ -13,6 +13,7 @@ config PARISC
|
|||
select HAVE_PERF_EVENTS
|
||||
select GENERIC_ATOMIC64 if !64BIT
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select BROKEN_RODATA
|
||||
select GENERIC_IRQ_PROBE
|
||||
select GENERIC_PCI_IOMAP
|
||||
select IRQ_PER_CPU
|
||||
|
|
|
@ -36,6 +36,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -127,6 +128,63 @@ typedef u32 compat_old_sigset_t; /* at least 32 bits */
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[128/sizeof(int) - 3];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
char _pad[sizeof(unsigned int) - sizeof(int)];
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -136,7 +194,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -55,58 +55,6 @@ struct k_sigaction32 {
|
|||
struct compat_sigaction sa;
|
||||
};
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[((128/sizeof(int)) - 3)];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
char _pad[sizeof(unsigned int) - sizeof(int)];
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from);
|
||||
int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from);
|
||||
|
||||
|
|
|
@ -288,6 +288,16 @@ static __inline__ int test_bit_le(unsigned long nr,
|
|||
return (tmp[nr >> 3] >> (nr & 7)) & 1;
|
||||
}
|
||||
|
||||
static inline void set_bit_le(int nr, void *addr)
|
||||
{
|
||||
set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
}
|
||||
|
||||
static inline void clear_bit_le(int nr, void *addr)
|
||||
{
|
||||
clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
}
|
||||
|
||||
static inline void __set_bit_le(int nr, void *addr)
|
||||
{
|
||||
__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
|
|
|
@ -38,6 +38,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -114,6 +115,64 @@ typedef u32 compat_old_sigset_t;
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
#define SI_PAD_SIZE32 (128/sizeof(int) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -123,7 +182,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#ifdef __powerpc64__
|
||||
# define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
|
||||
# define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
|
||||
#endif
|
||||
|
||||
#include <asm-generic/siginfo.h>
|
||||
|
|
|
@ -16,57 +16,6 @@
|
|||
|
||||
/* These are here to support 32-bit syscalls on a 64-bit kernel. */
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
compat_uid_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define __old_sigaction32 old_sigaction32
|
||||
|
||||
struct __old_sigaction32 {
|
||||
|
|
|
@ -50,7 +50,7 @@ machine_device_initcall(ppc40x_simple, ppc40x_device_probe);
|
|||
* Again, if your board needs to do things differently then create a
|
||||
* board.c file for it rather than adding it to this list.
|
||||
*/
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"amcc,acadia",
|
||||
"amcc,haleakala",
|
||||
"amcc,kilauea",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
/*
|
||||
* list of supported boards
|
||||
*/
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"prt,prtlvt",
|
||||
NULL
|
||||
};
|
||||
|
|
|
@ -172,7 +172,7 @@ static void __init lite5200_setup_arch(void)
|
|||
mpc52xx_setup_pci();
|
||||
}
|
||||
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"fsl,lite5200",
|
||||
"fsl,lite5200b",
|
||||
NULL,
|
||||
|
|
|
@ -232,7 +232,7 @@ static void __init media5200_setup_arch(void)
|
|||
}
|
||||
|
||||
/* list of the supported boards */
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"fsl,media5200",
|
||||
NULL
|
||||
};
|
||||
|
|
|
@ -60,7 +60,7 @@ static void __init mpc837x_rdb_setup_arch(void)
|
|||
|
||||
machine_device_initcall(mpc837x_rdb, mpc83xx_declare_of_platform_devices);
|
||||
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"fsl,mpc8377rdb",
|
||||
"fsl,mpc8378rdb",
|
||||
"fsl,mpc8379rdb",
|
||||
|
|
|
@ -125,7 +125,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520,
|
|||
|
||||
machine_device_initcall(tqm85xx, mpc85xx_common_publish_devices);
|
||||
|
||||
static const char *board[] __initdata = {
|
||||
static const char * const board[] __initconst = {
|
||||
"tqc,tqm8540",
|
||||
"tqc,tqm8541",
|
||||
"tqc,tqm8548",
|
||||
|
|
|
@ -65,6 +65,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -144,6 +145,79 @@ typedef u32 compat_old_sigset_t; /* at least 32 bits */
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[128/sizeof(int) - 3];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
pid_t _pid; /* sender's pid */
|
||||
uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
pid_t _pid; /* sender's pid */
|
||||
uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
pid_t _pid; /* which child */
|
||||
uid_t _uid; /* sender's uid */
|
||||
int _status;/* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
__u32 _addr; /* faulting insn/memory ref. - pointer */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
/*
|
||||
* How these fields are to be accessed.
|
||||
*/
|
||||
#define si_pid _sifields._kill._pid
|
||||
#define si_uid _sifields._kill._uid
|
||||
#define si_status _sifields._sigchld._status
|
||||
#define si_utime _sifields._sigchld._utime
|
||||
#define si_stime _sifields._sigchld._stime
|
||||
#define si_value _sifields._rt._sigval
|
||||
#define si_int _sifields._rt._sigval.sival_int
|
||||
#define si_ptr _sifields._rt._sigval.sival_ptr
|
||||
#define si_addr _sifields._sigfault._addr
|
||||
#define si_band _sifields._sigpoll._band
|
||||
#define si_fd _sifields._sigpoll._fd
|
||||
#define si_tid _sifields._timer._tid
|
||||
#define si_overrun _sifields._timer._overrun
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -153,7 +227,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -24,74 +24,6 @@ struct old_sigaction32 {
|
|||
__u32 sa_restorer; /* Another 32 bit pointer */
|
||||
};
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[((128/sizeof(int)) - 3)];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
pid_t _pid; /* sender's pid */
|
||||
uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
pid_t _pid; /* sender's pid */
|
||||
uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
pid_t _pid; /* which child */
|
||||
uid_t _uid; /* sender's uid */
|
||||
int _status;/* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
__u32 _addr; /* faulting insn/memory ref. - pointer */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
/*
|
||||
* How these fields are to be accessed.
|
||||
*/
|
||||
#define si_pid _sifields._kill._pid
|
||||
#define si_uid _sifields._kill._uid
|
||||
#define si_status _sifields._sigchld._status
|
||||
#define si_utime _sifields._sigchld._utime
|
||||
#define si_stime _sifields._sigchld._stime
|
||||
#define si_value _sifields._rt._sigval
|
||||
#define si_int _sifields._rt._sigval.sival_int
|
||||
#define si_ptr _sifields._rt._sigval.sival_ptr
|
||||
#define si_addr _sifields._sigfault._addr
|
||||
#define si_band _sifields._sigpoll._band
|
||||
#define si_fd _sifields._sigpoll._fd
|
||||
#define si_tid _sifields._timer._tid
|
||||
#define si_overrun _sifields._timer._overrun
|
||||
|
||||
/* asm/sigcontext.h */
|
||||
typedef union
|
||||
{
|
||||
|
|
|
@ -5,6 +5,7 @@ config SCORE
|
|||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_SHOW
|
||||
select GENERIC_IOMAP
|
||||
select GENERIC_ATOMIC64
|
||||
select HAVE_MEMBLOCK
|
||||
select HAVE_MEMBLOCK_NODE_MAP
|
||||
select ARCH_DISCARD_MEMBLOCK
|
||||
|
|
|
@ -54,7 +54,7 @@ typedef elf_fpreg_t elf_fpregset_t;
|
|||
|
||||
#define SET_PERSONALITY(ex) \
|
||||
do { \
|
||||
set_personality(PER_LINUX); \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK))); \
|
||||
} while (0)
|
||||
|
||||
struct task_struct;
|
||||
|
|
|
@ -112,6 +112,7 @@ score_execve(struct pt_regs *regs)
|
|||
* Do a system call from kernel instead of calling sys_execve so we
|
||||
* end up with proper pt_regs.
|
||||
*/
|
||||
asmlinkage
|
||||
int kernel_execve(const char *filename,
|
||||
const char *const argv[],
|
||||
const char *const envp[])
|
||||
|
|
|
@ -183,7 +183,8 @@ do { \
|
|||
} while (0)
|
||||
#endif
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK)))
|
||||
|
||||
#ifdef CONFIG_VSYSCALL
|
||||
/* vDSO has arch_setup_additional_pages */
|
||||
|
|
|
@ -134,7 +134,7 @@ __BUILD_MEMORY_STRING(__raw_, q, u64)
|
|||
* load/store instructions. sh_io_port_base is the virtual address to
|
||||
* which all ports are being mapped.
|
||||
*/
|
||||
extern const unsigned long sh_io_port_base;
|
||||
extern unsigned long sh_io_port_base;
|
||||
|
||||
static inline void __set_io_port_base(unsigned long pbase)
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
const unsigned long sh_io_port_base __read_mostly = -1;
|
||||
unsigned long sh_io_port_base __read_mostly = -1;
|
||||
EXPORT_SYMBOL(sh_io_port_base);
|
||||
|
||||
void __iomem *__ioport_map(unsigned long addr, unsigned int size)
|
||||
|
|
|
@ -36,6 +36,7 @@ typedef s64 compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -147,6 +148,65 @@ typedef u32 compat_old_sigset_t;
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
#define SI_PAD_SIZE32 (128/sizeof(int) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
|
||||
struct {
|
||||
u32 _addr; /* faulting insn/memory ref. */
|
||||
int _trapno;
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -156,7 +216,6 @@ typedef u32 compat_sigset_word;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -128,6 +128,7 @@ typedef struct {
|
|||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
|
||||
|
||||
#endif /* !(__ASMSPARC_ELF_H) */
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
|
||||
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
|
||||
#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
|
||||
#define __ARCH_SI_BAND_T int
|
||||
|
||||
|
|
|
@ -54,58 +54,6 @@ struct signal_frame32 {
|
|||
/* __siginfo_rwin_t * */u32 rwin_save;
|
||||
} __attribute__((aligned(8)));
|
||||
|
||||
typedef struct compat_siginfo{
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
|
||||
struct {
|
||||
u32 _addr; /* faulting insn/memory ref. */
|
||||
int _trapno;
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
}compat_siginfo_t;
|
||||
|
||||
struct rt_signal_frame32 {
|
||||
struct sparc_stackf32 ss;
|
||||
compat_siginfo_t info;
|
||||
|
|
|
@ -110,6 +110,68 @@ struct compat_flock64 {
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
#define COMPAT_SI_PAD_SIZE (128/sizeof(int) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[COMPAT_SI_PAD_SIZE];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
int _overrun_incr; /* amount to add to overrun */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
#ifdef __ARCH_SI_TRAPNO
|
||||
int _trapno; /* TRAP # which caused the signal */
|
||||
#endif
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
|
|
@ -156,12 +156,12 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
|
|||
#undef SET_PERSONALITY
|
||||
#define SET_PERSONALITY(ex) \
|
||||
do { \
|
||||
current->personality = PER_LINUX; \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK))); \
|
||||
current_thread_info()->status &= ~TS_COMPAT; \
|
||||
} while (0)
|
||||
#define COMPAT_SET_PERSONALITY(ex) \
|
||||
do { \
|
||||
current->personality = PER_LINUX_32BIT; \
|
||||
set_personality(PER_LINUX | (current->personality & (~PER_MASK))); \
|
||||
current_thread_info()->status |= TS_COMPAT; \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -55,63 +55,6 @@ struct compat_ucontext {
|
|||
sigset_t uc_sigmask; /* mask last for extensibility */
|
||||
};
|
||||
|
||||
#define COMPAT_SI_PAD_SIZE ((SI_MAX_SIZE - 3 * sizeof(int)) / sizeof(int))
|
||||
|
||||
struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[COMPAT_SI_PAD_SIZE];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
int _overrun_incr; /* amount to add to overrun */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
#ifdef __ARCH_SI_TRAPNO
|
||||
int _trapno; /* TRAP # which caused the signal */
|
||||
#endif
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
};
|
||||
|
||||
struct compat_rt_sigframe {
|
||||
unsigned char save_area[C_ABI_SAVE_AREA_SIZE]; /* caller save area */
|
||||
struct compat_siginfo info;
|
||||
|
|
|
@ -6,6 +6,7 @@ config UNICORE32
|
|||
select HAVE_DMA_ATTRS
|
||||
select HAVE_KERNEL_GZIP
|
||||
select HAVE_KERNEL_BZIP2
|
||||
select GENERIC_ATOMIC64
|
||||
select HAVE_KERNEL_LZO
|
||||
select HAVE_KERNEL_LZMA
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
|
|
|
@ -409,7 +409,7 @@ extern struct apic *apic;
|
|||
* to enforce the order with in them.
|
||||
*/
|
||||
#define apic_driver(sym) \
|
||||
static struct apic *__apicdrivers_##sym __used \
|
||||
static const struct apic *__apicdrivers_##sym __used \
|
||||
__aligned(sizeof(struct apic *)) \
|
||||
__section(.apicdrivers) = { &sym }
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ typedef s64 __attribute__((aligned(4))) compat_s64;
|
|||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 __attribute__((aligned(4))) compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
|
@ -124,6 +125,78 @@ typedef u32 compat_old_sigset_t; /* at least 32 bits */
|
|||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[128/sizeof(int) - 3];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
int _overrun_incr; /* amount to add to overrun */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGCHLD (x32 version) */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_s64 _utime;
|
||||
compat_s64 _stime;
|
||||
} _sigchld_x32;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
|
||||
struct {
|
||||
unsigned int _call_addr; /* calling insn */
|
||||
int _syscall; /* triggering system call number */
|
||||
unsigned int _arch; /* AUDIT_ARCH_* of syscall */
|
||||
} _sigsys;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
|
@ -209,7 +282,6 @@ typedef struct user_regs_struct32 compat_elf_gregset_t;
|
|||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
|
|
@ -86,73 +86,6 @@ struct stat64 {
|
|||
unsigned long long st_ino;
|
||||
} __attribute__((packed));
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[((128 / sizeof(int)) - 3)];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
int _overrun_incr; /* amount to add to overrun */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
unsigned int _pid; /* sender's pid */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGCHLD (x32 version) */
|
||||
struct {
|
||||
unsigned int _pid; /* which child */
|
||||
unsigned int _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_s64 _utime;
|
||||
compat_s64 _stime;
|
||||
} _sigchld_x32;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
|
||||
struct {
|
||||
unsigned int _call_addr; /* calling insn */
|
||||
int _syscall; /* triggering system call number */
|
||||
unsigned int _arch; /* AUDIT_ARCH_* of syscall */
|
||||
} _sigsys;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define IA32_STACK_TOP IA32_PAGE_OFFSET
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
static int numachip_system __read_mostly;
|
||||
|
||||
static struct apic apic_numachip __read_mostly;
|
||||
static const struct apic apic_numachip __read_mostly;
|
||||
|
||||
static unsigned int get_apic_id(unsigned long x)
|
||||
{
|
||||
|
@ -199,7 +199,7 @@ static int numachip_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct apic apic_numachip __refconst = {
|
||||
static const struct apic apic_numachip __refconst = {
|
||||
|
||||
.name = "NumaConnect system",
|
||||
.probe = numachip_probe,
|
||||
|
|
|
@ -225,7 +225,7 @@ static struct platform_device rtc_device = {
|
|||
static __init int add_rtc_cmos(void)
|
||||
{
|
||||
#ifdef CONFIG_PNP
|
||||
static const char *ids[] __initconst =
|
||||
static const char * const const ids[] __initconst =
|
||||
{ "PNP0b00", "PNP0b01", "PNP0b02", };
|
||||
struct pnp_dev *dev;
|
||||
struct pnp_id *id;
|
||||
|
|
|
@ -189,7 +189,8 @@ typedef struct {
|
|||
#endif
|
||||
} elf_xtregs_t;
|
||||
|
||||
#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT)
|
||||
#define SET_PERSONALITY(ex) \
|
||||
set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK)))
|
||||
|
||||
struct task_struct;
|
||||
|
||||
|
|
|
@ -1567,7 +1567,7 @@ tx_complete++;
|
|||
/*--------------------------------- entries ---------------------------------*/
|
||||
|
||||
|
||||
static const char *media_name[] __devinitdata = {
|
||||
static char * const media_name[] __devinitconst = {
|
||||
"MMF", "SMF", "MMF", "03?", /* 0- 3 */
|
||||
"UTP", "05?", "06?", "07?", /* 4- 7 */
|
||||
"TAXI","09?", "10?", "11?", /* 8-11 */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
#define VERSION "47"
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
#define VERSION "50"
|
||||
#define AOE_MAJOR 152
|
||||
#define DEVICE_NAME "aoe"
|
||||
|
||||
|
@ -10,9 +10,6 @@
|
|||
#define AOE_PARTITIONS (16)
|
||||
#endif
|
||||
|
||||
#define SYSMINOR(aoemajor, aoeminor) ((aoemajor) * NPERSHELF + (aoeminor))
|
||||
#define AOEMAJOR(sysminor) ((sysminor) / NPERSHELF)
|
||||
#define AOEMINOR(sysminor) ((sysminor) % NPERSHELF)
|
||||
#define WHITESPACE " \t\v\f\n"
|
||||
|
||||
enum {
|
||||
|
@ -75,72 +72,67 @@ enum {
|
|||
DEVFL_UP = 1, /* device is installed in system and ready for AoE->ATA commands */
|
||||
DEVFL_TKILL = (1<<1), /* flag for timer to know when to kill self */
|
||||
DEVFL_EXT = (1<<2), /* device accepts lba48 commands */
|
||||
DEVFL_CLOSEWAIT = (1<<3), /* device is waiting for all closes to revalidate */
|
||||
DEVFL_GDALLOC = (1<<4), /* need to alloc gendisk */
|
||||
DEVFL_KICKME = (1<<5), /* slow polling network card catch */
|
||||
DEVFL_NEWSIZE = (1<<6), /* need to update dev size in block layer */
|
||||
|
||||
BUFFL_FAIL = 1,
|
||||
DEVFL_GDALLOC = (1<<3), /* need to alloc gendisk */
|
||||
DEVFL_KICKME = (1<<4), /* slow polling network card catch */
|
||||
DEVFL_NEWSIZE = (1<<5), /* need to update dev size in block layer */
|
||||
};
|
||||
|
||||
enum {
|
||||
DEFAULTBCNT = 2 * 512, /* 2 sectors */
|
||||
NPERSHELF = 16, /* number of slots per shelf address */
|
||||
FREETAG = -1,
|
||||
MIN_BUFS = 16,
|
||||
NTARGETS = 8,
|
||||
NAOEIFS = 8,
|
||||
NSKBPOOLMAX = 128,
|
||||
NSKBPOOLMAX = 256,
|
||||
NFACTIVE = 61,
|
||||
|
||||
TIMERTICK = HZ / 10,
|
||||
MINTIMER = HZ >> 2,
|
||||
MAXTIMER = HZ << 1,
|
||||
HELPWAIT = 20,
|
||||
};
|
||||
|
||||
struct buf {
|
||||
struct list_head bufs;
|
||||
ulong stime; /* for disk stats */
|
||||
ulong flags;
|
||||
ulong nframesout;
|
||||
ulong resid;
|
||||
ulong bv_resid;
|
||||
ulong bv_off;
|
||||
sector_t sector;
|
||||
struct bio *bio;
|
||||
struct bio_vec *bv;
|
||||
struct request *rq;
|
||||
};
|
||||
|
||||
struct frame {
|
||||
int tag;
|
||||
struct list_head head;
|
||||
u32 tag;
|
||||
ulong waited;
|
||||
struct buf *buf;
|
||||
char *bufaddr;
|
||||
ulong bcnt;
|
||||
struct aoetgt *t; /* parent target I belong to */
|
||||
sector_t lba;
|
||||
struct sk_buff *skb;
|
||||
struct sk_buff *skb; /* command skb freed on module exit */
|
||||
struct sk_buff *r_skb; /* response skb for async processing */
|
||||
struct buf *buf;
|
||||
struct bio_vec *bv;
|
||||
ulong bcnt;
|
||||
ulong bv_off;
|
||||
};
|
||||
|
||||
struct aoeif {
|
||||
struct net_device *nd;
|
||||
unsigned char lost;
|
||||
unsigned char lostjumbo;
|
||||
ushort maxbcnt;
|
||||
ulong lost;
|
||||
int bcnt;
|
||||
};
|
||||
|
||||
struct aoetgt {
|
||||
unsigned char addr[6];
|
||||
ushort nframes;
|
||||
struct frame *frames;
|
||||
struct aoedev *d; /* parent device I belong to */
|
||||
struct list_head ffree; /* list of free frames */
|
||||
struct aoeif ifs[NAOEIFS];
|
||||
struct aoeif *ifp; /* current aoeif in use */
|
||||
ushort nout;
|
||||
ushort maxout;
|
||||
u16 lasttag; /* last tag sent */
|
||||
u16 useme;
|
||||
ulong falloc;
|
||||
ulong lastwadj; /* last window adjustment */
|
||||
int minbcnt;
|
||||
int wpkts, rpkts;
|
||||
int dataref;
|
||||
};
|
||||
|
||||
struct aoedev {
|
||||
|
@ -153,6 +145,9 @@ struct aoedev {
|
|||
u16 rttavg; /* round trip average of requests/responses */
|
||||
u16 mintimer;
|
||||
u16 fw_ver; /* version of blade's firmware */
|
||||
u16 lasttag; /* last tag sent */
|
||||
u16 useme;
|
||||
ulong ref;
|
||||
struct work_struct work;/* disk create work struct */
|
||||
struct gendisk *gd;
|
||||
struct request_queue *blkq;
|
||||
|
@ -160,16 +155,31 @@ struct aoedev {
|
|||
sector_t ssize;
|
||||
struct timer_list timer;
|
||||
spinlock_t lock;
|
||||
struct sk_buff_head sendq;
|
||||
struct sk_buff_head skbpool;
|
||||
mempool_t *bufpool; /* for deadlock-free Buf allocation */
|
||||
struct list_head bufq; /* queue of bios to work on */
|
||||
struct buf *inprocess; /* the one we're currently working on */
|
||||
struct { /* pointers to work in progress */
|
||||
struct buf *buf;
|
||||
struct bio *nxbio;
|
||||
struct request *rq;
|
||||
} ip;
|
||||
ulong maxbcnt;
|
||||
struct list_head factive[NFACTIVE]; /* hash of active frames */
|
||||
struct aoetgt *targets[NTARGETS];
|
||||
struct aoetgt **tgt; /* target in use when working */
|
||||
struct aoetgt **htgt; /* target needing rexmit assistance */
|
||||
struct aoetgt *htgt; /* target needing rexmit assistance */
|
||||
ulong ntargets;
|
||||
ulong kicked;
|
||||
};
|
||||
|
||||
/* kthread tracking */
|
||||
struct ktstate {
|
||||
struct completion rendez;
|
||||
struct task_struct *task;
|
||||
wait_queue_head_t *waitq;
|
||||
int (*fn) (void);
|
||||
char *name;
|
||||
spinlock_t *lock;
|
||||
};
|
||||
|
||||
int aoeblk_init(void);
|
||||
void aoeblk_exit(void);
|
||||
|
@ -182,22 +192,29 @@ void aoechr_error(char *);
|
|||
|
||||
void aoecmd_work(struct aoedev *d);
|
||||
void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor);
|
||||
void aoecmd_ata_rsp(struct sk_buff *);
|
||||
struct sk_buff *aoecmd_ata_rsp(struct sk_buff *);
|
||||
void aoecmd_cfg_rsp(struct sk_buff *);
|
||||
void aoecmd_sleepwork(struct work_struct *);
|
||||
void aoecmd_cleanslate(struct aoedev *);
|
||||
void aoecmd_exit(void);
|
||||
int aoecmd_init(void);
|
||||
struct sk_buff *aoecmd_ata_id(struct aoedev *);
|
||||
void aoe_freetframe(struct frame *);
|
||||
void aoe_flush_iocq(void);
|
||||
void aoe_end_request(struct aoedev *, struct request *, int);
|
||||
int aoe_ktstart(struct ktstate *k);
|
||||
void aoe_ktstop(struct ktstate *k);
|
||||
|
||||
int aoedev_init(void);
|
||||
void aoedev_exit(void);
|
||||
struct aoedev *aoedev_by_aoeaddr(int maj, int min);
|
||||
struct aoedev *aoedev_by_sysminor_m(ulong sysminor);
|
||||
struct aoedev *aoedev_by_aoeaddr(ulong maj, int min, int do_alloc);
|
||||
void aoedev_downdev(struct aoedev *d);
|
||||
int aoedev_flush(const char __user *str, size_t size);
|
||||
void aoe_failbuf(struct aoedev *, struct buf *);
|
||||
void aoedev_put(struct aoedev *);
|
||||
|
||||
int aoenet_init(void);
|
||||
void aoenet_exit(void);
|
||||
void aoenet_xmit(struct sk_buff_head *);
|
||||
int is_aoe_netif(struct net_device *ifp);
|
||||
int set_aoe_iflist(const char __user *str, size_t size);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/*
|
||||
* aoeblk.c
|
||||
* block device routines
|
||||
|
@ -161,68 +161,22 @@ aoeblk_release(struct gendisk *disk, fmode_t mode)
|
|||
}
|
||||
|
||||
static void
|
||||
aoeblk_make_request(struct request_queue *q, struct bio *bio)
|
||||
aoeblk_request(struct request_queue *q)
|
||||
{
|
||||
struct sk_buff_head queue;
|
||||
struct aoedev *d;
|
||||
struct buf *buf;
|
||||
ulong flags;
|
||||
|
||||
blk_queue_bounce(q, &bio);
|
||||
|
||||
if (bio == NULL) {
|
||||
printk(KERN_ERR "aoe: bio is NULL\n");
|
||||
BUG();
|
||||
return;
|
||||
}
|
||||
d = bio->bi_bdev->bd_disk->private_data;
|
||||
if (d == NULL) {
|
||||
printk(KERN_ERR "aoe: bd_disk->private_data is NULL\n");
|
||||
BUG();
|
||||
bio_endio(bio, -ENXIO);
|
||||
return;
|
||||
} else if (bio->bi_io_vec == NULL) {
|
||||
printk(KERN_ERR "aoe: bi_io_vec is NULL\n");
|
||||
BUG();
|
||||
bio_endio(bio, -ENXIO);
|
||||
return;
|
||||
}
|
||||
buf = mempool_alloc(d->bufpool, GFP_NOIO);
|
||||
if (buf == NULL) {
|
||||
printk(KERN_INFO "aoe: buf allocation failure\n");
|
||||
bio_endio(bio, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
INIT_LIST_HEAD(&buf->bufs);
|
||||
buf->stime = jiffies;
|
||||
buf->bio = bio;
|
||||
buf->resid = bio->bi_size;
|
||||
buf->sector = bio->bi_sector;
|
||||
buf->bv = &bio->bi_io_vec[bio->bi_idx];
|
||||
buf->bv_resid = buf->bv->bv_len;
|
||||
WARN_ON(buf->bv_resid == 0);
|
||||
buf->bv_off = buf->bv->bv_offset;
|
||||
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
struct request *rq;
|
||||
|
||||
d = q->queuedata;
|
||||
if ((d->flags & DEVFL_UP) == 0) {
|
||||
pr_info_ratelimited("aoe: device %ld.%d is not up\n",
|
||||
d->aoemajor, d->aoeminor);
|
||||
spin_unlock_irqrestore(&d->lock, flags);
|
||||
mempool_free(buf, d->bufpool);
|
||||
bio_endio(bio, -ENXIO);
|
||||
while ((rq = blk_peek_request(q))) {
|
||||
blk_start_request(rq);
|
||||
aoe_end_request(d, rq, 1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
list_add_tail(&buf->bufs, &d->bufq);
|
||||
|
||||
aoecmd_work(d);
|
||||
__skb_queue_head_init(&queue);
|
||||
skb_queue_splice_init(&d->sendq, &queue);
|
||||
|
||||
spin_unlock_irqrestore(&d->lock, flags);
|
||||
aoenet_xmit(&queue);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -254,41 +208,54 @@ aoeblk_gdalloc(void *vp)
|
|||
{
|
||||
struct aoedev *d = vp;
|
||||
struct gendisk *gd;
|
||||
mempool_t *mp;
|
||||
struct request_queue *q;
|
||||
enum { KB = 1024, MB = KB * KB, READ_AHEAD = 2 * MB, };
|
||||
ulong flags;
|
||||
|
||||
gd = alloc_disk(AOE_PARTITIONS);
|
||||
if (gd == NULL) {
|
||||
printk(KERN_ERR
|
||||
"aoe: cannot allocate disk structure for %ld.%d\n",
|
||||
pr_err("aoe: cannot allocate disk structure for %ld.%d\n",
|
||||
d->aoemajor, d->aoeminor);
|
||||
goto err;
|
||||
}
|
||||
|
||||
d->bufpool = mempool_create_slab_pool(MIN_BUFS, buf_pool_cache);
|
||||
if (d->bufpool == NULL) {
|
||||
mp = mempool_create(MIN_BUFS, mempool_alloc_slab, mempool_free_slab,
|
||||
buf_pool_cache);
|
||||
if (mp == NULL) {
|
||||
printk(KERN_ERR "aoe: cannot allocate bufpool for %ld.%d\n",
|
||||
d->aoemajor, d->aoeminor);
|
||||
goto err_disk;
|
||||
}
|
||||
q = blk_init_queue(aoeblk_request, &d->lock);
|
||||
if (q == NULL) {
|
||||
pr_err("aoe: cannot allocate block queue for %ld.%d\n",
|
||||
d->aoemajor, d->aoeminor);
|
||||
mempool_destroy(mp);
|
||||
goto err_disk;
|
||||
}
|
||||
|
||||
d->blkq = blk_alloc_queue(GFP_KERNEL);
|
||||
if (!d->blkq)
|
||||
goto err_mempool;
|
||||
blk_queue_make_request(d->blkq, aoeblk_make_request);
|
||||
d->blkq->backing_dev_info.name = "aoe";
|
||||
if (bdi_init(&d->blkq->backing_dev_info))
|
||||
goto err_blkq;
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
blk_queue_max_hw_sectors(d->blkq, BLK_DEF_MAX_SECTORS);
|
||||
q->backing_dev_info.ra_pages = READ_AHEAD / PAGE_CACHE_SIZE;
|
||||
d->bufpool = mp;
|
||||
d->blkq = gd->queue = q;
|
||||
q->queuedata = d;
|
||||
d->gd = gd;
|
||||
gd->major = AOE_MAJOR;
|
||||
gd->first_minor = d->sysminor * AOE_PARTITIONS;
|
||||
gd->first_minor = d->sysminor;
|
||||
gd->fops = &aoe_bdops;
|
||||
gd->private_data = d;
|
||||
set_capacity(gd, d->ssize);
|
||||
snprintf(gd->disk_name, sizeof gd->disk_name, "etherd/e%ld.%d",
|
||||
d->aoemajor, d->aoeminor);
|
||||
|
||||
gd->queue = d->blkq;
|
||||
d->gd = gd;
|
||||
d->flags &= ~DEVFL_GDALLOC;
|
||||
d->flags |= DEVFL_UP;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/*
|
||||
* aoechr.c
|
||||
* AoE character device driver
|
||||
|
@ -86,34 +86,34 @@ revalidate(const char __user *str, size_t size)
|
|||
if (copy_from_user(buf, str, size))
|
||||
return -EFAULT;
|
||||
|
||||
/* should be e%d.%d format */
|
||||
n = sscanf(buf, "e%d.%d", &major, &minor);
|
||||
if (n != 2) {
|
||||
printk(KERN_ERR "aoe: invalid device specification\n");
|
||||
pr_err("aoe: invalid device specification %s\n", buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
d = aoedev_by_aoeaddr(major, minor);
|
||||
d = aoedev_by_aoeaddr(major, minor, 0);
|
||||
if (!d)
|
||||
return -EINVAL;
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
aoecmd_cleanslate(d);
|
||||
aoecmd_cfg(major, minor);
|
||||
loop:
|
||||
skb = aoecmd_ata_id(d);
|
||||
spin_unlock_irqrestore(&d->lock, flags);
|
||||
/* try again if we are able to sleep a bit,
|
||||
* otherwise give up this revalidation
|
||||
*/
|
||||
if (!skb && !msleep_interruptible(200)) {
|
||||
if (!skb && !msleep_interruptible(250)) {
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
goto loop;
|
||||
}
|
||||
aoedev_put(d);
|
||||
if (skb) {
|
||||
struct sk_buff_head queue;
|
||||
__skb_queue_head_init(&queue);
|
||||
__skb_queue_tail(&queue, skb);
|
||||
aoenet_xmit(&queue);
|
||||
}
|
||||
aoecmd_cfg(major, minor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -174,6 +174,7 @@ aoechr_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offp
|
|||
break;
|
||||
case MINOR_FLUSH:
|
||||
ret = aoedev_flush(buf, cnt);
|
||||
break;
|
||||
}
|
||||
if (ret == 0)
|
||||
ret = cnt;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/*
|
||||
* aoedev.c
|
||||
* AoE device utility functions; maintains device list.
|
||||
|
@ -9,6 +9,9 @@
|
|||
#include <linux/netdevice.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/bitmap.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include "aoe.h"
|
||||
|
||||
static void dummy_timer(ulong);
|
||||
|
@ -16,23 +19,121 @@ static void aoedev_freedev(struct aoedev *);
|
|||
static void freetgt(struct aoedev *d, struct aoetgt *t);
|
||||
static void skbpoolfree(struct aoedev *d);
|
||||
|
||||
static int aoe_dyndevs = 1;
|
||||
module_param(aoe_dyndevs, int, 0644);
|
||||
MODULE_PARM_DESC(aoe_dyndevs, "Use dynamic minor numbers for devices.");
|
||||
|
||||
static struct aoedev *devlist;
|
||||
static DEFINE_SPINLOCK(devlist_lock);
|
||||
|
||||
struct aoedev *
|
||||
aoedev_by_aoeaddr(int maj, int min)
|
||||
/* Because some systems will have one, many, or no
|
||||
* - partitions,
|
||||
* - slots per shelf,
|
||||
* - or shelves,
|
||||
* we need some flexibility in the way the minor numbers
|
||||
* are allocated. So they are dynamic.
|
||||
*/
|
||||
#define N_DEVS ((1U<<MINORBITS)/AOE_PARTITIONS)
|
||||
|
||||
static DEFINE_SPINLOCK(used_minors_lock);
|
||||
static DECLARE_BITMAP(used_minors, N_DEVS);
|
||||
|
||||
static int
|
||||
minor_get_dyn(ulong *sysminor)
|
||||
{
|
||||
ulong flags;
|
||||
ulong n;
|
||||
int error = 0;
|
||||
|
||||
spin_lock_irqsave(&used_minors_lock, flags);
|
||||
n = find_first_zero_bit(used_minors, N_DEVS);
|
||||
if (n < N_DEVS)
|
||||
set_bit(n, used_minors);
|
||||
else
|
||||
error = -1;
|
||||
spin_unlock_irqrestore(&used_minors_lock, flags);
|
||||
|
||||
*sysminor = n * AOE_PARTITIONS;
|
||||
return error;
|
||||
}
|
||||
|
||||
static int
|
||||
minor_get_static(ulong *sysminor, ulong aoemaj, int aoemin)
|
||||
{
|
||||
ulong flags;
|
||||
ulong n;
|
||||
int error = 0;
|
||||
enum {
|
||||
/* for backwards compatibility when !aoe_dyndevs,
|
||||
* a static number of supported slots per shelf */
|
||||
NPERSHELF = 16,
|
||||
};
|
||||
|
||||
n = aoemaj * NPERSHELF + aoemin;
|
||||
if (aoemin >= NPERSHELF || n >= N_DEVS) {
|
||||
pr_err("aoe: %s with e%ld.%d\n",
|
||||
"cannot use static minor device numbers",
|
||||
aoemaj, aoemin);
|
||||
error = -1;
|
||||
} else {
|
||||
spin_lock_irqsave(&used_minors_lock, flags);
|
||||
if (test_bit(n, used_minors)) {
|
||||
pr_err("aoe: %s %lu\n",
|
||||
"existing device already has static minor number",
|
||||
n);
|
||||
error = -1;
|
||||
} else
|
||||
set_bit(n, used_minors);
|
||||
spin_unlock_irqrestore(&used_minors_lock, flags);
|
||||
}
|
||||
|
||||
*sysminor = n;
|
||||
return error;
|
||||
}
|
||||
|
||||
static int
|
||||
minor_get(ulong *sysminor, ulong aoemaj, int aoemin)
|
||||
{
|
||||
if (aoe_dyndevs)
|
||||
return minor_get_dyn(sysminor);
|
||||
else
|
||||
return minor_get_static(sysminor, aoemaj, aoemin);
|
||||
}
|
||||
|
||||
static void
|
||||
minor_free(ulong minor)
|
||||
{
|
||||
ulong flags;
|
||||
|
||||
minor /= AOE_PARTITIONS;
|
||||
BUG_ON(minor >= N_DEVS);
|
||||
|
||||
spin_lock_irqsave(&used_minors_lock, flags);
|
||||
BUG_ON(!test_bit(minor, used_minors));
|
||||
clear_bit(minor, used_minors);
|
||||
spin_unlock_irqrestore(&used_minors_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Users who grab a pointer to the device with aoedev_by_aoeaddr
|
||||
* automatically get a reference count and must be responsible
|
||||
* for performing a aoedev_put. With the addition of async
|
||||
* kthread processing I'm no longer confident that we can
|
||||
* guarantee consistency in the face of device flushes.
|
||||
*
|
||||
* For the time being, we only bother to add extra references for
|
||||
* frames sitting on the iocq. When the kthreads finish processing
|
||||
* these frames, they will aoedev_put the device.
|
||||
*/
|
||||
|
||||
void
|
||||
aoedev_put(struct aoedev *d)
|
||||
{
|
||||
struct aoedev *d;
|
||||
ulong flags;
|
||||
|
||||
spin_lock_irqsave(&devlist_lock, flags);
|
||||
|
||||
for (d=devlist; d; d=d->next)
|
||||
if (d->aoemajor == maj && d->aoeminor == min)
|
||||
break;
|
||||
|
||||
d->ref--;
|
||||
spin_unlock_irqrestore(&devlist_lock, flags);
|
||||
return d;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -47,54 +148,74 @@ dummy_timer(ulong vp)
|
|||
add_timer(&d->timer);
|
||||
}
|
||||
|
||||
static void
|
||||
aoe_failip(struct aoedev *d)
|
||||
{
|
||||
struct request *rq;
|
||||
struct bio *bio;
|
||||
unsigned long n;
|
||||
|
||||
aoe_failbuf(d, d->ip.buf);
|
||||
|
||||
rq = d->ip.rq;
|
||||
if (rq == NULL)
|
||||
return;
|
||||
while ((bio = d->ip.nxbio)) {
|
||||
clear_bit(BIO_UPTODATE, &bio->bi_flags);
|
||||
d->ip.nxbio = bio->bi_next;
|
||||
n = (unsigned long) rq->special;
|
||||
rq->special = (void *) --n;
|
||||
}
|
||||
if ((unsigned long) rq->special == 0)
|
||||
aoe_end_request(d, rq, 0);
|
||||
}
|
||||
|
||||
void
|
||||
aoedev_downdev(struct aoedev *d)
|
||||
{
|
||||
struct aoetgt **t, **te;
|
||||
struct frame *f, *e;
|
||||
struct buf *buf;
|
||||
struct bio *bio;
|
||||
struct aoetgt *t, **tt, **te;
|
||||
struct frame *f;
|
||||
struct list_head *head, *pos, *nx;
|
||||
struct request *rq;
|
||||
int i;
|
||||
|
||||
t = d->targets;
|
||||
te = t + NTARGETS;
|
||||
for (; t < te && *t; t++) {
|
||||
f = (*t)->frames;
|
||||
e = f + (*t)->nframes;
|
||||
for (; f < e; f->tag = FREETAG, f->buf = NULL, f++) {
|
||||
if (f->tag == FREETAG || f->buf == NULL)
|
||||
continue;
|
||||
buf = f->buf;
|
||||
bio = buf->bio;
|
||||
if (--buf->nframesout == 0
|
||||
&& buf != d->inprocess) {
|
||||
mempool_free(buf, d->bufpool);
|
||||
bio_endio(bio, -EIO);
|
||||
d->flags &= ~DEVFL_UP;
|
||||
|
||||
/* clean out active buffers */
|
||||
for (i = 0; i < NFACTIVE; i++) {
|
||||
head = &d->factive[i];
|
||||
list_for_each_safe(pos, nx, head) {
|
||||
f = list_entry(pos, struct frame, head);
|
||||
list_del(pos);
|
||||
if (f->buf) {
|
||||
f->buf->nframesout--;
|
||||
aoe_failbuf(d, f->buf);
|
||||
}
|
||||
aoe_freetframe(f);
|
||||
}
|
||||
}
|
||||
(*t)->maxout = (*t)->nframes;
|
||||
(*t)->nout = 0;
|
||||
/* reset window dressings */
|
||||
tt = d->targets;
|
||||
te = tt + NTARGETS;
|
||||
for (; tt < te && (t = *tt); tt++) {
|
||||
t->maxout = t->nframes;
|
||||
t->nout = 0;
|
||||
}
|
||||
buf = d->inprocess;
|
||||
if (buf) {
|
||||
bio = buf->bio;
|
||||
mempool_free(buf, d->bufpool);
|
||||
bio_endio(bio, -EIO);
|
||||
}
|
||||
d->inprocess = NULL;
|
||||
|
||||
/* clean out the in-process request (if any) */
|
||||
aoe_failip(d);
|
||||
d->htgt = NULL;
|
||||
|
||||
while (!list_empty(&d->bufq)) {
|
||||
buf = container_of(d->bufq.next, struct buf, bufs);
|
||||
list_del(d->bufq.next);
|
||||
bio = buf->bio;
|
||||
mempool_free(buf, d->bufpool);
|
||||
bio_endio(bio, -EIO);
|
||||
/* fast fail all pending I/O */
|
||||
if (d->blkq) {
|
||||
while ((rq = blk_peek_request(d->blkq))) {
|
||||
blk_start_request(rq);
|
||||
aoe_end_request(d, rq, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (d->gd)
|
||||
set_capacity(d->gd, 0);
|
||||
|
||||
d->flags &= ~DEVFL_UP;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -107,6 +228,7 @@ aoedev_freedev(struct aoedev *d)
|
|||
aoedisk_rm_sysfs(d);
|
||||
del_gendisk(d->gd);
|
||||
put_disk(d->gd);
|
||||
blk_cleanup_queue(d->blkq);
|
||||
}
|
||||
t = d->targets;
|
||||
e = t + NTARGETS;
|
||||
|
@ -115,7 +237,7 @@ aoedev_freedev(struct aoedev *d)
|
|||
if (d->bufpool)
|
||||
mempool_destroy(d->bufpool);
|
||||
skbpoolfree(d);
|
||||
blk_cleanup_queue(d->blkq);
|
||||
minor_free(d->sysminor);
|
||||
kfree(d);
|
||||
}
|
||||
|
||||
|
@ -142,7 +264,8 @@ aoedev_flush(const char __user *str, size_t cnt)
|
|||
spin_lock(&d->lock);
|
||||
if ((!all && (d->flags & DEVFL_UP))
|
||||
|| (d->flags & (DEVFL_GDALLOC|DEVFL_NEWSIZE))
|
||||
|| d->nopen) {
|
||||
|| d->nopen
|
||||
|| d->ref) {
|
||||
spin_unlock(&d->lock);
|
||||
dd = &d->next;
|
||||
continue;
|
||||
|
@ -163,12 +286,15 @@ aoedev_flush(const char __user *str, size_t cnt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* I'm not really sure that this is a realistic problem, but if the
|
||||
network driver goes gonzo let's just leak memory after complaining. */
|
||||
/* This has been confirmed to occur once with Tms=3*1000 due to the
|
||||
* driver changing link and not processing its transmit ring. The
|
||||
* problem is hard enough to solve by returning an error that I'm
|
||||
* still punting on "solving" this.
|
||||
*/
|
||||
static void
|
||||
skbfree(struct sk_buff *skb)
|
||||
{
|
||||
enum { Sms = 100, Tms = 3*1000};
|
||||
enum { Sms = 250, Tms = 30 * 1000};
|
||||
int i = Tms / Sms;
|
||||
|
||||
if (skb == NULL)
|
||||
|
@ -182,6 +308,7 @@ skbfree(struct sk_buff *skb)
|
|||
"cannot free skb -- memory leaked.");
|
||||
return;
|
||||
}
|
||||
skb->truesize -= skb->data_len;
|
||||
skb_shinfo(skb)->nr_frags = skb->data_len = 0;
|
||||
skb_trim(skb, 0);
|
||||
dev_kfree_skb(skb);
|
||||
|
@ -198,26 +325,29 @@ skbpoolfree(struct aoedev *d)
|
|||
__skb_queue_head_init(&d->skbpool);
|
||||
}
|
||||
|
||||
/* find it or malloc it */
|
||||
/* find it or allocate it */
|
||||
struct aoedev *
|
||||
aoedev_by_sysminor_m(ulong sysminor)
|
||||
aoedev_by_aoeaddr(ulong maj, int min, int do_alloc)
|
||||
{
|
||||
struct aoedev *d;
|
||||
int i;
|
||||
ulong flags;
|
||||
ulong sysminor;
|
||||
|
||||
spin_lock_irqsave(&devlist_lock, flags);
|
||||
|
||||
for (d=devlist; d; d=d->next)
|
||||
if (d->sysminor == sysminor)
|
||||
if (d->aoemajor == maj && d->aoeminor == min) {
|
||||
d->ref++;
|
||||
break;
|
||||
if (d)
|
||||
}
|
||||
if (d || !do_alloc || minor_get(&sysminor, maj, min) < 0)
|
||||
goto out;
|
||||
d = kcalloc(1, sizeof *d, GFP_ATOMIC);
|
||||
if (!d)
|
||||
goto out;
|
||||
INIT_WORK(&d->work, aoecmd_sleepwork);
|
||||
spin_lock_init(&d->lock);
|
||||
skb_queue_head_init(&d->sendq);
|
||||
skb_queue_head_init(&d->skbpool);
|
||||
init_timer(&d->timer);
|
||||
d->timer.data = (ulong) d;
|
||||
|
@ -226,10 +356,12 @@ aoedev_by_sysminor_m(ulong sysminor)
|
|||
add_timer(&d->timer);
|
||||
d->bufpool = NULL; /* defer to aoeblk_gdalloc */
|
||||
d->tgt = d->targets;
|
||||
INIT_LIST_HEAD(&d->bufq);
|
||||
d->ref = 1;
|
||||
for (i = 0; i < NFACTIVE; i++)
|
||||
INIT_LIST_HEAD(&d->factive[i]);
|
||||
d->sysminor = sysminor;
|
||||
d->aoemajor = AOEMAJOR(sysminor);
|
||||
d->aoeminor = AOEMINOR(sysminor);
|
||||
d->aoemajor = maj;
|
||||
d->aoeminor = min;
|
||||
d->mintimer = MINTIMER;
|
||||
d->next = devlist;
|
||||
devlist = d;
|
||||
|
@ -241,13 +373,23 @@ aoedev_by_sysminor_m(ulong sysminor)
|
|||
static void
|
||||
freetgt(struct aoedev *d, struct aoetgt *t)
|
||||
{
|
||||
struct frame *f, *e;
|
||||
struct frame *f;
|
||||
struct list_head *pos, *nx, *head;
|
||||
struct aoeif *ifp;
|
||||
|
||||
f = t->frames;
|
||||
e = f + t->nframes;
|
||||
for (; f < e; f++)
|
||||
for (ifp = t->ifs; ifp < &t->ifs[NAOEIFS]; ++ifp) {
|
||||
if (!ifp->nd)
|
||||
break;
|
||||
dev_put(ifp->nd);
|
||||
}
|
||||
|
||||
head = &t->ffree;
|
||||
list_for_each_safe(pos, nx, head) {
|
||||
list_del(pos);
|
||||
f = list_entry(pos, struct frame, head);
|
||||
skbfree(f->skb);
|
||||
kfree(t->frames);
|
||||
kfree(f);
|
||||
}
|
||||
kfree(t);
|
||||
}
|
||||
|
||||
|
@ -257,6 +399,7 @@ aoedev_exit(void)
|
|||
struct aoedev *d;
|
||||
ulong flags;
|
||||
|
||||
aoe_flush_iocq();
|
||||
while ((d = devlist)) {
|
||||
devlist = d->next;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/*
|
||||
* aoemain.c
|
||||
* Module initialization routines, discover timer
|
||||
|
@ -61,6 +61,7 @@ aoe_exit(void)
|
|||
|
||||
aoenet_exit();
|
||||
unregister_blkdev(AOE_MAJOR, DEVICE_NAME);
|
||||
aoecmd_exit();
|
||||
aoechr_exit();
|
||||
aoedev_exit();
|
||||
aoeblk_exit(); /* free cache after de-allocating bufs */
|
||||
|
@ -83,17 +84,20 @@ aoe_init(void)
|
|||
ret = aoenet_init();
|
||||
if (ret)
|
||||
goto net_fail;
|
||||
ret = aoecmd_init();
|
||||
if (ret)
|
||||
goto cmd_fail;
|
||||
ret = register_blkdev(AOE_MAJOR, DEVICE_NAME);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "aoe: can't register major\n");
|
||||
goto blkreg_fail;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "aoe: AoE v%s initialised.\n", VERSION);
|
||||
discover_timer(TINIT);
|
||||
return 0;
|
||||
|
||||
blkreg_fail:
|
||||
aoecmd_exit();
|
||||
cmd_fail:
|
||||
aoenet_exit();
|
||||
net_fail:
|
||||
aoeblk_exit();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
|
||||
/*
|
||||
* aoenet.c
|
||||
* Ethernet portion of AoE driver
|
||||
|
@ -33,6 +33,9 @@ static char aoe_iflist[IFLISTSZ];
|
|||
module_param_string(aoe_iflist, aoe_iflist, IFLISTSZ, 0600);
|
||||
MODULE_PARM_DESC(aoe_iflist, "aoe_iflist=\"dev1 [dev2 ...]\"");
|
||||
|
||||
static wait_queue_head_t txwq;
|
||||
static struct ktstate kts;
|
||||
|
||||
#ifndef MODULE
|
||||
static int __init aoe_iflist_setup(char *str)
|
||||
{
|
||||
|
@ -44,6 +47,23 @@ static int __init aoe_iflist_setup(char *str)
|
|||
__setup("aoe_iflist=", aoe_iflist_setup);
|
||||
#endif
|
||||
|
||||
static spinlock_t txlock;
|
||||
static struct sk_buff_head skbtxq;
|
||||
|
||||
/* enters with txlock held */
|
||||
static int
|
||||
tx(void)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
while ((skb = skb_dequeue(&skbtxq))) {
|
||||
spin_unlock_irq(&txlock);
|
||||
dev_queue_xmit(skb);
|
||||
spin_lock_irq(&txlock);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
is_aoe_netif(struct net_device *ifp)
|
||||
{
|
||||
|
@ -88,10 +108,14 @@ void
|
|||
aoenet_xmit(struct sk_buff_head *queue)
|
||||
{
|
||||
struct sk_buff *skb, *tmp;
|
||||
ulong flags;
|
||||
|
||||
skb_queue_walk_safe(queue, skb, tmp) {
|
||||
__skb_unlink(skb, queue);
|
||||
dev_queue_xmit(skb);
|
||||
spin_lock_irqsave(&txlock, flags);
|
||||
skb_queue_tail(&skbtxq, skb);
|
||||
spin_unlock_irqrestore(&txlock, flags);
|
||||
wake_up(&txwq);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +126,9 @@ static int
|
|||
aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt, struct net_device *orig_dev)
|
||||
{
|
||||
struct aoe_hdr *h;
|
||||
struct aoe_atahdr *ah;
|
||||
u32 n;
|
||||
int sn;
|
||||
|
||||
if (dev_net(ifp) != &init_net)
|
||||
goto exit;
|
||||
|
@ -110,13 +136,16 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
|
|||
skb = skb_share_check(skb, GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
return 0;
|
||||
if (skb_linearize(skb))
|
||||
goto exit;
|
||||
if (!is_aoe_netif(ifp))
|
||||
goto exit;
|
||||
skb_push(skb, ETH_HLEN); /* (1) */
|
||||
|
||||
h = (struct aoe_hdr *) skb_mac_header(skb);
|
||||
sn = sizeof(*h) + sizeof(*ah);
|
||||
if (skb->len >= sn) {
|
||||
sn -= skb_headlen(skb);
|
||||
if (sn > 0 && !__pskb_pull_tail(skb, sn))
|
||||
goto exit;
|
||||
}
|
||||
h = (struct aoe_hdr *) skb->data;
|
||||
n = get_unaligned_be32(&h->tag);
|
||||
if ((h->verfl & AOEFL_RSP) == 0 || (n & 1<<31))
|
||||
goto exit;
|
||||
|
@ -137,7 +166,8 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
|
|||
|
||||
switch (h->cmd) {
|
||||
case AOECMD_ATA:
|
||||
aoecmd_ata_rsp(skb);
|
||||
/* ata_rsp may keep skb for later processing or give it back */
|
||||
skb = aoecmd_ata_rsp(skb);
|
||||
break;
|
||||
case AOECMD_CFG:
|
||||
aoecmd_cfg_rsp(skb);
|
||||
|
@ -145,8 +175,12 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
|
|||
default:
|
||||
if (h->cmd >= AOECMD_VEND_MIN)
|
||||
break; /* don't complain about vendor commands */
|
||||
printk(KERN_INFO "aoe: unknown cmd %d\n", h->cmd);
|
||||
pr_info("aoe: unknown AoE command type 0x%02x\n", h->cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!skb)
|
||||
return 0;
|
||||
exit:
|
||||
dev_kfree_skb(skb);
|
||||
return 0;
|
||||
|
@ -160,6 +194,15 @@ static struct packet_type aoe_pt __read_mostly = {
|
|||
int __init
|
||||
aoenet_init(void)
|
||||
{
|
||||
skb_queue_head_init(&skbtxq);
|
||||
init_waitqueue_head(&txwq);
|
||||
spin_lock_init(&txlock);
|
||||
kts.lock = &txlock;
|
||||
kts.fn = tx;
|
||||
kts.waitq = &txwq;
|
||||
kts.name = "aoe_tx";
|
||||
if (aoe_ktstart(&kts))
|
||||
return -EAGAIN;
|
||||
dev_add_pack(&aoe_pt);
|
||||
return 0;
|
||||
}
|
||||
|
@ -167,6 +210,8 @@ aoenet_init(void)
|
|||
void
|
||||
aoenet_exit(void)
|
||||
{
|
||||
aoe_ktstop(&kts);
|
||||
skb_queue_purge(&skbtxq);
|
||||
dev_remove_pack(&aoe_pt);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,8 @@ static const char *ioctl_cmd_to_ascii(int cmd)
|
|||
case NBD_SET_SOCK: return "set-sock";
|
||||
case NBD_SET_BLKSIZE: return "set-blksize";
|
||||
case NBD_SET_SIZE: return "set-size";
|
||||
case NBD_SET_TIMEOUT: return "set-timeout";
|
||||
case NBD_SET_FLAGS: return "set-flags";
|
||||
case NBD_DO_IT: return "do-it";
|
||||
case NBD_CLEAR_SOCK: return "clear-sock";
|
||||
case NBD_CLEAR_QUE: return "clear-que";
|
||||
|
@ -96,6 +98,7 @@ static const char *nbdcmd_to_ascii(int cmd)
|
|||
case NBD_CMD_READ: return "read";
|
||||
case NBD_CMD_WRITE: return "write";
|
||||
case NBD_CMD_DISC: return "disconnect";
|
||||
case NBD_CMD_TRIM: return "trim/discard";
|
||||
}
|
||||
return "invalid";
|
||||
}
|
||||
|
@ -467,8 +470,12 @@ static void nbd_handle_req(struct nbd_device *nbd, struct request *req)
|
|||
|
||||
nbd_cmd(req) = NBD_CMD_READ;
|
||||
if (rq_data_dir(req) == WRITE) {
|
||||
if ((req->cmd_flags & REQ_DISCARD)) {
|
||||
WARN_ON(!(nbd->flags & NBD_FLAG_SEND_TRIM));
|
||||
nbd_cmd(req) = NBD_CMD_TRIM;
|
||||
} else
|
||||
nbd_cmd(req) = NBD_CMD_WRITE;
|
||||
if (nbd->flags & NBD_READ_ONLY) {
|
||||
if (nbd->flags & NBD_FLAG_READ_ONLY) {
|
||||
dev_err(disk_to_dev(nbd->disk),
|
||||
"Write on read-only\n");
|
||||
goto error_out;
|
||||
|
@ -651,6 +658,10 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
|
|||
nbd->xmit_timeout = arg * HZ;
|
||||
return 0;
|
||||
|
||||
case NBD_SET_FLAGS:
|
||||
nbd->flags = arg;
|
||||
return 0;
|
||||
|
||||
case NBD_SET_SIZE_BLOCKS:
|
||||
nbd->bytesize = ((u64) arg) * nbd->blksize;
|
||||
bdev->bd_inode->i_size = nbd->bytesize;
|
||||
|
@ -670,6 +681,10 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
|
|||
|
||||
mutex_unlock(&nbd->tx_lock);
|
||||
|
||||
if (nbd->flags & NBD_FLAG_SEND_TRIM)
|
||||
queue_flag_set_unlocked(QUEUE_FLAG_DISCARD,
|
||||
nbd->disk->queue);
|
||||
|
||||
thread = kthread_create(nbd_thread, nbd, nbd->disk->disk_name);
|
||||
if (IS_ERR(thread)) {
|
||||
mutex_lock(&nbd->tx_lock);
|
||||
|
@ -687,6 +702,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
|
|||
nbd->file = NULL;
|
||||
nbd_clear_que(nbd);
|
||||
dev_warn(disk_to_dev(nbd->disk), "queue cleared\n");
|
||||
queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
|
||||
if (file)
|
||||
fput(file);
|
||||
nbd->bytesize = 0;
|
||||
|
@ -805,6 +821,9 @@ static int __init nbd_init(void)
|
|||
* Tell the block layer that we are not a rotational device
|
||||
*/
|
||||
queue_flag_set_unlocked(QUEUE_FLAG_NONROT, disk->queue);
|
||||
disk->queue->limits.discard_granularity = 512;
|
||||
disk->queue->limits.max_discard_sectors = UINT_MAX;
|
||||
disk->queue->limits.discard_zeroes_data = 0;
|
||||
}
|
||||
|
||||
if (register_blkdev(NBD_MAJOR, "nbd")) {
|
||||
|
|
|
@ -799,7 +799,7 @@ static int mbcs_remove(struct cx_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct cx_device_id __devinitdata mbcs_id_table[] = {
|
||||
static const struct cx_device_id __devinitconst mbcs_id_table[] = {
|
||||
{
|
||||
.part_num = MBCS_PART_NUM,
|
||||
.mfg_num = MBCS_MFG_NUM,
|
||||
|
|
|
@ -582,7 +582,7 @@ void dmaengine_get(void)
|
|||
list_del_rcu(&device->global_node);
|
||||
break;
|
||||
} else if (err)
|
||||
pr_err("%s: failed to get %s: (%d)\n",
|
||||
pr_debug("%s: failed to get %s: (%d)\n",
|
||||
__func__, dma_chan_name(chan), err);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -982,7 +982,7 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adap)
|
|||
|
||||
if (adap->nr == -1) /* -1 means dynamically assign bus id */
|
||||
return i2c_add_adapter(adap);
|
||||
if (adap->nr & ~MAX_ID_MASK)
|
||||
if (adap->nr & ~MAX_IDR_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
retry:
|
||||
|
|
|
@ -181,7 +181,7 @@ static const struct ide_port_ops atp86x_port_ops = {
|
|||
.cable_detect = atp86x_cable_detect,
|
||||
};
|
||||
|
||||
static const struct ide_port_info aec62xx_chipsets[] __devinitdata = {
|
||||
static const struct ide_port_info aec62xx_chipsets[] __devinitconst = {
|
||||
{ /* 0: AEC6210 */
|
||||
.name = DRV_NAME,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
|
|
|
@ -52,13 +52,13 @@
|
|||
|
||||
/* port addresses for auto-detection */
|
||||
#define ALI_NUM_PORTS 4
|
||||
static const int ports[ALI_NUM_PORTS] __initdata =
|
||||
static const int ports[ALI_NUM_PORTS] __initconst =
|
||||
{ 0x074, 0x0f4, 0x034, 0x0e4 };
|
||||
|
||||
/* register initialization data */
|
||||
typedef struct { u8 reg, data; } RegInitializer;
|
||||
|
||||
static const RegInitializer initData[] __initdata = {
|
||||
static const RegInitializer initData[] __initconst = {
|
||||
{0x01, 0x0f}, {0x02, 0x00}, {0x03, 0x00}, {0x04, 0x00},
|
||||
{0x05, 0x00}, {0x06, 0x00}, {0x07, 0x2b}, {0x0a, 0x0f},
|
||||
{0x25, 0x00}, {0x26, 0x00}, {0x27, 0x00}, {0x28, 0x00},
|
||||
|
|
|
@ -512,7 +512,7 @@ static const struct ide_dma_ops ali_dma_ops = {
|
|||
.dma_sff_read_status = ide_dma_sff_read_status,
|
||||
};
|
||||
|
||||
static const struct ide_port_info ali15x3_chipset __devinitdata = {
|
||||
static const struct ide_port_info ali15x3_chipset __devinitconst = {
|
||||
.name = DRV_NAME,
|
||||
.init_chipset = init_chipset_ali15x3,
|
||||
.init_hwif = init_hwif_ali15x3,
|
||||
|
|
|
@ -223,7 +223,7 @@ static const struct ide_port_ops amd_port_ops = {
|
|||
.udma_mask = udma, \
|
||||
}
|
||||
|
||||
static const struct ide_port_info amd74xx_chipsets[] __devinitdata = {
|
||||
static const struct ide_port_info amd74xx_chipsets[] __devinitconst = {
|
||||
/* 0: AMD7401 */ DECLARE_AMD_DEV(0x00, ATA_UDMA2),
|
||||
/* 1: AMD7409 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA4),
|
||||
/* 2: AMD7411/7441 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA5),
|
||||
|
|
|
@ -139,7 +139,7 @@ static const struct ide_port_ops atiixp_port_ops = {
|
|||
.cable_detect = atiixp_cable_detect,
|
||||
};
|
||||
|
||||
static const struct ide_port_info atiixp_pci_info[] __devinitdata = {
|
||||
static const struct ide_port_info atiixp_pci_info[] __devinitconst = {
|
||||
{ /* 0: IXP200/300/400/700 */
|
||||
.name = DRV_NAME,
|
||||
.enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue