mirror of https://gitee.com/openkylin/linux.git
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
commit
f6e77c9479
|
@ -422,12 +422,14 @@ static int timer_dyn_tick_disable(void)
|
|||
void timer_dyn_reprogram(void)
|
||||
{
|
||||
struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick;
|
||||
unsigned long next, seq;
|
||||
|
||||
if (dyn_tick) {
|
||||
write_seqlock(&xtime_lock);
|
||||
if (dyn_tick->state & DYN_TICK_ENABLED)
|
||||
if (dyn_tick && (dyn_tick->state & DYN_TICK_ENABLED)) {
|
||||
next = next_timer_interrupt();
|
||||
do {
|
||||
seq = read_seqbegin(&xtime_lock);
|
||||
dyn_tick->reprogram(next_timer_interrupt() - jiffies);
|
||||
write_sequnlock(&xtime_lock);
|
||||
} while (read_seqretry(&xtime_lock, seq));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,9 @@
|
|||
#include <asm/setup.h>
|
||||
#include <asm/pgtable.h>
|
||||
|
||||
void (*pm_power_off)(void) = NULL;
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
asmlinkage void ret_from_fork(void);
|
||||
|
||||
/*
|
||||
|
|
|
@ -70,10 +70,13 @@ static void efi_call_phys_prelog(void)
|
|||
{
|
||||
unsigned long cr4;
|
||||
unsigned long temp;
|
||||
struct Xgt_desc_struct *cpu_gdt_descr;
|
||||
|
||||
spin_lock(&efi_rt_lock);
|
||||
local_irq_save(efi_rt_eflags);
|
||||
|
||||
cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0);
|
||||
|
||||
/*
|
||||
* If I don't have PSE, I should just duplicate two entries in page
|
||||
* directory. If I have PSE, I just need to duplicate one entry in
|
||||
|
@ -103,18 +106,17 @@ static void efi_call_phys_prelog(void)
|
|||
*/
|
||||
local_flush_tlb();
|
||||
|
||||
per_cpu(cpu_gdt_descr, 0).address =
|
||||
__pa(per_cpu(cpu_gdt_descr, 0).address);
|
||||
load_gdt((struct Xgt_desc_struct *)__pa(&per_cpu(cpu_gdt_descr, 0)));
|
||||
cpu_gdt_descr->address = __pa(cpu_gdt_descr->address);
|
||||
load_gdt(cpu_gdt_descr);
|
||||
}
|
||||
|
||||
static void efi_call_phys_epilog(void)
|
||||
{
|
||||
unsigned long cr4;
|
||||
struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0);
|
||||
|
||||
per_cpu(cpu_gdt_descr, 0).address =
|
||||
(unsigned long)__va(per_cpu(cpu_gdt_descr, 0).address);
|
||||
load_gdt((struct Xgt_desc_struct *)__va(&per_cpu(cpu_gdt_descr, 0)));
|
||||
cpu_gdt_descr->address = __va(cpu_gdt_descr->address);
|
||||
load_gdt(cpu_gdt_descr);
|
||||
|
||||
cr4 = read_cr4();
|
||||
|
||||
|
|
|
@ -412,9 +412,9 @@ static int timer_resume(struct sys_device *dev)
|
|||
write_seqlock_irqsave(&xtime_lock, flags);
|
||||
xtime.tv_sec = sec;
|
||||
xtime.tv_nsec = 0;
|
||||
write_sequnlock_irqrestore(&xtime_lock, flags);
|
||||
jiffies += sleep_length;
|
||||
jiffies_64 += sleep_length;
|
||||
wall_jiffies += sleep_length;
|
||||
write_sequnlock_irqrestore(&xtime_lock, flags);
|
||||
if (last_timer->resume)
|
||||
last_timer->resume();
|
||||
cur_timer = last_timer;
|
||||
|
|
|
@ -1537,6 +1537,9 @@ _STATIC(__boot_from_prom)
|
|||
mr r28,r6
|
||||
mr r27,r7
|
||||
|
||||
/* Align the stack to 16-byte boundary for broken yaboot */
|
||||
rldicr r1,r1,0,59
|
||||
|
||||
/* Make sure we are running in 64 bits mode */
|
||||
bl .enable_64b_mode
|
||||
|
||||
|
|
|
@ -318,7 +318,7 @@ do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int)
|
|||
nop
|
||||
nop
|
||||
|
||||
.section __ex_table
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
.word 1b, __retl_efault, 2b, __retl_efault
|
||||
.word 3b, __retl_efault, 4b, __retl_efault
|
||||
|
|
|
@ -47,7 +47,7 @@ __do_int_store:
|
|||
mov 0, %o0
|
||||
.size __do_int_store, .-__do_int_store
|
||||
|
||||
.section __ex_table
|
||||
.section __ex_table,"a"
|
||||
.word 4b, __retl_efault
|
||||
.word 5b, __retl_efault
|
||||
.word 6b, __retl_efault
|
||||
|
@ -129,7 +129,7 @@ do_int_load:
|
|||
mov 0, %o0
|
||||
.size __do_int_load, .-__do_int_load
|
||||
|
||||
.section __ex_table
|
||||
.section __ex_table,"a"
|
||||
.word 4b, __retl_efault
|
||||
.word 5b, __retl_efault
|
||||
.word 6b, __retl_efault
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov 1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov 1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov 1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov 1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -92,7 +92,7 @@ __bzero_done:
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov %o1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov 1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov -1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.align 4; \
|
||||
99: retl; \
|
||||
mov -1, %o0; \
|
||||
.section __ex_table; \
|
||||
.section __ex_table,"a";\
|
||||
.align 4; \
|
||||
.word 98b, 99b; \
|
||||
.text; \
|
||||
|
|
|
@ -85,7 +85,7 @@ __strnlen_user:
|
|||
retl
|
||||
clr %o0
|
||||
|
||||
.section __ex_table,#alloc
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
|
||||
.word 10b, 30b
|
||||
|
|
|
@ -125,7 +125,7 @@ __strncpy_from_user:
|
|||
add %o2, %o3, %o0
|
||||
.size __strncpy_from_user, .-__strncpy_from_user
|
||||
|
||||
.section __ex_table,#alloc
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
.word 60b, __retl_efault
|
||||
.word 61b, __retl_efault
|
||||
|
|
|
@ -217,7 +217,7 @@ solaris_unimplemented:
|
|||
ba,pt %xcc, ret_from_solaris
|
||||
nop
|
||||
|
||||
.section __ex_table,#alloc
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
.word exen, exenf
|
||||
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
#include <asm/system.h>
|
||||
#include <asm/pgtable.h>
|
||||
|
||||
void (*pm_power_off)(void) = NULL;
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
extern void ret_from_fork (void);
|
||||
|
||||
|
||||
|
|
|
@ -64,6 +64,9 @@ EXPORT_SYMBOL(init_task);
|
|||
|
||||
struct task_struct *current_set[NR_CPUS] = {&init_task, };
|
||||
|
||||
void (*pm_power_off)(void) = NULL;
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
|
||||
#if XCHAL_CP_NUM > 0
|
||||
|
||||
|
|
|
@ -555,7 +555,7 @@ fore200e_pca_reset(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_pca_map(struct fore200e* fore200e)
|
||||
{
|
||||
DPRINTK(2, "device %s being mapped in memory\n", fore200e->name);
|
||||
|
@ -589,7 +589,7 @@ fore200e_pca_unmap(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_pca_configure(struct fore200e* fore200e)
|
||||
{
|
||||
struct pci_dev* pci_dev = (struct pci_dev*)fore200e->bus_dev;
|
||||
|
@ -2125,7 +2125,7 @@ fore200e_change_qos(struct atm_vcc* vcc,struct atm_qos* qos, int flags)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_irq_request(struct fore200e* fore200e)
|
||||
{
|
||||
if (request_irq(fore200e->irq, fore200e_interrupt, SA_SHIRQ, fore200e->name, fore200e->atm_dev) < 0) {
|
||||
|
@ -2148,7 +2148,7 @@ fore200e_irq_request(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_get_esi(struct fore200e* fore200e)
|
||||
{
|
||||
struct prom_data* prom = fore200e_kmalloc(sizeof(struct prom_data), GFP_KERNEL | GFP_DMA);
|
||||
|
@ -2180,7 +2180,7 @@ fore200e_get_esi(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_alloc_rx_buf(struct fore200e* fore200e)
|
||||
{
|
||||
int scheme, magn, nbr, size, i;
|
||||
|
@ -2245,7 +2245,7 @@ fore200e_alloc_rx_buf(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_init_bs_queue(struct fore200e* fore200e)
|
||||
{
|
||||
int scheme, magn, i;
|
||||
|
@ -2308,7 +2308,7 @@ fore200e_init_bs_queue(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_init_rx_queue(struct fore200e* fore200e)
|
||||
{
|
||||
struct host_rxq* rxq = &fore200e->host_rxq;
|
||||
|
@ -2368,7 +2368,7 @@ fore200e_init_rx_queue(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_init_tx_queue(struct fore200e* fore200e)
|
||||
{
|
||||
struct host_txq* txq = &fore200e->host_txq;
|
||||
|
@ -2431,7 +2431,7 @@ fore200e_init_tx_queue(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_init_cmd_queue(struct fore200e* fore200e)
|
||||
{
|
||||
struct host_cmdq* cmdq = &fore200e->host_cmdq;
|
||||
|
@ -2487,7 +2487,7 @@ fore200e_param_bs_queue(struct fore200e* fore200e,
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_initialize(struct fore200e* fore200e)
|
||||
{
|
||||
struct cp_queues __iomem * cpq;
|
||||
|
@ -2539,7 +2539,7 @@ fore200e_initialize(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static void __init
|
||||
static void __devinit
|
||||
fore200e_monitor_putc(struct fore200e* fore200e, char c)
|
||||
{
|
||||
struct cp_monitor __iomem * monitor = fore200e->cp_monitor;
|
||||
|
@ -2551,7 +2551,7 @@ fore200e_monitor_putc(struct fore200e* fore200e, char c)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_monitor_getc(struct fore200e* fore200e)
|
||||
{
|
||||
struct cp_monitor __iomem * monitor = fore200e->cp_monitor;
|
||||
|
@ -2576,7 +2576,7 @@ fore200e_monitor_getc(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static void __init
|
||||
static void __devinit
|
||||
fore200e_monitor_puts(struct fore200e* fore200e, char* str)
|
||||
{
|
||||
while (*str) {
|
||||
|
@ -2591,7 +2591,7 @@ fore200e_monitor_puts(struct fore200e* fore200e, char* str)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_start_fw(struct fore200e* fore200e)
|
||||
{
|
||||
int ok;
|
||||
|
@ -2622,7 +2622,7 @@ fore200e_start_fw(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_load_fw(struct fore200e* fore200e)
|
||||
{
|
||||
u32* fw_data = (u32*) fore200e->bus->fw_data;
|
||||
|
@ -2648,7 +2648,7 @@ fore200e_load_fw(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_register(struct fore200e* fore200e)
|
||||
{
|
||||
struct atm_dev* atm_dev;
|
||||
|
@ -2675,7 +2675,7 @@ fore200e_register(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
static int __init
|
||||
static int __devinit
|
||||
fore200e_init(struct fore200e* fore200e)
|
||||
{
|
||||
if (fore200e_register(fore200e) < 0)
|
||||
|
@ -2721,7 +2721,7 @@ fore200e_init(struct fore200e* fore200e)
|
|||
return -EBUSY;
|
||||
|
||||
fore200e_supply(fore200e);
|
||||
|
||||
|
||||
/* all done, board initialization is now complete */
|
||||
fore200e->state = FORE200E_STATE_COMPLETE;
|
||||
return 0;
|
||||
|
|
|
@ -131,7 +131,9 @@ enum {
|
|||
rng_hw_none,
|
||||
rng_hw_intel,
|
||||
rng_hw_amd,
|
||||
#ifdef __i386__
|
||||
rng_hw_via,
|
||||
#endif
|
||||
rng_hw_geode,
|
||||
};
|
||||
|
||||
|
|
|
@ -1155,6 +1155,12 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func)
|
|||
|
||||
spin_lock_irq(target->scsi_host->host_lock);
|
||||
|
||||
if (target->state == SRP_TARGET_DEAD ||
|
||||
target->state == SRP_TARGET_REMOVED) {
|
||||
scmnd->result = DID_BAD_TARGET << 16;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (scmnd->host_scribble == (void *) -1L)
|
||||
goto out;
|
||||
|
||||
|
|
|
@ -1929,6 +1929,8 @@ static struct pci_device_id hisax_pci_tbl[] __initdata = {
|
|||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B700, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B701, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, PCI_ANY_ID, PCI_ANY_ID},
|
||||
{PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, PCI_ANY_ID, PCI_ANY_ID},
|
||||
|
|
|
@ -51,6 +51,8 @@ static const PCI_ENTRY id_list[] =
|
|||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, "Billion", "B00B"},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, "Billion", "B00C"},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, "Seyeon", "B100"},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B700, "Primux II S0", "B700"},
|
||||
{PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B701, "Primux II S0 NT", "B701"},
|
||||
{PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, "Abocom/Magitek", "2BD1"},
|
||||
{PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, "Asuscom/Askey", "675"},
|
||||
{PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, "German telekom", "T-Concept"},
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* hfc_usb.c
|
||||
*
|
||||
* $Id: hfc_usb.c,v 4.36 2005/04/08 09:55:13 martinb1 Exp $
|
||||
* $Id: hfc_usb.c,v 2.3.2.13 2006/02/17 17:17:22 mbachem Exp $
|
||||
*
|
||||
* modular HiSax ISDN driver for Colognechip HFC-S USB chip
|
||||
*
|
||||
|
@ -45,7 +45,7 @@
|
|||
#include "hfc_usb.h"
|
||||
|
||||
static const char *hfcusb_revision =
|
||||
"$Revision: 4.36 $ $Date: 2005/04/08 09:55:13 $ ";
|
||||
"$Revision: 2.3.2.13 $ $Date: 2006/02/17 17:17:22 $ ";
|
||||
|
||||
/* Hisax debug support
|
||||
* use "modprobe debug=x" where x is bitfield of USB_DBG & ISDN_DBG
|
||||
|
@ -219,7 +219,7 @@ symbolic(struct hfcusb_symbolic_list list[], const int num)
|
|||
for (i = 0; list[i].name != NULL; i++)
|
||||
if (list[i].num == num)
|
||||
return (list[i].name);
|
||||
return "<unkown ERROR>";
|
||||
return "<unknown ERROR>";
|
||||
}
|
||||
|
||||
|
||||
|
@ -235,9 +235,9 @@ ctrl_start_transfer(hfcusb_data * hfc)
|
|||
hfc->ctrl_urb->transfer_buffer = NULL;
|
||||
hfc->ctrl_urb->transfer_buffer_length = 0;
|
||||
hfc->ctrl_write.wIndex =
|
||||
hfc->ctrl_buff[hfc->ctrl_out_idx].hfc_reg;
|
||||
cpu_to_le16(hfc->ctrl_buff[hfc->ctrl_out_idx].hfc_reg);
|
||||
hfc->ctrl_write.wValue =
|
||||
hfc->ctrl_buff[hfc->ctrl_out_idx].reg_val;
|
||||
cpu_to_le16(hfc->ctrl_buff[hfc->ctrl_out_idx].reg_val);
|
||||
|
||||
usb_submit_urb(hfc->ctrl_urb, GFP_ATOMIC); /* start transfer */
|
||||
}
|
||||
|
@ -1282,7 +1282,7 @@ usb_init(hfcusb_data * hfc)
|
|||
/* init the background machinery for control requests */
|
||||
hfc->ctrl_read.bRequestType = 0xc0;
|
||||
hfc->ctrl_read.bRequest = 1;
|
||||
hfc->ctrl_read.wLength = 1;
|
||||
hfc->ctrl_read.wLength = cpu_to_le16(1);
|
||||
hfc->ctrl_write.bRequestType = 0x40;
|
||||
hfc->ctrl_write.bRequest = 0;
|
||||
hfc->ctrl_write.wLength = 0;
|
||||
|
@ -1373,9 +1373,8 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
|
||||
vend_idx = 0xffff;
|
||||
for (i = 0; hfcusb_idtab[i].idVendor; i++) {
|
||||
if (dev->descriptor.idVendor == hfcusb_idtab[i].idVendor
|
||||
&& dev->descriptor.idProduct ==
|
||||
hfcusb_idtab[i].idProduct) {
|
||||
if ((le16_to_cpu(dev->descriptor.idVendor) == hfcusb_idtab[i].idVendor)
|
||||
&& (le16_to_cpu(dev->descriptor.idProduct) == hfcusb_idtab[i].idProduct)) {
|
||||
vend_idx = i;
|
||||
continue;
|
||||
}
|
||||
|
@ -1516,8 +1515,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
usb_transfer_mode
|
||||
= USB_INT;
|
||||
packet_size =
|
||||
ep->desc.
|
||||
wMaxPacketSize;
|
||||
le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
break;
|
||||
case USB_ENDPOINT_XFER_BULK:
|
||||
if (ep_addr & 0x80)
|
||||
|
@ -1545,8 +1543,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
usb_transfer_mode
|
||||
= USB_BULK;
|
||||
packet_size =
|
||||
ep->desc.
|
||||
wMaxPacketSize;
|
||||
le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
break;
|
||||
case USB_ENDPOINT_XFER_ISOC:
|
||||
if (ep_addr & 0x80)
|
||||
|
@ -1574,8 +1571,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
usb_transfer_mode
|
||||
= USB_ISOC;
|
||||
iso_packet_size =
|
||||
ep->desc.
|
||||
wMaxPacketSize;
|
||||
le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
break;
|
||||
default:
|
||||
context->
|
||||
|
@ -1588,10 +1584,8 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
fifonum = cidx;
|
||||
context->fifos[cidx].hfc =
|
||||
context;
|
||||
context->fifos[cidx].
|
||||
usb_packet_maxlen =
|
||||
ep->desc.
|
||||
wMaxPacketSize;
|
||||
context->fifos[cidx].usb_packet_maxlen =
|
||||
le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
context->fifos[cidx].
|
||||
intervall =
|
||||
ep->desc.bInterval;
|
||||
|
|
|
@ -1682,6 +1682,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
|
|||
#ifdef ISDN_DEBUG_MODEM_OPEN
|
||||
printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n");
|
||||
#endif
|
||||
module_put(info->owner);
|
||||
return;
|
||||
}
|
||||
info->flags |= ISDN_ASYNC_CLOSING;
|
||||
|
|
|
@ -143,3 +143,7 @@ s32 wf_cpu_pid_run(struct wf_cpu_pid_state *st, s32 new_power, s32 new_temp)
|
|||
return st->target;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wf_cpu_pid_run);
|
||||
|
||||
MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>");
|
||||
MODULE_DESCRIPTION("PID algorithm for PowerMacs thermal control");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
@ -194,7 +194,7 @@ static int au1xmmc_send_command(struct au1xmmc_host *host, int wait,
|
|||
|
||||
u32 mmccmd = (cmd->opcode << SD_CMD_CI_SHIFT);
|
||||
|
||||
switch (mmc_rsp_type(cmd->flags)) {
|
||||
switch (mmc_resp_type(cmd)) {
|
||||
case MMC_RSP_R1:
|
||||
mmccmd |= SD_CMD_RT_1;
|
||||
break;
|
||||
|
@ -740,7 +740,6 @@ static void au1xmmc_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
|
|||
static void au1xmmc_dma_callback(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
struct au1xmmc_host *host = (struct au1xmmc_host *) dev_id;
|
||||
u32 status;
|
||||
|
||||
/* Avoid spurious interrupts */
|
||||
|
||||
|
@ -887,7 +886,7 @@ struct mmc_host_ops au1xmmc_ops = {
|
|||
.set_ios = au1xmmc_set_ios,
|
||||
};
|
||||
|
||||
static int au1xmmc_probe(struct device *dev)
|
||||
static int __devinit au1xmmc_probe(struct platform_device *pdev)
|
||||
{
|
||||
|
||||
int i, ret = 0;
|
||||
|
@ -904,7 +903,7 @@ static int au1xmmc_probe(struct device *dev)
|
|||
disable_irq(AU1100_SD_IRQ);
|
||||
|
||||
for(i = 0; i < AU1XMMC_CONTROLLER_COUNT; i++) {
|
||||
struct mmc_host *mmc = mmc_alloc_host(sizeof(struct au1xmmc_host), dev);
|
||||
struct mmc_host *mmc = mmc_alloc_host(sizeof(struct au1xmmc_host), &pdev->dev);
|
||||
struct au1xmmc_host *host = 0;
|
||||
|
||||
if (!mmc) {
|
||||
|
@ -967,7 +966,7 @@ static int au1xmmc_probe(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int au1xmmc_remove(struct device *dev)
|
||||
static int __devexit au1xmmc_remove(struct platform_device *pdev)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
@ -997,23 +996,24 @@ static int au1xmmc_remove(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct device_driver au1xmmc_driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.bus = &platform_bus_type,
|
||||
static struct platform_driver au1xmmc_driver = {
|
||||
.probe = au1xmmc_probe,
|
||||
.remove = au1xmmc_remove,
|
||||
.suspend = NULL,
|
||||
.resume = NULL
|
||||
.resume = NULL,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init au1xmmc_init(void)
|
||||
{
|
||||
return driver_register(&au1xmmc_driver);
|
||||
return platform_driver_register(&au1xmmc_driver);
|
||||
}
|
||||
|
||||
static void __exit au1xmmc_exit(void)
|
||||
{
|
||||
driver_unregister(&au1xmmc_driver);
|
||||
platform_driver_unregister(&au1xmmc_driver);
|
||||
}
|
||||
|
||||
module_init(au1xmmc_init);
|
||||
|
|
|
@ -296,9 +296,7 @@ void t1_espi_destroy(struct peespi *espi)
|
|||
|
||||
struct peespi *t1_espi_create(adapter_t *adapter)
|
||||
{
|
||||
struct peespi *espi = kmalloc(sizeof(*espi), GFP_KERNEL);
|
||||
|
||||
memset(espi, 0, sizeof(*espi));
|
||||
struct peespi *espi = kzalloc(sizeof(*espi), GFP_KERNEL);
|
||||
|
||||
if (espi)
|
||||
espi->adapter = adapter;
|
||||
|
|
|
@ -4092,6 +4092,7 @@ static void s2io_set_multicast(struct net_device *dev)
|
|||
i++, mclist = mclist->next) {
|
||||
memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr,
|
||||
ETH_ALEN);
|
||||
mac_addr = 0;
|
||||
for (j = 0; j < ETH_ALEN; j++) {
|
||||
mac_addr |= mclist->dmi_addr[j];
|
||||
mac_addr <<= 8;
|
||||
|
|
|
@ -3532,9 +3532,23 @@ static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
|
|||
(base + len + 8 < base));
|
||||
}
|
||||
|
||||
/* Test for DMA addresses > 40-bit */
|
||||
static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
|
||||
int len)
|
||||
{
|
||||
#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
|
||||
if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
|
||||
return (((u64) mapping + len) > DMA_40BIT_MASK);
|
||||
return 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
|
||||
|
||||
static int tigon3_4gb_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
|
||||
/* Workaround 4GB and 40-bit hardware DMA bugs. */
|
||||
static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
|
||||
u32 last_plus_one, u32 *start,
|
||||
u32 base_flags, u32 mss)
|
||||
{
|
||||
|
@ -3742,6 +3756,9 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
if (tg3_4g_overflow_test(mapping, len))
|
||||
would_hit_hwbug = 1;
|
||||
|
||||
if (tg3_40bit_overflow_test(tp, mapping, len))
|
||||
would_hit_hwbug = 1;
|
||||
|
||||
if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
|
||||
tg3_set_txd(tp, entry, mapping, len,
|
||||
base_flags, (i == last)|(mss << 1));
|
||||
|
@ -3763,7 +3780,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
/* If the workaround fails due to memory/mapping
|
||||
* failure, silently drop this packet.
|
||||
*/
|
||||
if (tigon3_4gb_hwbug_workaround(tp, skb, last_plus_one,
|
||||
if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
|
||||
&start, base_flags, mss))
|
||||
goto out_unlock;
|
||||
|
||||
|
@ -10608,8 +10625,9 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
unsigned long tg3reg_base, tg3reg_len;
|
||||
struct net_device *dev;
|
||||
struct tg3 *tp;
|
||||
int i, err, pci_using_dac, pm_cap;
|
||||
int i, err, pm_cap;
|
||||
char str[40];
|
||||
u64 dma_mask, persist_dma_mask;
|
||||
|
||||
if (tg3_version_printed++ == 0)
|
||||
printk(KERN_INFO "%s", version);
|
||||
|
@ -10646,26 +10664,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
goto err_out_free_res;
|
||||
}
|
||||
|
||||
/* Configure DMA attributes. */
|
||||
err = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
|
||||
if (!err) {
|
||||
pci_using_dac = 1;
|
||||
err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR PFX "Unable to obtain 64 bit DMA "
|
||||
"for consistent allocations\n");
|
||||
goto err_out_free_res;
|
||||
}
|
||||
} else {
|
||||
err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
|
||||
if (err) {
|
||||
printk(KERN_ERR PFX "No usable DMA configuration, "
|
||||
"aborting.\n");
|
||||
goto err_out_free_res;
|
||||
}
|
||||
pci_using_dac = 0;
|
||||
}
|
||||
|
||||
tg3reg_base = pci_resource_start(pdev, 0);
|
||||
tg3reg_len = pci_resource_len(pdev, 0);
|
||||
|
||||
|
@ -10679,8 +10677,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
SET_MODULE_OWNER(dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
if (pci_using_dac)
|
||||
dev->features |= NETIF_F_HIGHDMA;
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
#if TG3_VLAN_TAG_USED
|
||||
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
||||
|
@ -10765,6 +10761,44 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
goto err_out_iounmap;
|
||||
}
|
||||
|
||||
/* 5714, 5715 and 5780 cannot support DMA addresses > 40-bit.
|
||||
* On 64-bit systems with IOMMU, use 40-bit dma_mask.
|
||||
* On 64-bit systems without IOMMU, use 64-bit dma_mask and
|
||||
* do DMA address check in tg3_start_xmit().
|
||||
*/
|
||||
if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
|
||||
persist_dma_mask = dma_mask = DMA_40BIT_MASK;
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
dma_mask = DMA_64BIT_MASK;
|
||||
#endif
|
||||
} else if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
|
||||
persist_dma_mask = dma_mask = DMA_32BIT_MASK;
|
||||
else
|
||||
persist_dma_mask = dma_mask = DMA_64BIT_MASK;
|
||||
|
||||
/* Configure DMA attributes. */
|
||||
if (dma_mask > DMA_32BIT_MASK) {
|
||||
err = pci_set_dma_mask(pdev, dma_mask);
|
||||
if (!err) {
|
||||
dev->features |= NETIF_F_HIGHDMA;
|
||||
err = pci_set_consistent_dma_mask(pdev,
|
||||
persist_dma_mask);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR PFX "Unable to obtain 64 bit "
|
||||
"DMA for consistent allocations\n");
|
||||
goto err_out_iounmap;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (err || dma_mask == DMA_32BIT_MASK) {
|
||||
err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
|
||||
if (err) {
|
||||
printk(KERN_ERR PFX "No usable DMA configuration, "
|
||||
"aborting.\n");
|
||||
goto err_out_iounmap;
|
||||
}
|
||||
}
|
||||
|
||||
tg3_init_bufmgr_config(tp);
|
||||
|
||||
#if TG3_TSO_SUPPORT != 0
|
||||
|
@ -10833,9 +10867,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
} else
|
||||
tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
|
||||
|
||||
if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
|
||||
dev->features &= ~NETIF_F_HIGHDMA;
|
||||
|
||||
/* flow control autonegotiation is default behavior */
|
||||
tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
|
||||
|
||||
|
|
|
@ -1115,6 +1115,9 @@ chsc_enable_facility(int operation_code)
|
|||
goto out;
|
||||
}
|
||||
switch (sda_area->response.code) {
|
||||
case 0x0001: /* everything ok */
|
||||
ret = 0;
|
||||
break;
|
||||
case 0x0003: /* invalid request block */
|
||||
case 0x0007:
|
||||
ret = -EINVAL;
|
||||
|
@ -1123,6 +1126,8 @@ chsc_enable_facility(int operation_code)
|
|||
case 0x0101: /* facility not provided */
|
||||
ret = -EOPNOTSUPP;
|
||||
break;
|
||||
default: /* something went wrong */
|
||||
ret = -EIO;
|
||||
}
|
||||
out:
|
||||
free_page((unsigned long)sda_area);
|
||||
|
|
|
@ -192,7 +192,7 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
|||
SDev = cd->device;
|
||||
|
||||
if (!sense) {
|
||||
sense = kmalloc(sizeof(*sense), GFP_KERNEL);
|
||||
sense = kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
|
||||
if (!sense) {
|
||||
err = -ENOMEM;
|
||||
goto out;
|
||||
|
|
|
@ -242,8 +242,10 @@ static void serial_close(struct tty_struct *tty, struct file * filp)
|
|||
|
||||
down(&port->sem);
|
||||
|
||||
if (port->open_count == 0)
|
||||
goto out;
|
||||
if (port->open_count == 0) {
|
||||
up(&port->sem);
|
||||
return;
|
||||
}
|
||||
|
||||
--port->open_count;
|
||||
if (port->open_count == 0) {
|
||||
|
@ -260,10 +262,8 @@ static void serial_close(struct tty_struct *tty, struct file * filp)
|
|||
module_put(port->serial->type->driver.owner);
|
||||
}
|
||||
|
||||
kref_put(&port->serial->kref, destroy_serial);
|
||||
|
||||
out:
|
||||
up(&port->sem);
|
||||
kref_put(&port->serial->kref, destroy_serial);
|
||||
}
|
||||
|
||||
static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
|
||||
|
|
|
@ -36,7 +36,7 @@ static DECLARE_MUTEX(read_mutex);
|
|||
|
||||
/* These two macros may change in future, to provide better st_ino
|
||||
semantics. */
|
||||
#define CRAMINO(x) ((x)->offset?(x)->offset<<2:1)
|
||||
#define CRAMINO(x) (((x)->offset && (x)->size)?(x)->offset<<2:1)
|
||||
#define OFFSET(x) ((x)->i_ino)
|
||||
|
||||
|
||||
|
@ -66,8 +66,36 @@ static int cramfs_iget5_test(struct inode *inode, void *opaque)
|
|||
|
||||
static int cramfs_iget5_set(struct inode *inode, void *opaque)
|
||||
{
|
||||
static struct timespec zerotime;
|
||||
struct cramfs_inode *cramfs_inode = opaque;
|
||||
inode->i_mode = cramfs_inode->mode;
|
||||
inode->i_uid = cramfs_inode->uid;
|
||||
inode->i_size = cramfs_inode->size;
|
||||
inode->i_blocks = (cramfs_inode->size - 1) / 512 + 1;
|
||||
inode->i_blksize = PAGE_CACHE_SIZE;
|
||||
inode->i_gid = cramfs_inode->gid;
|
||||
/* Struct copy intentional */
|
||||
inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime;
|
||||
inode->i_ino = CRAMINO(cramfs_inode);
|
||||
/* inode->i_nlink is left 1 - arguably wrong for directories,
|
||||
but it's the best we can do without reading the directory
|
||||
contents. 1 yields the right result in GNU find, even
|
||||
without -noleaf option. */
|
||||
if (S_ISREG(inode->i_mode)) {
|
||||
inode->i_fop = &generic_ro_fops;
|
||||
inode->i_data.a_ops = &cramfs_aops;
|
||||
} else if (S_ISDIR(inode->i_mode)) {
|
||||
inode->i_op = &cramfs_dir_inode_operations;
|
||||
inode->i_fop = &cramfs_directory_operations;
|
||||
} else if (S_ISLNK(inode->i_mode)) {
|
||||
inode->i_op = &page_symlink_inode_operations;
|
||||
inode->i_data.a_ops = &cramfs_aops;
|
||||
} else {
|
||||
inode->i_size = 0;
|
||||
inode->i_blocks = 0;
|
||||
init_special_inode(inode, inode->i_mode,
|
||||
old_decode_dev(cramfs_inode->size));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -77,37 +105,7 @@ static struct inode *get_cramfs_inode(struct super_block *sb,
|
|||
struct inode *inode = iget5_locked(sb, CRAMINO(cramfs_inode),
|
||||
cramfs_iget5_test, cramfs_iget5_set,
|
||||
cramfs_inode);
|
||||
static struct timespec zerotime;
|
||||
|
||||
if (inode && (inode->i_state & I_NEW)) {
|
||||
inode->i_mode = cramfs_inode->mode;
|
||||
inode->i_uid = cramfs_inode->uid;
|
||||
inode->i_size = cramfs_inode->size;
|
||||
inode->i_blocks = (cramfs_inode->size - 1) / 512 + 1;
|
||||
inode->i_blksize = PAGE_CACHE_SIZE;
|
||||
inode->i_gid = cramfs_inode->gid;
|
||||
/* Struct copy intentional */
|
||||
inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime;
|
||||
inode->i_ino = CRAMINO(cramfs_inode);
|
||||
/* inode->i_nlink is left 1 - arguably wrong for directories,
|
||||
but it's the best we can do without reading the directory
|
||||
contents. 1 yields the right result in GNU find, even
|
||||
without -noleaf option. */
|
||||
if (S_ISREG(inode->i_mode)) {
|
||||
inode->i_fop = &generic_ro_fops;
|
||||
inode->i_data.a_ops = &cramfs_aops;
|
||||
} else if (S_ISDIR(inode->i_mode)) {
|
||||
inode->i_op = &cramfs_dir_inode_operations;
|
||||
inode->i_fop = &cramfs_directory_operations;
|
||||
} else if (S_ISLNK(inode->i_mode)) {
|
||||
inode->i_op = &page_symlink_inode_operations;
|
||||
inode->i_data.a_ops = &cramfs_aops;
|
||||
} else {
|
||||
inode->i_size = 0;
|
||||
inode->i_blocks = 0;
|
||||
init_special_inode(inode, inode->i_mode,
|
||||
old_decode_dev(cramfs_inode->size));
|
||||
}
|
||||
unlock_new_inode(inode);
|
||||
}
|
||||
return inode;
|
||||
|
|
|
@ -34,10 +34,7 @@ static int fifo_open(struct inode *inode, struct file *filp)
|
|||
{
|
||||
int ret;
|
||||
|
||||
ret = -ERESTARTSYS;
|
||||
if (mutex_lock_interruptible(PIPE_MUTEX(*inode)))
|
||||
goto err_nolock_nocleanup;
|
||||
|
||||
mutex_lock(PIPE_MUTEX(*inode));
|
||||
if (!inode->i_pipe) {
|
||||
ret = -ENOMEM;
|
||||
if(!pipe_new(inode))
|
||||
|
@ -140,8 +137,6 @@ static int fifo_open(struct inode *inode, struct file *filp)
|
|||
|
||||
err_nocleanup:
|
||||
mutex_unlock(PIPE_MUTEX(*inode));
|
||||
|
||||
err_nolock_nocleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -204,7 +204,6 @@ static void smaps_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
{
|
||||
pte_t *pte, ptent;
|
||||
spinlock_t *ptl;
|
||||
unsigned long pfn;
|
||||
struct page *page;
|
||||
|
||||
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
|
@ -214,12 +213,12 @@ static void smaps_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
continue;
|
||||
|
||||
mss->resident += PAGE_SIZE;
|
||||
pfn = pte_pfn(ptent);
|
||||
if (!pfn_valid(pfn))
|
||||
|
||||
page = vm_normal_page(vma, addr, ptent);
|
||||
if (!page)
|
||||
continue;
|
||||
|
||||
page = pfn_to_page(pfn);
|
||||
if (page_count(page) >= 2) {
|
||||
if (page_mapcount(page) >= 2) {
|
||||
if (pte_dirty(ptent))
|
||||
mss->shared_dirty += PAGE_SIZE;
|
||||
else
|
||||
|
@ -289,7 +288,7 @@ static int show_smap(struct seq_file *m, void *v)
|
|||
struct mem_size_stats mss;
|
||||
|
||||
memset(&mss, 0, sizeof mss);
|
||||
if (vma->vm_mm)
|
||||
if (vma->vm_mm && !is_vm_hugetlb_page(vma))
|
||||
smaps_pgd_range(vma, vma->vm_start, vma->vm_end, &mss);
|
||||
return show_map_internal(m, v, &mss);
|
||||
}
|
||||
|
|
|
@ -137,6 +137,7 @@ static int ramfs_symlink(struct inode * dir, struct dentry *dentry, const char *
|
|||
inode->i_gid = dir->i_gid;
|
||||
d_instantiate(dentry, inode);
|
||||
dget(dentry);
|
||||
dir->i_mtime = dir->i_ctime = CURRENT_TIME;
|
||||
} else
|
||||
iput(inode);
|
||||
}
|
||||
|
|
|
@ -247,7 +247,7 @@ static int linear_search_in_dir_item(struct cpu_key *key,
|
|||
/* mark, that this generation number is used */
|
||||
if (de->de_gen_number_bit_string)
|
||||
set_bit(GET_GENERATION_NUMBER(deh_offset(deh)),
|
||||
(unsigned long *)de->de_gen_number_bit_string);
|
||||
de->de_gen_number_bit_string);
|
||||
|
||||
// calculate pointer to name and namelen
|
||||
de->de_entry_num = i;
|
||||
|
@ -431,7 +431,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
|
|||
struct reiserfs_de_head *deh;
|
||||
INITIALIZE_PATH(path);
|
||||
struct reiserfs_dir_entry de;
|
||||
int bit_string[MAX_GENERATION_NUMBER / (sizeof(int) * 8) + 1];
|
||||
DECLARE_BITMAP(bit_string, MAX_GENERATION_NUMBER + 1);
|
||||
int gen_number;
|
||||
char small_buf[32 + DEH_SIZE]; /* 48 bytes now and we avoid kmalloc
|
||||
if we create file with short name */
|
||||
|
@ -486,7 +486,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
|
|||
|
||||
/* find the proper place for the new entry */
|
||||
memset(bit_string, 0, sizeof(bit_string));
|
||||
de.de_gen_number_bit_string = (char *)bit_string;
|
||||
de.de_gen_number_bit_string = bit_string;
|
||||
retval = reiserfs_find_entry(dir, name, namelen, &path, &de);
|
||||
if (retval != NAME_NOT_FOUND) {
|
||||
if (buffer != small_buf)
|
||||
|
@ -508,7 +508,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
|
|||
}
|
||||
|
||||
gen_number =
|
||||
find_first_zero_bit((unsigned long *)bit_string,
|
||||
find_first_zero_bit(bit_string,
|
||||
MAX_GENERATION_NUMBER + 1);
|
||||
if (gen_number > MAX_GENERATION_NUMBER) {
|
||||
/* there is no free generation number */
|
||||
|
|
|
@ -118,6 +118,8 @@ static inline void sched_cacheflush(void)
|
|||
extern void account_vtime(struct task_struct *);
|
||||
extern void account_tick_vtime(struct task_struct *);
|
||||
extern void account_system_vtime(struct task_struct *);
|
||||
#else
|
||||
#define account_vtime(x) do { /* empty */ } while (0)
|
||||
#endif
|
||||
|
||||
#define finish_arch_switch(prev) do { \
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"4: ba 3b\n" \
|
||||
" mov %5, %0\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,#alloc\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .align 4\n" \
|
||||
" .word 1b, 4b\n" \
|
||||
" .word 2b, 4b\n" \
|
||||
|
|
|
@ -136,7 +136,7 @@ __asm__ __volatile__( \
|
|||
"b 2b\n\t" \
|
||||
" mov %3, %0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b, 3b\n\t" \
|
||||
".previous\n\n\t" \
|
||||
|
@ -148,7 +148,7 @@ if (__builtin_constant_p(ret) && ret == -EFAULT) \
|
|||
__asm__ __volatile__( \
|
||||
"/* Put user asm ret, inline. */\n" \
|
||||
"1:\t" "st"#size "a %1, [%2] %%asi\n\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b, __ret_efault\n\n\t" \
|
||||
".previous\n\n\t" \
|
||||
|
@ -163,7 +163,7 @@ __asm__ __volatile__( \
|
|||
"ret\n\t" \
|
||||
" restore %%g0, %3, %%o0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b, 3b\n\n\t" \
|
||||
".previous\n\n\t" \
|
||||
|
@ -206,7 +206,7 @@ __asm__ __volatile__( \
|
|||
"b 2b\n\t" \
|
||||
" mov %3, %0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b, 3b\n\n\t" \
|
||||
".previous\n\t" \
|
||||
|
@ -218,7 +218,7 @@ if (__builtin_constant_p(retval) && retval == -EFAULT) \
|
|||
__asm__ __volatile__( \
|
||||
"/* Get user asm ret, inline. */\n" \
|
||||
"1:\t" "ld"#size "a [%1] %%asi, %0\n\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b,__ret_efault\n\n\t" \
|
||||
".previous\n\t" \
|
||||
|
@ -233,7 +233,7 @@ __asm__ __volatile__( \
|
|||
"ret\n\t" \
|
||||
" restore %%g0, %2, %%o0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,#alloc\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
".align 4\n\t" \
|
||||
".word 1b, 3b\n\n\t" \
|
||||
".previous\n\t" \
|
||||
|
|
|
@ -116,6 +116,10 @@ extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
|||
extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer);
|
||||
extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp);
|
||||
|
||||
#ifdef CONFIG_NO_IDLE_HZ
|
||||
extern ktime_t hrtimer_get_next_event(void);
|
||||
#endif
|
||||
|
||||
static inline int hrtimer_active(const struct hrtimer *timer)
|
||||
{
|
||||
return timer->state == HRTIMER_PENDING;
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
CACHE(32768)
|
||||
CACHE(65536)
|
||||
CACHE(131072)
|
||||
#ifndef CONFIG_MMU
|
||||
#if (NR_CPUS > 512) || (MAX_NUMNODES > 256) || !defined(CONFIG_MMU)
|
||||
CACHE(262144)
|
||||
#endif
|
||||
#ifndef CONFIG_MMU
|
||||
CACHE(524288)
|
||||
CACHE(1048576)
|
||||
#ifdef CONFIG_LARGE_ALLOCS
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
#include <linux/mmzone.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
struct page;
|
||||
struct zone;
|
||||
struct pglist_data;
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
/*
|
||||
* pgdat resizing functions
|
||||
|
|
|
@ -1752,6 +1752,8 @@
|
|||
#define PCI_DEVICE_ID_CCD_B00B 0xb00b
|
||||
#define PCI_DEVICE_ID_CCD_B00C 0xb00c
|
||||
#define PCI_DEVICE_ID_CCD_B100 0xb100
|
||||
#define PCI_DEVICE_ID_CCD_B700 0xb700
|
||||
#define PCI_DEVICE_ID_CCD_B701 0xb701
|
||||
|
||||
#define PCI_VENDOR_ID_EXAR 0x13a8
|
||||
#define PCI_DEVICE_ID_EXAR_XR17C152 0x0152
|
||||
|
|
|
@ -1052,7 +1052,7 @@ struct reiserfs_dir_entry {
|
|||
int de_entrylen;
|
||||
int de_namelen;
|
||||
char *de_name;
|
||||
char *de_gen_number_bit_string;
|
||||
unsigned long *de_gen_number_bit_string;
|
||||
|
||||
__u32 de_dir_id;
|
||||
__u32 de_objectid;
|
||||
|
|
|
@ -505,6 +505,41 @@ ktime_t hrtimer_get_remaining(const struct hrtimer *timer)
|
|||
return rem;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NO_IDLE_HZ
|
||||
/**
|
||||
* hrtimer_get_next_event - get the time until next expiry event
|
||||
*
|
||||
* Returns the delta to the next expiry event or KTIME_MAX if no timer
|
||||
* is pending.
|
||||
*/
|
||||
ktime_t hrtimer_get_next_event(void)
|
||||
{
|
||||
struct hrtimer_base *base = __get_cpu_var(hrtimer_bases);
|
||||
ktime_t delta, mindelta = { .tv64 = KTIME_MAX };
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_HRTIMER_BASES; i++, base++) {
|
||||
struct hrtimer *timer;
|
||||
|
||||
spin_lock_irqsave(&base->lock, flags);
|
||||
if (!base->first) {
|
||||
spin_unlock_irqrestore(&base->lock, flags);
|
||||
continue;
|
||||
}
|
||||
timer = rb_entry(base->first, struct hrtimer, node);
|
||||
delta.tv64 = timer->expires.tv64;
|
||||
spin_unlock_irqrestore(&base->lock, flags);
|
||||
delta = ktime_sub(delta, base->get_time());
|
||||
if (delta.tv64 < mindelta.tv64)
|
||||
mindelta.tv64 = delta.tv64;
|
||||
}
|
||||
if (mindelta.tv64 < 0)
|
||||
mindelta.tv64 = 0;
|
||||
return mindelta;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hrtimer_init - initialize a timer to the given clock
|
||||
*
|
||||
|
|
|
@ -4028,6 +4028,8 @@ static inline void __cond_resched(void)
|
|||
*/
|
||||
if (unlikely(preempt_count()))
|
||||
return;
|
||||
if (unlikely(system_state != SYSTEM_RUNNING))
|
||||
return;
|
||||
do {
|
||||
add_preempt_count(PREEMPT_ACTIVE);
|
||||
schedule();
|
||||
|
|
|
@ -489,9 +489,21 @@ unsigned long next_timer_interrupt(void)
|
|||
struct list_head *list;
|
||||
struct timer_list *nte;
|
||||
unsigned long expires;
|
||||
unsigned long hr_expires = MAX_JIFFY_OFFSET;
|
||||
ktime_t hr_delta;
|
||||
tvec_t *varray[4];
|
||||
int i, j;
|
||||
|
||||
hr_delta = hrtimer_get_next_event();
|
||||
if (hr_delta.tv64 != KTIME_MAX) {
|
||||
struct timespec tsdelta;
|
||||
tsdelta = ktime_to_timespec(hr_delta);
|
||||
hr_expires = timespec_to_jiffies(&tsdelta);
|
||||
if (hr_expires < 3)
|
||||
return hr_expires + jiffies;
|
||||
}
|
||||
hr_expires += jiffies;
|
||||
|
||||
base = &__get_cpu_var(tvec_bases);
|
||||
spin_lock(&base->t_base.lock);
|
||||
expires = base->timer_jiffies + (LONG_MAX >> 1);
|
||||
|
@ -542,6 +554,10 @@ unsigned long next_timer_interrupt(void)
|
|||
}
|
||||
}
|
||||
spin_unlock(&base->t_base.lock);
|
||||
|
||||
if (time_before(hr_expires, expires))
|
||||
return hr_expires;
|
||||
|
||||
return expires;
|
||||
}
|
||||
#endif
|
||||
|
@ -925,6 +941,8 @@ static inline void update_times(void)
|
|||
void do_timer(struct pt_regs *regs)
|
||||
{
|
||||
jiffies_64++;
|
||||
/* prevent loading jiffies before storing new jiffies_64 value. */
|
||||
barrier();
|
||||
update_times();
|
||||
softlockup_tick(regs);
|
||||
}
|
||||
|
|
128
mm/mempolicy.c
128
mm/mempolicy.c
|
@ -197,7 +197,7 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
|
|||
return policy;
|
||||
}
|
||||
|
||||
static void gather_stats(struct page *, void *);
|
||||
static void gather_stats(struct page *, void *, int pte_dirty);
|
||||
static void migrate_page_add(struct page *page, struct list_head *pagelist,
|
||||
unsigned long flags);
|
||||
|
||||
|
@ -239,7 +239,7 @@ static int check_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
continue;
|
||||
|
||||
if (flags & MPOL_MF_STATS)
|
||||
gather_stats(page, private);
|
||||
gather_stats(page, private, pte_dirty(*pte));
|
||||
else if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL))
|
||||
migrate_page_add(page, private, flags);
|
||||
else
|
||||
|
@ -1753,67 +1753,137 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
|
|||
struct numa_maps {
|
||||
unsigned long pages;
|
||||
unsigned long anon;
|
||||
unsigned long mapped;
|
||||
unsigned long active;
|
||||
unsigned long writeback;
|
||||
unsigned long mapcount_max;
|
||||
unsigned long dirty;
|
||||
unsigned long swapcache;
|
||||
unsigned long node[MAX_NUMNODES];
|
||||
};
|
||||
|
||||
static void gather_stats(struct page *page, void *private)
|
||||
static void gather_stats(struct page *page, void *private, int pte_dirty)
|
||||
{
|
||||
struct numa_maps *md = private;
|
||||
int count = page_mapcount(page);
|
||||
|
||||
if (count)
|
||||
md->mapped++;
|
||||
|
||||
if (count > md->mapcount_max)
|
||||
md->mapcount_max = count;
|
||||
|
||||
md->pages++;
|
||||
if (pte_dirty || PageDirty(page))
|
||||
md->dirty++;
|
||||
|
||||
if (PageSwapCache(page))
|
||||
md->swapcache++;
|
||||
|
||||
if (PageActive(page))
|
||||
md->active++;
|
||||
|
||||
if (PageWriteback(page))
|
||||
md->writeback++;
|
||||
|
||||
if (PageAnon(page))
|
||||
md->anon++;
|
||||
|
||||
if (count > md->mapcount_max)
|
||||
md->mapcount_max = count;
|
||||
|
||||
md->node[page_to_nid(page)]++;
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
static void check_huge_range(struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end,
|
||||
struct numa_maps *md)
|
||||
{
|
||||
unsigned long addr;
|
||||
struct page *page;
|
||||
|
||||
for (addr = start; addr < end; addr += HPAGE_SIZE) {
|
||||
pte_t *ptep = huge_pte_offset(vma->vm_mm, addr & HPAGE_MASK);
|
||||
pte_t pte;
|
||||
|
||||
if (!ptep)
|
||||
continue;
|
||||
|
||||
pte = *ptep;
|
||||
if (pte_none(pte))
|
||||
continue;
|
||||
|
||||
page = pte_page(pte);
|
||||
if (!page)
|
||||
continue;
|
||||
|
||||
gather_stats(page, md, pte_dirty(*ptep));
|
||||
}
|
||||
}
|
||||
|
||||
int show_numa_map(struct seq_file *m, void *v)
|
||||
{
|
||||
struct task_struct *task = m->private;
|
||||
struct vm_area_struct *vma = v;
|
||||
struct numa_maps *md;
|
||||
struct file *file = vma->vm_file;
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
int n;
|
||||
char buffer[50];
|
||||
|
||||
if (!vma->vm_mm)
|
||||
if (!mm)
|
||||
return 0;
|
||||
|
||||
md = kzalloc(sizeof(struct numa_maps), GFP_KERNEL);
|
||||
if (!md)
|
||||
return 0;
|
||||
|
||||
if (!is_vm_hugetlb_page(vma))
|
||||
check_pgd_range(vma, vma->vm_start, vma->vm_end,
|
||||
&node_online_map, MPOL_MF_STATS, md);
|
||||
mpol_to_str(buffer, sizeof(buffer),
|
||||
get_vma_policy(task, vma, vma->vm_start));
|
||||
|
||||
if (md->pages) {
|
||||
mpol_to_str(buffer, sizeof(buffer),
|
||||
get_vma_policy(task, vma, vma->vm_start));
|
||||
seq_printf(m, "%08lx %s", vma->vm_start, buffer);
|
||||
|
||||
seq_printf(m, "%08lx %s pages=%lu mapped=%lu maxref=%lu",
|
||||
vma->vm_start, buffer, md->pages,
|
||||
md->mapped, md->mapcount_max);
|
||||
|
||||
if (md->anon)
|
||||
seq_printf(m," anon=%lu",md->anon);
|
||||
|
||||
for_each_online_node(n)
|
||||
if (md->node[n])
|
||||
seq_printf(m, " N%d=%lu", n, md->node[n]);
|
||||
|
||||
seq_putc(m, '\n');
|
||||
if (file) {
|
||||
seq_printf(m, " file=");
|
||||
seq_path(m, file->f_vfsmnt, file->f_dentry, "\n\t= ");
|
||||
} else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
|
||||
seq_printf(m, " heap");
|
||||
} else if (vma->vm_start <= mm->start_stack &&
|
||||
vma->vm_end >= mm->start_stack) {
|
||||
seq_printf(m, " stack");
|
||||
}
|
||||
|
||||
if (is_vm_hugetlb_page(vma)) {
|
||||
check_huge_range(vma, vma->vm_start, vma->vm_end, md);
|
||||
seq_printf(m, " huge");
|
||||
} else {
|
||||
check_pgd_range(vma, vma->vm_start, vma->vm_end,
|
||||
&node_online_map, MPOL_MF_STATS, md);
|
||||
}
|
||||
|
||||
if (!md->pages)
|
||||
goto out;
|
||||
|
||||
if (md->anon)
|
||||
seq_printf(m," anon=%lu",md->anon);
|
||||
|
||||
if (md->dirty)
|
||||
seq_printf(m," dirty=%lu",md->dirty);
|
||||
|
||||
if (md->pages != md->anon && md->pages != md->dirty)
|
||||
seq_printf(m, " mapped=%lu", md->pages);
|
||||
|
||||
if (md->mapcount_max > 1)
|
||||
seq_printf(m, " mapmax=%lu", md->mapcount_max);
|
||||
|
||||
if (md->swapcache)
|
||||
seq_printf(m," swapcache=%lu", md->swapcache);
|
||||
|
||||
if (md->active < md->pages && !is_vm_hugetlb_page(vma))
|
||||
seq_printf(m," active=%lu", md->active);
|
||||
|
||||
if (md->writeback)
|
||||
seq_printf(m," writeback=%lu", md->writeback);
|
||||
|
||||
for_each_online_node(n)
|
||||
if (md->node[n])
|
||||
seq_printf(m, " N%d=%lu", n, md->node[n]);
|
||||
out:
|
||||
seq_putc(m, '\n');
|
||||
kfree(md);
|
||||
|
||||
if (m->count < m->size)
|
||||
|
|
26
mm/slab.c
26
mm/slab.c
|
@ -1628,36 +1628,36 @@ static inline size_t calculate_slab_order(struct kmem_cache *cachep,
|
|||
size_t size, size_t align, unsigned long flags)
|
||||
{
|
||||
size_t left_over = 0;
|
||||
int gfporder;
|
||||
|
||||
for (;; cachep->gfporder++) {
|
||||
for (gfporder = 0 ; gfporder <= MAX_GFP_ORDER; gfporder++) {
|
||||
unsigned int num;
|
||||
size_t remainder;
|
||||
|
||||
if (cachep->gfporder > MAX_GFP_ORDER) {
|
||||
cachep->num = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
cache_estimate(cachep->gfporder, size, align, flags,
|
||||
&remainder, &num);
|
||||
cache_estimate(gfporder, size, align, flags, &remainder, &num);
|
||||
if (!num)
|
||||
continue;
|
||||
|
||||
/* More than offslab_limit objects will cause problems */
|
||||
if (flags & CFLGS_OFF_SLAB && cachep->num > offslab_limit)
|
||||
if ((flags & CFLGS_OFF_SLAB) && num > offslab_limit)
|
||||
break;
|
||||
|
||||
/* Found something acceptable - save it away */
|
||||
cachep->num = num;
|
||||
cachep->gfporder = gfporder;
|
||||
left_over = remainder;
|
||||
|
||||
/*
|
||||
* Large number of objects is good, but very large slabs are
|
||||
* currently bad for the gfp()s.
|
||||
*/
|
||||
if (cachep->gfporder >= slab_break_gfp_order)
|
||||
if (gfporder >= slab_break_gfp_order)
|
||||
break;
|
||||
|
||||
if ((left_over * 8) <= (PAGE_SIZE << cachep->gfporder))
|
||||
/* Acceptable internal fragmentation */
|
||||
/*
|
||||
* Acceptable internal fragmentation?
|
||||
*/
|
||||
if ((left_over * 8) <= (PAGE_SIZE << gfporder))
|
||||
break;
|
||||
}
|
||||
return left_over;
|
||||
|
@ -2554,7 +2554,7 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
|
|||
"slab: Internal list corruption detected in cache '%s'(%d), slabp %p(%d). Hexdump:\n",
|
||||
cachep->name, cachep->num, slabp, slabp->inuse);
|
||||
for (i = 0;
|
||||
i < sizeof(slabp) + cachep->num * sizeof(kmem_bufctl_t);
|
||||
i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
|
||||
i++) {
|
||||
if ((i % 16) == 0)
|
||||
printk("\n%03x:", i);
|
||||
|
|
|
@ -39,25 +39,19 @@ static DECLARE_WAIT_QUEUE_HEAD(sigd_sleep);
|
|||
static void sigd_put_skb(struct sk_buff *skb)
|
||||
{
|
||||
#ifdef WAIT_FOR_DEMON
|
||||
static unsigned long silence;
|
||||
DECLARE_WAITQUEUE(wait,current);
|
||||
|
||||
add_wait_queue(&sigd_sleep,&wait);
|
||||
while (!sigd) {
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
if (time_after(jiffies, silence) || silence == 0) {
|
||||
printk(KERN_INFO "atmsvc: waiting for signaling demon "
|
||||
"...\n");
|
||||
silence = (jiffies+30*HZ)|1;
|
||||
}
|
||||
DPRINTK("atmsvc: waiting for signaling demon...\n");
|
||||
schedule();
|
||||
}
|
||||
current->state = TASK_RUNNING;
|
||||
remove_wait_queue(&sigd_sleep,&wait);
|
||||
#else
|
||||
if (!sigd) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_WARNING "atmsvc: no signaling demon\n");
|
||||
DPRINTK("atmsvc: no signaling demon\n");
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -81,26 +81,27 @@ static void port_carrier_check(void *arg)
|
|||
{
|
||||
struct net_device *dev = arg;
|
||||
struct net_bridge_port *p;
|
||||
struct net_bridge *br;
|
||||
|
||||
rtnl_lock();
|
||||
p = dev->br_port;
|
||||
if (!p)
|
||||
goto done;
|
||||
br = p->br;
|
||||
|
||||
if (netif_carrier_ok(p->dev)) {
|
||||
u32 cost = port_cost(p->dev);
|
||||
if (netif_carrier_ok(dev))
|
||||
p->path_cost = port_cost(dev);
|
||||
|
||||
spin_lock_bh(&p->br->lock);
|
||||
if (p->state == BR_STATE_DISABLED) {
|
||||
p->path_cost = cost;
|
||||
br_stp_enable_port(p);
|
||||
if (br->dev->flags & IFF_UP) {
|
||||
spin_lock_bh(&br->lock);
|
||||
if (netif_carrier_ok(dev)) {
|
||||
if (p->state == BR_STATE_DISABLED)
|
||||
br_stp_enable_port(p);
|
||||
} else {
|
||||
if (p->state != BR_STATE_DISABLED)
|
||||
br_stp_disable_port(p);
|
||||
}
|
||||
spin_unlock_bh(&p->br->lock);
|
||||
} else {
|
||||
spin_lock_bh(&p->br->lock);
|
||||
if (p->state != BR_STATE_DISABLED)
|
||||
br_stp_disable_port(p);
|
||||
spin_unlock_bh(&p->br->lock);
|
||||
spin_unlock_bh(&br->lock);
|
||||
}
|
||||
done:
|
||||
rtnl_unlock();
|
||||
|
@ -168,6 +169,7 @@ static void del_nbp(struct net_bridge_port *p)
|
|||
|
||||
rcu_assign_pointer(dev->br_port, NULL);
|
||||
|
||||
kobject_uevent(&p->kobj, KOBJ_REMOVE);
|
||||
kobject_del(&p->kobj);
|
||||
|
||||
call_rcu(&p->rcu, destroy_nbp_rcu);
|
||||
|
@ -276,8 +278,9 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
|
|||
br_init_port(p);
|
||||
p->state = BR_STATE_DISABLED;
|
||||
INIT_WORK(&p->carrier_check, port_carrier_check, dev);
|
||||
kobject_init(&p->kobj);
|
||||
br_stp_port_timer_init(p);
|
||||
|
||||
kobject_init(&p->kobj);
|
||||
kobject_set_name(&p->kobj, SYSFS_BRIDGE_PORT_ATTR);
|
||||
p->kobj.ktype = &brport_ktype;
|
||||
p->kobj.parent = &(dev->class_dev.kobj);
|
||||
|
|
|
@ -39,8 +39,6 @@ void br_init_port(struct net_bridge_port *p)
|
|||
p->state = BR_STATE_BLOCKING;
|
||||
p->topology_change_ack = 0;
|
||||
p->config_pending = 0;
|
||||
|
||||
br_stp_port_timer_init(p);
|
||||
}
|
||||
|
||||
/* called under bridge lock */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* net/dccp/ccids/ccid3.c
|
||||
*
|
||||
* Copyright (c) 2005 The University of Waikato, Hamilton, New Zealand.
|
||||
* Copyright (c) 2005 Ian McDonald <iam4@cs.waikato.ac.nz>
|
||||
* Copyright (c) 2005-6 Ian McDonald <imcdnzl@gmail.com>
|
||||
*
|
||||
* An implementation of the DCCP protocol
|
||||
*
|
||||
|
@ -1033,9 +1033,13 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
|||
p_prev = hcrx->ccid3hcrx_p;
|
||||
|
||||
/* Calculate loss event rate */
|
||||
if (!list_empty(&hcrx->ccid3hcrx_li_hist))
|
||||
if (!list_empty(&hcrx->ccid3hcrx_li_hist)) {
|
||||
u32 i_mean = dccp_li_hist_calc_i_mean(&hcrx->ccid3hcrx_li_hist);
|
||||
|
||||
/* Scaling up by 1000000 as fixed decimal */
|
||||
hcrx->ccid3hcrx_p = 1000000 / dccp_li_hist_calc_i_mean(&hcrx->ccid3hcrx_li_hist);
|
||||
if (i_mean != 0)
|
||||
hcrx->ccid3hcrx_p = 1000000 / i_mean;
|
||||
}
|
||||
|
||||
if (hcrx->ccid3hcrx_p > p_prev) {
|
||||
ccid3_hc_rx_send_feedback(sk);
|
||||
|
|
|
@ -246,7 +246,7 @@ static int do_ccw_entry(const char *filename,
|
|||
id->cu_model);
|
||||
ADD(alias, "dt", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_TYPE,
|
||||
id->dev_type);
|
||||
ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_TYPE,
|
||||
ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL,
|
||||
id->dev_model);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -959,17 +959,15 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
|
|||
kctl.private_free = snd_ctl_elem_user_free;
|
||||
_kctl = snd_ctl_new(&kctl, access);
|
||||
if (_kctl == NULL) {
|
||||
kfree(_kctl->private_data);
|
||||
kfree(ue);
|
||||
return -ENOMEM;
|
||||
}
|
||||
_kctl->private_data = ue;
|
||||
for (idx = 0; idx < _kctl->count; idx++)
|
||||
_kctl->vd[idx].owner = file;
|
||||
err = snd_ctl_add(card, _kctl);
|
||||
if (err < 0) {
|
||||
snd_ctl_free_one(_kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
down_write(&card->controls_rwsem);
|
||||
card->user_ctl_count++;
|
||||
|
|
Loading…
Reference in New Issue