mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 03:10:12 +00:00
Merge with /usr/src/ntfs-2.6.git
This commit is contained in:
commit
c1c58ada91
28 changed files with 186 additions and 93 deletions
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 12
|
||||
EXTRAVERSION =-rc4
|
||||
EXTRAVERSION =-rc5
|
||||
NAME=Woozy Numbat
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -97,7 +97,6 @@ static void ack_vic_irq(unsigned int irq);
|
|||
static void vic_enable_cpi(void);
|
||||
static void do_boot_cpu(__u8 cpuid);
|
||||
static void do_quad_bootstrap(void);
|
||||
static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *);
|
||||
|
||||
int hard_smp_processor_id(void);
|
||||
|
||||
|
@ -125,6 +124,14 @@ send_QIC_CPI(__u32 cpuset, __u8 cpi)
|
|||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
wrapper_smp_local_timer_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
irq_enter();
|
||||
smp_local_timer_interrupt(regs);
|
||||
irq_exit();
|
||||
}
|
||||
|
||||
static inline void
|
||||
send_one_CPI(__u8 cpu, __u8 cpi)
|
||||
{
|
||||
|
@ -1249,14 +1256,6 @@ smp_vic_timer_interrupt(struct pt_regs *regs)
|
|||
smp_local_timer_interrupt(regs);
|
||||
}
|
||||
|
||||
static inline void
|
||||
wrapper_smp_local_timer_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
irq_enter();
|
||||
smp_local_timer_interrupt(regs);
|
||||
irq_exit();
|
||||
}
|
||||
|
||||
/* local (per CPU) timer interrupt. It does both profiling and
|
||||
* process statistics/rescheduling.
|
||||
*
|
||||
|
|
|
@ -479,7 +479,7 @@ void __init ipic_init(phys_addr_t phys_addr,
|
|||
temp = 0;
|
||||
for (i = 0 ; i < senses_count ; i++) {
|
||||
if ((senses[i] & IRQ_SENSE_MASK) == IRQ_SENSE_EDGE) {
|
||||
temp |= 1 << (16 - i);
|
||||
temp |= 1 << (15 - i);
|
||||
if (i != 0)
|
||||
irq_desc[i + irq_offset + MPC83xx_IRQ_EXT1 - 1].status = 0;
|
||||
else
|
||||
|
|
|
@ -68,6 +68,7 @@ extern struct smp_ops_t *smp_ops;
|
|||
|
||||
static void (*pmac_tb_freeze)(int freeze);
|
||||
static struct device_node *pmac_tb_clock_chip_host;
|
||||
static u8 pmac_tb_pulsar_addr;
|
||||
static DEFINE_SPINLOCK(timebase_lock);
|
||||
static unsigned long timebase;
|
||||
|
||||
|
@ -106,12 +107,9 @@ static void smp_core99_pulsar_tb_freeze(int freeze)
|
|||
u8 data;
|
||||
int rc;
|
||||
|
||||
/* Strangely, the device-tree says address is 0xd2, but darwin
|
||||
* accesses 0xd0 ...
|
||||
*/
|
||||
pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_combined);
|
||||
rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host,
|
||||
0xd4 | pmac_low_i2c_read,
|
||||
pmac_tb_pulsar_addr | pmac_low_i2c_read,
|
||||
0x2e, &data, 1);
|
||||
if (rc != 0)
|
||||
goto bail;
|
||||
|
@ -120,7 +118,7 @@ static void smp_core99_pulsar_tb_freeze(int freeze)
|
|||
|
||||
pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_stdsub);
|
||||
rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host,
|
||||
0xd4 | pmac_low_i2c_write,
|
||||
pmac_tb_pulsar_addr | pmac_low_i2c_write,
|
||||
0x2e, &data, 1);
|
||||
bail:
|
||||
if (rc != 0) {
|
||||
|
@ -185,6 +183,12 @@ static int __init smp_core99_probe(void)
|
|||
if (ncpus <= 1)
|
||||
return 1;
|
||||
|
||||
/* HW sync only on these platforms */
|
||||
if (!machine_is_compatible("PowerMac7,2") &&
|
||||
!machine_is_compatible("PowerMac7,3") &&
|
||||
!machine_is_compatible("RackMac3,1"))
|
||||
goto nohwsync;
|
||||
|
||||
/* Look for the clock chip */
|
||||
for (cc = NULL; (cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL;) {
|
||||
struct device_node *p = of_get_parent(cc);
|
||||
|
@ -198,11 +202,18 @@ static int __init smp_core99_probe(void)
|
|||
goto next;
|
||||
switch (*reg) {
|
||||
case 0xd2:
|
||||
if (device_is_compatible(cc, "pulsar-legacy-slewing")) {
|
||||
pmac_tb_freeze = smp_core99_pulsar_tb_freeze;
|
||||
pmac_tb_pulsar_addr = 0xd2;
|
||||
printk(KERN_INFO "Timebase clock is Pulsar chip\n");
|
||||
} else if (device_is_compatible(cc, "cy28508")) {
|
||||
pmac_tb_freeze = smp_core99_cypress_tb_freeze;
|
||||
printk(KERN_INFO "Timebase clock is Cypress chip\n");
|
||||
}
|
||||
break;
|
||||
case 0xd4:
|
||||
pmac_tb_freeze = smp_core99_pulsar_tb_freeze;
|
||||
pmac_tb_pulsar_addr = 0xd4;
|
||||
printk(KERN_INFO "Timebase clock is Pulsar chip\n");
|
||||
break;
|
||||
}
|
||||
|
@ -210,12 +221,15 @@ static int __init smp_core99_probe(void)
|
|||
pmac_tb_clock_chip_host = p;
|
||||
smp_ops->give_timebase = smp_core99_give_timebase;
|
||||
smp_ops->take_timebase = smp_core99_take_timebase;
|
||||
of_node_put(cc);
|
||||
of_node_put(p);
|
||||
break;
|
||||
}
|
||||
next:
|
||||
of_node_put(p);
|
||||
}
|
||||
|
||||
nohwsync:
|
||||
mpic_request_ipis();
|
||||
|
||||
return ncpus;
|
||||
|
|
|
@ -1752,6 +1752,43 @@ static void __init flatten_device_tree(void)
|
|||
|
||||
}
|
||||
|
||||
|
||||
static void __init fixup_device_tree(void)
|
||||
{
|
||||
unsigned long offset = reloc_offset();
|
||||
phandle u3, i2c, mpic;
|
||||
u32 u3_rev;
|
||||
u32 interrupts[2];
|
||||
u32 parent;
|
||||
|
||||
/* Some G5s have a missing interrupt definition, fix it up here */
|
||||
u3 = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000"));
|
||||
if ((long)u3 <= 0)
|
||||
return;
|
||||
i2c = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/i2c@f8001000"));
|
||||
if ((long)i2c <= 0)
|
||||
return;
|
||||
mpic = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/mpic@f8040000"));
|
||||
if ((long)mpic <= 0)
|
||||
return;
|
||||
|
||||
/* check if proper rev of u3 */
|
||||
if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev)) <= 0)
|
||||
return;
|
||||
if (u3_rev != 0x35)
|
||||
return;
|
||||
/* does it need fixup ? */
|
||||
if (prom_getproplen(i2c, "interrupts") > 0)
|
||||
return;
|
||||
/* interrupt on this revision of u3 is number 0 and level */
|
||||
interrupts[0] = 0;
|
||||
interrupts[1] = 1;
|
||||
prom_setprop(i2c, "interrupts", &interrupts, sizeof(interrupts));
|
||||
parent = (u32)mpic;
|
||||
prom_setprop(i2c, "interrupt-parent", &parent, sizeof(parent));
|
||||
}
|
||||
|
||||
|
||||
static void __init prom_find_boot_cpu(void)
|
||||
{
|
||||
unsigned long offset = reloc_offset();
|
||||
|
@ -1919,6 +1956,11 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, unsigned long
|
|||
PTRRELOC(&prom_tce_alloc_end), sizeof(RELOC(prom_tce_alloc_end)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Fixup any known bugs in the device-tree
|
||||
*/
|
||||
fixup_device_tree();
|
||||
|
||||
/*
|
||||
* Now finally create the flattened device-tree
|
||||
*/
|
||||
|
|
|
@ -38,7 +38,7 @@ static inline void crypto_kunmap(void *vaddr, int out)
|
|||
|
||||
static inline void crypto_yield(struct crypto_tfm *tfm)
|
||||
{
|
||||
if (!in_softirq())
|
||||
if (!in_atomic())
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
|
|
|
@ -245,6 +245,7 @@ int device_add(struct device *dev)
|
|||
|
||||
if ((error = kobject_add(&dev->kobj)))
|
||||
goto Error;
|
||||
kobject_hotplug(&dev->kobj, KOBJ_ADD);
|
||||
if ((error = device_pm_add(dev)))
|
||||
goto PMError;
|
||||
if ((error = bus_add_device(dev)))
|
||||
|
@ -257,14 +258,13 @@ int device_add(struct device *dev)
|
|||
/* notify platform of device entry */
|
||||
if (platform_notify)
|
||||
platform_notify(dev);
|
||||
|
||||
kobject_hotplug(&dev->kobj, KOBJ_ADD);
|
||||
Done:
|
||||
put_device(dev);
|
||||
return error;
|
||||
BusError:
|
||||
device_pm_remove(dev);
|
||||
PMError:
|
||||
kobject_hotplug(&dev->kobj, KOBJ_REMOVE);
|
||||
kobject_del(&dev->kobj);
|
||||
Error:
|
||||
if (parent)
|
||||
|
|
|
@ -516,6 +516,11 @@ create_iface(struct device_node *np, struct device *dev)
|
|||
u32 *psteps, *prate;
|
||||
int rc;
|
||||
|
||||
if (np->n_intrs < 1 || np->n_addrs < 1) {
|
||||
printk(KERN_ERR "%s: Missing interrupt or address !\n",
|
||||
np->full_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
if (pmac_low_i2c_lock(np))
|
||||
return -ENODEV;
|
||||
|
||||
|
|
|
@ -43,15 +43,15 @@ enum saa6752hs_videoformat {
|
|||
static const struct v4l2_format v4l2_format_table[] =
|
||||
{
|
||||
[SAA6752HS_VF_D1] = {
|
||||
.fmt.pix.width = 720, .fmt.pix.height = 576 },
|
||||
.fmt = { .pix = { .width = 720, .height = 576 }, }, },
|
||||
[SAA6752HS_VF_2_3_D1] = {
|
||||
.fmt.pix.width = 480, .fmt.pix.height = 576 },
|
||||
.fmt = { .pix = { .width = 480, .height = 576 }, }, },
|
||||
[SAA6752HS_VF_1_2_D1] = {
|
||||
.fmt.pix.width = 352, .fmt.pix.height = 576 },
|
||||
.fmt = { .pix = { .width = 352, .height = 576 }, }, },
|
||||
[SAA6752HS_VF_SIF] = {
|
||||
.fmt.pix.width = 352, .fmt.pix.height = 288 },
|
||||
.fmt = { .pix = { .width = 352, .height = 288 }, }, },
|
||||
[SAA6752HS_VF_UNKNOWN] = {
|
||||
.fmt.pix.width = 0, .fmt.pix.height = 0},
|
||||
.fmt = { .pix = { .width = 0, .height = 0 }, }, },
|
||||
};
|
||||
|
||||
struct saa6752hs_state {
|
||||
|
|
|
@ -383,7 +383,10 @@ static int mmc_blk_probe(struct mmc_card *card)
|
|||
struct mmc_blk_data *md;
|
||||
int err;
|
||||
|
||||
if (card->csd.cmdclass & ~0x1ff)
|
||||
/*
|
||||
* Check that the card supports the command class(es) we need.
|
||||
*/
|
||||
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
|
||||
return -ENODEV;
|
||||
|
||||
if (card->csd.read_blkbits < 9) {
|
||||
|
|
|
@ -61,8 +61,8 @@
|
|||
|
||||
#define DRV_MODULE_NAME "tg3"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "3.27"
|
||||
#define DRV_MODULE_RELDATE "May 5, 2005"
|
||||
#define DRV_MODULE_VERSION "3.29"
|
||||
#define DRV_MODULE_RELDATE "May 23, 2005"
|
||||
|
||||
#define TG3_DEF_MAC_MODE 0
|
||||
#define TG3_DEF_RX_MODE 0
|
||||
|
@ -206,6 +206,8 @@ static struct pci_device_id tg3_pci_tbl[] = {
|
|||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M,
|
||||
|
@ -8994,7 +8996,7 @@ static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dm
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define TEST_BUFFER_SIZE 0x400
|
||||
#define TEST_BUFFER_SIZE 0x2000
|
||||
|
||||
static int __devinit tg3_test_dma(struct tg3 *tp)
|
||||
{
|
||||
|
|
|
@ -659,8 +659,11 @@ ahc_linux_slave_alloc(struct scsi_device *device)
|
|||
ahc_lock(ahc, &flags);
|
||||
targ = ahc->platform_data->targets[target_offset];
|
||||
if (targ == NULL) {
|
||||
targ = ahc_linux_alloc_target(ahc, starget->channel, starget->id);
|
||||
struct seeprom_config *sc = ahc->seep_config;
|
||||
struct seeprom_config *sc;
|
||||
|
||||
targ = ahc_linux_alloc_target(ahc, starget->channel,
|
||||
starget->id);
|
||||
sc = ahc->seep_config;
|
||||
if (targ == NULL)
|
||||
goto out;
|
||||
|
||||
|
|
|
@ -682,8 +682,6 @@ static void autoconfig_16550a(struct uart_8250_port *up)
|
|||
* from EXCR1. Switch back to bank 0, change it in MCR. Then
|
||||
* switch back to bank 2, read it from EXCR1 again and check
|
||||
* it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
|
||||
* On PowerPC we don't want to change baud_base, as we have
|
||||
* a number of different divisors. -- Tom Rini
|
||||
*/
|
||||
serial_outp(up, UART_LCR, 0);
|
||||
status1 = serial_in(up, UART_MCR);
|
||||
|
@ -699,16 +697,25 @@ static void autoconfig_16550a(struct uart_8250_port *up)
|
|||
serial_outp(up, UART_MCR, status1);
|
||||
|
||||
if ((status2 ^ status1) & UART_MCR_LOOP) {
|
||||
#ifndef CONFIG_PPC
|
||||
unsigned short quot;
|
||||
|
||||
serial_outp(up, UART_LCR, 0xE0);
|
||||
|
||||
quot = serial_inp(up, UART_DLM) << 8;
|
||||
quot += serial_inp(up, UART_DLL);
|
||||
quot <<= 3;
|
||||
|
||||
status1 = serial_in(up, 0x04); /* EXCR1 */
|
||||
status1 &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
|
||||
status1 |= 0x10; /* 1.625 divisor for baud_base --> 921600 */
|
||||
serial_outp(up, 0x04, status1);
|
||||
serial_outp(up, UART_LCR, 0);
|
||||
up->port.uartclk = 921600*16;
|
||||
#endif
|
||||
|
||||
serial_outp(up, UART_DLL, quot & 0xff);
|
||||
serial_outp(up, UART_DLM, quot >> 8);
|
||||
|
||||
serial_outp(up, UART_LCR, 0);
|
||||
|
||||
up->port.uartclk = 921600*16;
|
||||
up->port.type = PORT_NS16550A;
|
||||
up->capabilities |= UART_NATSEMI;
|
||||
return;
|
||||
|
|
|
@ -230,7 +230,6 @@ const struct reiserfs_key MAX_KEY = {
|
|||
__constant_cpu_to_le32(0xffffffff)},}
|
||||
};
|
||||
|
||||
const struct in_core_key MAX_IN_CORE_KEY = {~0U, ~0U, ~0ULL>>4, 15};
|
||||
|
||||
/* Get delimiting key of the buffer by looking for it in the buffers in the path, starting from the bottom
|
||||
of the path, and going upwards. We must check the path's validity at each step. If the key is not in
|
||||
|
|
|
@ -164,7 +164,9 @@ static int finish_unfinished (struct super_block * s)
|
|||
|
||||
/* compose key to look for "save" links */
|
||||
max_cpu_key.version = KEY_FORMAT_3_5;
|
||||
max_cpu_key.on_disk_key = MAX_IN_CORE_KEY;
|
||||
max_cpu_key.on_disk_key.k_dir_id = ~0U;
|
||||
max_cpu_key.on_disk_key.k_objectid = ~0U;
|
||||
set_cpu_key_k_offset (&max_cpu_key, ~0U);
|
||||
max_cpu_key.key_length = 3;
|
||||
|
||||
#ifdef CONFIG_QUOTA
|
||||
|
|
|
@ -19,20 +19,12 @@
|
|||
#ifndef _LINUX_IF_TR_H
|
||||
#define _LINUX_IF_TR_H
|
||||
|
||||
|
||||
/* IEEE 802.5 Token-Ring magic constants. The frame sizes omit the preamble
|
||||
and FCS/CRC (frame check sequence). */
|
||||
#define TR_ALEN 6 /* Octets in one ethernet addr */
|
||||
#define TR_ALEN 6 /* Octets in one token-ring addr */
|
||||
#define TR_HLEN (sizeof(struct trh_hdr)+sizeof(struct trllc))
|
||||
#define AC 0x10
|
||||
#define LLC_FRAME 0x40
|
||||
#if 0
|
||||
#define ETH_HLEN 14 /* Total octets in header. */
|
||||
#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */
|
||||
#define ETH_DATA_LEN 1500 /* Max. octets in payload */
|
||||
#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
|
||||
#endif
|
||||
|
||||
|
||||
/* LLC and SNAP constants */
|
||||
#define EXTENDED_SAP 0xAA
|
||||
|
@ -96,7 +88,6 @@ struct tr_statistics {
|
|||
};
|
||||
|
||||
/* source routing stuff */
|
||||
|
||||
#define TR_RII 0x80
|
||||
#define TR_RCF_DIR_BIT 0x80
|
||||
#define TR_RCF_LEN_MASK 0x1f00
|
||||
|
|
|
@ -195,6 +195,33 @@ struct _mmc_csd {
|
|||
#define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */
|
||||
#define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */
|
||||
|
||||
/*
|
||||
* Card Command Classes (CCC)
|
||||
*/
|
||||
#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */
|
||||
/* (CMD0,1,2,3,4,7,9,10,12,13,15) */
|
||||
#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */
|
||||
/* (CMD11) */
|
||||
#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */
|
||||
/* (CMD16,17,18) */
|
||||
#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */
|
||||
/* (CMD20) */
|
||||
#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */
|
||||
/* (CMD16,24,25,26,27) */
|
||||
#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */
|
||||
/* (CMD32,33,34,35,36,37,38,39) */
|
||||
#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */
|
||||
/* (CMD28,29,30) */
|
||||
#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */
|
||||
/* (CMD16,CMD42) */
|
||||
#define CCC_APP_SPEC (1<<8) /* (8) Application specific */
|
||||
/* (CMD55,56,57,ACMD*) */
|
||||
#define CCC_IO_MODE (1<<9) /* (9) I/O mode */
|
||||
/* (CMD5,39,40,52,53) */
|
||||
#define CCC_SWITCH (1<<10) /* (10) High speed switch */
|
||||
/* (CMD6,34,35,36,37,50) */
|
||||
/* (11) Reserved */
|
||||
/* (CMD?) */
|
||||
|
||||
/*
|
||||
* CSD field definitions
|
||||
|
|
|
@ -101,7 +101,6 @@ enum sock_type {
|
|||
* @sk: internal networking protocol agnostic socket representation
|
||||
* @wait: wait queue for several uses
|
||||
* @type: socket type (%SOCK_STREAM, etc)
|
||||
* @passcred: credentials (used only in Unix Sockets (aka PF_LOCAL))
|
||||
*/
|
||||
struct socket {
|
||||
socket_state state;
|
||||
|
|
|
@ -503,7 +503,7 @@ static inline void *netdev_priv(struct net_device *dev)
|
|||
#define SET_NETDEV_DEV(net, pdev) ((net)->class_dev.dev = (pdev))
|
||||
|
||||
struct packet_type {
|
||||
unsigned short type; /* This is really htons(ether_type). */
|
||||
__be16 type; /* This is really htons(ether_type). */
|
||||
struct net_device *dev; /* NULL is wildcarded here */
|
||||
int (*func) (struct sk_buff *, struct net_device *,
|
||||
struct packet_type *);
|
||||
|
|
|
@ -2064,6 +2064,7 @@
|
|||
|
||||
#define PCI_VENDOR_ID_BROADCOM 0x14e4
|
||||
#define PCI_DEVICE_ID_TIGON3_5752 0x1600
|
||||
#define PCI_DEVICE_ID_TIGON3_5752M 0x1601
|
||||
#define PCI_DEVICE_ID_TIGON3_5700 0x1644
|
||||
#define PCI_DEVICE_ID_TIGON3_5701 0x1645
|
||||
#define PCI_DEVICE_ID_TIGON3_5702 0x1646
|
||||
|
|
|
@ -248,7 +248,7 @@ typedef struct {
|
|||
|
||||
#define _spin_trylock_bh(lock) ({preempt_disable(); local_bh_disable(); \
|
||||
_raw_spin_trylock(lock) ? \
|
||||
1 : ({preempt_enable(); local_bh_enable(); 0;});})
|
||||
1 : ({preempt_enable_no_resched(); local_bh_enable(); 0;});})
|
||||
|
||||
#define _spin_lock(lock) \
|
||||
do { \
|
||||
|
@ -383,7 +383,7 @@ do { \
|
|||
#define _spin_unlock_bh(lock) \
|
||||
do { \
|
||||
_raw_spin_unlock(lock); \
|
||||
preempt_enable(); \
|
||||
preempt_enable_no_resched(); \
|
||||
local_bh_enable(); \
|
||||
__release(lock); \
|
||||
} while (0)
|
||||
|
@ -391,7 +391,7 @@ do { \
|
|||
#define _write_unlock_bh(lock) \
|
||||
do { \
|
||||
_raw_write_unlock(lock); \
|
||||
preempt_enable(); \
|
||||
preempt_enable_no_resched(); \
|
||||
local_bh_enable(); \
|
||||
__release(lock); \
|
||||
} while (0)
|
||||
|
@ -423,8 +423,8 @@ do { \
|
|||
#define _read_unlock_bh(lock) \
|
||||
do { \
|
||||
_raw_read_unlock(lock); \
|
||||
preempt_enable_no_resched(); \
|
||||
local_bh_enable(); \
|
||||
preempt_enable(); \
|
||||
__release(lock); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -386,9 +386,7 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
|||
wait_queue_t name = { \
|
||||
.task = current, \
|
||||
.func = autoremove_wake_function, \
|
||||
.task_list = { .next = &(name).task_list, \
|
||||
.prev = &(name).task_list, \
|
||||
}, \
|
||||
.task_list = LIST_HEAD_INIT((name).task_list), \
|
||||
}
|
||||
|
||||
#define DEFINE_WAIT_BIT(name, word, bit) \
|
||||
|
|
|
@ -522,6 +522,15 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
|
|||
{
|
||||
int sig = 0;
|
||||
|
||||
/* SIGKILL must have priority, otherwise it is quite easy
|
||||
* to create an unkillable process, sending sig < SIGKILL
|
||||
* to self */
|
||||
if (unlikely(sigismember(&pending->signal, SIGKILL))) {
|
||||
if (!sigismember(mask, SIGKILL))
|
||||
sig = SIGKILL;
|
||||
}
|
||||
|
||||
if (likely(!sig))
|
||||
sig = next_signal(pending, mask);
|
||||
if (sig) {
|
||||
if (current->notifier) {
|
||||
|
|
|
@ -294,7 +294,7 @@ EXPORT_SYMBOL(_spin_unlock_irq);
|
|||
void __lockfunc _spin_unlock_bh(spinlock_t *lock)
|
||||
{
|
||||
_raw_spin_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_spin_unlock_bh);
|
||||
|
@ -318,7 +318,7 @@ EXPORT_SYMBOL(_read_unlock_irq);
|
|||
void __lockfunc _read_unlock_bh(rwlock_t *lock)
|
||||
{
|
||||
_raw_read_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_read_unlock_bh);
|
||||
|
@ -342,7 +342,7 @@ EXPORT_SYMBOL(_write_unlock_irq);
|
|||
void __lockfunc _write_unlock_bh(rwlock_t *lock)
|
||||
{
|
||||
_raw_write_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_write_unlock_bh);
|
||||
|
@ -354,7 +354,7 @@ int __lockfunc _spin_trylock_bh(spinlock_t *lock)
|
|||
if (_raw_spin_trylock(lock))
|
||||
return 1;
|
||||
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1004,7 +1004,7 @@ __generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
|||
if (pos < size) {
|
||||
retval = generic_file_direct_IO(READ, iocb,
|
||||
iov, pos, nr_segs);
|
||||
if (retval >= 0 && !is_sync_kiocb(iocb))
|
||||
if (retval > 0 && !is_sync_kiocb(iocb))
|
||||
retval = -EIOCBQUEUED;
|
||||
if (retval > 0)
|
||||
*ppos = pos + retval;
|
||||
|
|
|
@ -626,7 +626,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
|
|||
pgd_t *pgd;
|
||||
pud_t *pud;
|
||||
pmd_t *pmd;
|
||||
pte_t *pte;
|
||||
pte_t *pte, *original_pte;
|
||||
pte_t pteval;
|
||||
struct page *page;
|
||||
unsigned long address;
|
||||
|
@ -658,7 +658,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
|
|||
if (!pmd_present(*pmd))
|
||||
goto out_unlock;
|
||||
|
||||
for (pte = pte_offset_map(pmd, address);
|
||||
for (original_pte = pte = pte_offset_map(pmd, address);
|
||||
address < end; pte++, address += PAGE_SIZE) {
|
||||
|
||||
if (!pte_present(*pte))
|
||||
|
@ -694,7 +694,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
|
|||
(*mapcount)--;
|
||||
}
|
||||
|
||||
pte_unmap(pte);
|
||||
pte_unmap(original_pte);
|
||||
out_unlock:
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
}
|
||||
|
|
|
@ -4355,16 +4355,7 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
|
|||
goto no_ack;
|
||||
}
|
||||
|
||||
if (eaten) {
|
||||
if (tcp_in_quickack_mode(tp)) {
|
||||
tcp_send_ack(sk);
|
||||
} else {
|
||||
tcp_send_delayed_ack(sk);
|
||||
}
|
||||
} else {
|
||||
__tcp_ack_snd_check(sk, 0);
|
||||
}
|
||||
|
||||
no_ack:
|
||||
if (eaten)
|
||||
__kfree_skb(skb);
|
||||
|
|
|
@ -84,6 +84,7 @@ static int xfrm6_tunnel_check_size(struct sk_buff *skb)
|
|||
mtu = IPV6_MIN_MTU;
|
||||
|
||||
if (skb->len > mtu) {
|
||||
skb->dev = dst->dev;
|
||||
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev);
|
||||
ret = -EMSGSIZE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue