Commit 910b4606 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge kroah.com:/home/greg/linux/BK/bleed-2.6

into kroah.com:/home/greg/linux/BK/usb-2.6
parents 123615f1 056d7d3a
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 7 SUBLEVEL = 7
EXTRAVERSION =-rc2 EXTRAVERSION =-rc3
NAME=Zonked Quokka NAME=Zonked Quokka
# *DOCUMENTATION* # *DOCUMENTATION*
...@@ -1062,6 +1062,7 @@ versioncheck: ...@@ -1062,6 +1062,7 @@ versioncheck:
buildcheck: buildcheck:
$(PERL) scripts/reference_discarded.pl $(PERL) scripts/reference_discarded.pl
$(PERL) scripts/reference_init.pl
endif #ifeq ($(config-targets),1) endif #ifeq ($(config-targets),1)
endif #ifeq ($(mixed-targets),1) endif #ifeq ($(mixed-targets),1)
......
...@@ -18,8 +18,11 @@ CONFIG_STANDALONE=y ...@@ -18,8 +18,11 @@ CONFIG_STANDALONE=y
# #
CONFIG_SWAP=y CONFIG_SWAP=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_LOG_BUF_SHIFT=15 CONFIG_LOG_BUF_SHIFT=15
CONFIG_HOTPLUG=y CONFIG_HOTPLUG=y
# CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG is not set
...@@ -30,6 +33,7 @@ CONFIG_EPOLL=y ...@@ -30,6 +33,7 @@ CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
# #
...@@ -88,6 +92,7 @@ CONFIG_X86_USE_PPRO_CHECKSUM=y ...@@ -88,6 +92,7 @@ CONFIG_X86_USE_PPRO_CHECKSUM=y
# CONFIG_HPET_EMULATE_RTC is not set # CONFIG_HPET_EMULATE_RTC is not set
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=8 CONFIG_NR_CPUS=8
CONFIG_SCHED_SMT=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
CONFIG_X86_LOCAL_APIC=y CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y CONFIG_X86_IO_APIC=y
...@@ -200,7 +205,7 @@ CONFIG_BINFMT_MISC=y ...@@ -200,7 +205,7 @@ CONFIG_BINFMT_MISC=y
# #
# Generic Driver Options # Generic Driver Options
# #
# CONFIG_FW_LOADER is not set CONFIG_FW_LOADER=m
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -259,7 +264,6 @@ CONFIG_BLK_DEV_IDE=y ...@@ -259,7 +264,6 @@ CONFIG_BLK_DEV_IDE=y
# CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
...@@ -307,6 +311,7 @@ CONFIG_BLK_DEV_PIIX=y ...@@ -307,6 +311,7 @@ CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_ARM is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set # CONFIG_IDEDMA_IVB is not set
...@@ -332,7 +337,6 @@ CONFIG_CHR_DEV_SG=y ...@@ -332,7 +337,6 @@ CONFIG_CHR_DEV_SG=y
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# #
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_REPORT_LUNS=y
# CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_LOGGING is not set
...@@ -354,6 +358,7 @@ CONFIG_SCSI_REPORT_LUNS=y ...@@ -354,6 +358,7 @@ CONFIG_SCSI_REPORT_LUNS=y
# CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set # CONFIG_SCSI_AIC79XX is not set
CONFIG_SCSI_DPT_I2O=m
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_MEGARAID is not set
...@@ -361,7 +366,9 @@ CONFIG_SCSI_SATA=y ...@@ -361,7 +366,9 @@ CONFIG_SCSI_SATA=y
# CONFIG_SCSI_SATA_SVW is not set # CONFIG_SCSI_SATA_SVW is not set
CONFIG_SCSI_ATA_PIIX=y CONFIG_SCSI_ATA_PIIX=y
# CONFIG_SCSI_SATA_PROMISE is not set # CONFIG_SCSI_SATA_PROMISE is not set
CONFIG_SCSI_SATA_SX4=m
# CONFIG_SCSI_SATA_SIL is not set # CONFIG_SCSI_SATA_SIL is not set
CONFIG_SCSI_SATA_SIS=m
# CONFIG_SCSI_SATA_VIA is not set # CONFIG_SCSI_SATA_VIA is not set
# CONFIG_SCSI_SATA_VITESSE is not set # CONFIG_SCSI_SATA_VITESSE is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
...@@ -380,6 +387,9 @@ CONFIG_SCSI_ATA_PIIX=y ...@@ -380,6 +387,9 @@ CONFIG_SCSI_ATA_PIIX=y
# CONFIG_SCSI_IMM is not set # CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
CONFIG_SCSI_IPR=m
# CONFIG_SCSI_IPR_TRACE is not set
# CONFIG_SCSI_IPR_DUMP is not set
# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_FAS is not set
...@@ -484,8 +494,6 @@ CONFIG_IP_MULTICAST=y ...@@ -484,8 +494,6 @@ CONFIG_IP_MULTICAST=y
# #
# CONFIG_IP_VS is not set # CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
CONFIG_NETFILTER=y CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set # CONFIG_NETFILTER_DEBUG is not set
...@@ -539,13 +547,17 @@ CONFIG_IP_NF_TARGET_TCPMSS=y ...@@ -539,13 +547,17 @@ CONFIG_IP_NF_TARGET_TCPMSS=y
CONFIG_IP_NF_ARPTABLES=y CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y CONFIG_IP_NF_ARP_MANGLE=y
CONFIG_IP_NF_TARGET_NOTRACK=m
CONFIG_IP_NF_RAW=m
# #
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
# #
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set # CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set # CONFIG_LLC2 is not set
# CONFIG_IPX is not set # CONFIG_IPX is not set
# CONFIG_ATALK is not set # CONFIG_ATALK is not set
...@@ -566,18 +578,23 @@ CONFIG_IP_NF_ARP_MANGLE=y ...@@ -566,18 +578,23 @@ CONFIG_IP_NF_ARP_MANGLE=y
# Network testing # Network testing
# #
# CONFIG_NET_PKTGEN is not set # CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
CONFIG_DUMMY=m CONFIG_DUMMY=m
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set # CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set # CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
# #
...@@ -619,7 +636,6 @@ CONFIG_8139TOO_PIO=y ...@@ -619,7 +636,6 @@ CONFIG_8139TOO_PIO=y
# CONFIG_8139TOO_TUNE_TWISTER is not set # CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set # CONFIG_8139TOO_8129 is not set
# CONFIG_8139_OLD_RX_RESET is not set # CONFIG_8139_OLD_RX_RESET is not set
CONFIG_8139_RXBUF_IDX=2
# CONFIG_SIS900 is not set # CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set # CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set # CONFIG_SUNDANCE is not set
...@@ -637,7 +653,6 @@ CONFIG_8139_RXBUF_IDX=2 ...@@ -637,7 +653,6 @@ CONFIG_8139_RXBUF_IDX=2
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set # CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set # CONFIG_TIGON3 is not set
...@@ -645,47 +660,31 @@ CONFIG_8139_RXBUF_IDX=2 ...@@ -645,47 +660,31 @@ CONFIG_8139_RXBUF_IDX=2
# Ethernet (10000 Mbit) # Ethernet (10000 Mbit)
# #
# CONFIG_IXGB is not set # CONFIG_IXGB is not set
# CONFIG_FDDI is not set CONFIG_S2IO=m
# CONFIG_HIPPI is not set # CONFIG_S2IO_NAPI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set
# #
# Token Ring devices # Token Ring devices
# #
# CONFIG_TR is not set # CONFIG_TR is not set
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
# #
# Amateur Radio support # Wireless LAN (non-hamradio)
#
# CONFIG_HAMRADIO is not set
#
# IrDA (infrared) support
# #
# CONFIG_IRDA is not set # CONFIG_NET_RADIO is not set
# #
# Bluetooth support # Wan interfaces
# #
# CONFIG_BT is not set # CONFIG_WAN is not set
# CONFIG_NETPOLL is not set # CONFIG_FDDI is not set
# CONFIG_NET_POLL_CONTROLLER is not set # CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# #
# ISDN subsystem # ISDN subsystem
...@@ -803,6 +802,7 @@ CONFIG_AGP=y ...@@ -803,6 +802,7 @@ CONFIG_AGP=y
# CONFIG_AGP_AMD is not set # CONFIG_AGP_AMD is not set
# CONFIG_AGP_AMD64 is not set # CONFIG_AGP_AMD64 is not set
CONFIG_AGP_INTEL=y CONFIG_AGP_INTEL=y
CONFIG_AGP_INTEL_MCH=m
# CONFIG_AGP_NVIDIA is not set # CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set # CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not set # CONFIG_AGP_SWORKS is not set
...@@ -978,6 +978,7 @@ CONFIG_USB_DEVICEFS=y ...@@ -978,6 +978,7 @@ CONFIG_USB_DEVICEFS=y
# #
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_SPLIT_ISO is not set # CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_OHCI_HCD is not set # CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_UHCI_HCD=y CONFIG_USB_UHCI_HCD=y
...@@ -1012,6 +1013,7 @@ CONFIG_USB_HIDINPUT=y ...@@ -1012,6 +1013,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_KBTAB is not set # CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set # CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set # CONFIG_USB_MTOUCH is not set
CONFIG_USB_EGALAX=m
# CONFIG_USB_XPAD is not set # CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set # CONFIG_USB_ATI_REMOTE is not set
...@@ -1061,6 +1063,8 @@ CONFIG_USB_HIDINPUT=y ...@@ -1061,6 +1063,8 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set # CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set # CONFIG_USB_LED is not set
CONFIG_USB_CYTHERM=m
CONFIG_USB_PHIDGETSERVO=m
# CONFIG_USB_TEST is not set # CONFIG_USB_TEST is not set
# #
...@@ -1110,6 +1114,7 @@ CONFIG_VFAT_FS=y ...@@ -1110,6 +1114,7 @@ CONFIG_VFAT_FS=y
# #
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y CONFIG_TMPFS=y
...@@ -1152,7 +1157,6 @@ CONFIG_SUNRPC=y ...@@ -1152,7 +1157,6 @@ CONFIG_SUNRPC=y
# CONFIG_CIFS is not set # CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_AFS_FS is not set # CONFIG_AFS_FS is not set
# #
...@@ -1217,6 +1221,7 @@ CONFIG_OPROFILE=y ...@@ -1217,6 +1221,7 @@ CONFIG_OPROFILE=y
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y CONFIG_DEBUG_SPINLOCK_SLEEP=y
# CONFIG_FRAME_POINTER is not set # CONFIG_FRAME_POINTER is not set
CONFIG_4KSTACKS=y
CONFIG_X86_FIND_SMP_CONFIG=y CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y CONFIG_X86_MPPARSE=y
...@@ -1234,8 +1239,10 @@ CONFIG_X86_MPPARSE=y ...@@ -1234,8 +1239,10 @@ CONFIG_X86_MPPARSE=y
# Library routines # Library routines
# #
CONFIG_CRC32=y CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_X86_SMP=y CONFIG_X86_SMP=y
CONFIG_X86_HT=y CONFIG_X86_HT=y
CONFIG_X86_BIOS_REBOOT=y CONFIG_X86_BIOS_REBOOT=y
CONFIG_X86_TRAMPOLINE=y CONFIG_X86_TRAMPOLINE=y
CONFIG_X86_STD_RESOURCES=y
CONFIG_PC=y CONFIG_PC=y
...@@ -390,8 +390,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu) ...@@ -390,8 +390,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
} }
/* Fixup atomic count: it exited inside IRQ handler. */ /* Fixup atomic count: it exited inside IRQ handler. */
((struct task_struct *)paca[lcpu].xCurrent)->thread_info->preempt_count paca[lcpu].xCurrent->thread_info->preempt_count = 0;
= 0;
/* Fixup SLB round-robin so next segment (kernel) goes in segment 0 */ /* Fixup SLB round-robin so next segment (kernel) goes in segment 0 */
paca[lcpu].xStab_data.next_round_robin = 0; paca[lcpu].xStab_data.next_round_robin = 0;
...@@ -817,7 +816,7 @@ static void __init smp_create_idle(unsigned int cpu) ...@@ -817,7 +816,7 @@ static void __init smp_create_idle(unsigned int cpu)
init_idle(p, cpu); init_idle(p, cpu);
unhash_process(p); unhash_process(p);
paca[cpu].xCurrent = (u64)p; paca[cpu].xCurrent = p;
current_set[cpu] = p->thread_info; current_set[cpu] = p->thread_info;
} }
...@@ -869,7 +868,7 @@ void __devinit smp_prepare_boot_cpu(void) ...@@ -869,7 +868,7 @@ void __devinit smp_prepare_boot_cpu(void)
/* cpu_possible is set up in prom.c */ /* cpu_possible is set up in prom.c */
cpu_set(boot_cpuid, cpu_online_map); cpu_set(boot_cpuid, cpu_online_map);
paca[boot_cpuid].xCurrent = (u64)current; paca[boot_cpuid].xCurrent = current;
current_set[boot_cpuid] = current->thread_info; current_set[boot_cpuid] = current->thread_info;
} }
......
...@@ -466,6 +466,18 @@ SingleStepException(struct pt_regs *regs) ...@@ -466,6 +466,18 @@ SingleStepException(struct pt_regs *regs)
_exception(SIGTRAP, &info, regs); _exception(SIGTRAP, &info, regs);
} }
/*
* After we have successfully emulated an instruction, we have to
* check if the instruction was being single-stepped, and if so,
* pretend we got a single-step exception. This was pointed out
* by Kumar Gala. -- paulus
*/
static inline void emulate_single_step(struct pt_regs *regs)
{
if (regs->msr & MSR_SE)
SingleStepException(regs);
}
static void dummy_perf(struct pt_regs *regs) static void dummy_perf(struct pt_regs *regs)
{ {
} }
...@@ -487,10 +499,8 @@ AlignmentException(struct pt_regs *regs) ...@@ -487,10 +499,8 @@ AlignmentException(struct pt_regs *regs)
fixed = fix_alignment(regs); fixed = fix_alignment(regs);
if (fixed == 1) { if (fixed == 1) {
if (!user_mode(regs))
PPCDBG(PPCDBG_ALIGNFIXUP, "fix alignment at %lx\n",
regs->nip);
regs->nip += 4; /* skip over emulated instruction */ regs->nip += 4; /* skip over emulated instruction */
emulate_single_step(regs);
return; return;
} }
......
...@@ -190,6 +190,7 @@ static int tda10045h_fwinfo_count = sizeof(tda10045h_fwinfo) / sizeof(struct fwi ...@@ -190,6 +190,7 @@ static int tda10045h_fwinfo_count = sizeof(tda10045h_fwinfo) / sizeof(struct fwi
static struct fwinfo tda10046h_fwinfo[] = { {.file_size = 286720,.fw_offset = 0x3c4f9,.fw_size = 24479} }; static struct fwinfo tda10046h_fwinfo[] = { {.file_size = 286720,.fw_offset = 0x3c4f9,.fw_size = 24479} };
static int tda10046h_fwinfo_count = sizeof(tda10046h_fwinfo) / sizeof(struct fwinfo); static int tda10046h_fwinfo_count = sizeof(tda10046h_fwinfo) / sizeof(struct fwinfo);
static int errno;
static int tda1004x_write_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int data) static int tda1004x_write_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int data)
......
...@@ -287,6 +287,7 @@ struct net_device *__init mc32_probe(int unit) ...@@ -287,6 +287,7 @@ struct net_device *__init mc32_probe(int unit)
} }
} }
free_netdev(dev);
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
} }
......
...@@ -242,7 +242,7 @@ static void cleanup_card(struct net_device *dev) ...@@ -242,7 +242,7 @@ static void cleanup_card(struct net_device *dev)
{ {
#ifdef CONFIG_MCA #ifdef CONFIG_MCA
struct net_local *lp = netdev_priv(dev); struct net_local *lp = netdev_priv(dev);
if (lp->mca_slot) if (lp->mca_slot >= 0)
mca_mark_as_unused(lp->mca_slot); mca_mark_as_unused(lp->mca_slot);
#endif #endif
free_irq(dev->irq, NULL); free_irq(dev->irq, NULL);
...@@ -444,11 +444,11 @@ static int __init at1700_probe1(struct net_device *dev, int ioaddr) ...@@ -444,11 +444,11 @@ static int __init at1700_probe1(struct net_device *dev, int ioaddr)
break; break;
} }
if (i == 8) { if (i == 8) {
goto err_out; goto err_mca;
} }
} else { } else {
if (fmv18x_probe_list[inb(ioaddr + IOCONFIG) & 0x07] != ioaddr) if (fmv18x_probe_list[inb(ioaddr + IOCONFIG) & 0x07] != ioaddr)
goto err_out; goto err_mca;
irq = fmv_irqmap[(inb(ioaddr + IOCONFIG)>>6) & 0x03]; irq = fmv_irqmap[(inb(ioaddr + IOCONFIG)>>6) & 0x03];
} }
} }
...@@ -546,11 +546,16 @@ static int __init at1700_probe1(struct net_device *dev, int ioaddr) ...@@ -546,11 +546,16 @@ static int __init at1700_probe1(struct net_device *dev, int ioaddr)
if (ret) { if (ret) {
printk (" AT1700 at %#3x is unusable due to a conflict on" printk (" AT1700 at %#3x is unusable due to a conflict on"
"IRQ %d.\n", ioaddr, irq); "IRQ %d.\n", ioaddr, irq);
goto err_out; goto err_mca;
} }
return 0; return 0;
err_mca:
#ifdef CONFIG_MCA
if (slot >= 0)
mca_mark_as_unused(slot);
#endif
err_out: err_out:
#ifndef CONFIG_X86_PC9800 #ifndef CONFIG_X86_PC9800
release_region(ioaddr, AT1700_IO_EXTENT); release_region(ioaddr, AT1700_IO_EXTENT);
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
char e1000_driver_name[] = "e1000"; char e1000_driver_name[] = "e1000";
char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
char e1000_driver_version[] = "5.2.52-k2"; char e1000_driver_version[] = "5.2.52-k4";
char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation."; char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation.";
/* e1000_pci_tbl - PCI Device ID Table /* e1000_pci_tbl - PCI Device ID Table
...@@ -2143,6 +2143,7 @@ e1000_clean(struct net_device *netdev, int *budget) ...@@ -2143,6 +2143,7 @@ e1000_clean(struct net_device *netdev, int *budget)
if(work_done < work_to_do || !netif_running(netdev)) { if(work_done < work_to_do || !netif_running(netdev)) {
netif_rx_complete(netdev); netif_rx_complete(netdev);
e1000_irq_enable(adapter); e1000_irq_enable(adapter);
return 0;
} }
return (work_done >= work_to_do); return (work_done >= work_to_do);
......
...@@ -66,12 +66,15 @@ ...@@ -66,12 +66,15 @@
LK1.1.14 (Kryzsztof Halasa): LK1.1.14 (Kryzsztof Halasa):
* fix spurious bad initializations * fix spurious bad initializations
* pound phy a la SMSC's app note on the subject * pound phy a la SMSC's app note on the subject
AC1.1.14ac
* fix power up/down for ethtool that broke in 1.11
*/ */
#define DRV_NAME "epic100" #define DRV_NAME "epic100"
#define DRV_VERSION "1.11+LK1.1.14" #define DRV_VERSION "1.11+LK1.1.14+AC1.1.14"
#define DRV_RELDATE "Aug 4, 2002" #define DRV_RELDATE "June 2, 2004"
/* The user-configurable values. /* The user-configurable values.
These may be modified when a driver module is loaded.*/ These may be modified when a driver module is loaded.*/
...@@ -1424,6 +1427,27 @@ static void netdev_set_msglevel(struct net_device *dev, u32 value) ...@@ -1424,6 +1427,27 @@ static void netdev_set_msglevel(struct net_device *dev, u32 value)
debug = value; debug = value;
} }
static int ethtool_begin(struct net_device *dev)
{
unsigned long ioaddr = dev->base_addr;
/* power-up, if interface is down */
if (! netif_running(dev)) {
outl(0x0200, ioaddr + GENCTL);
outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
}
return 0;
}
static void ethtool_complete(struct net_device *dev)
{
unsigned long ioaddr = dev->base_addr;
/* power-down, if interface is down */
if (! netif_running(dev)) {
outl(0x0008, ioaddr + GENCTL);
outl((inl(ioaddr + NVCTL) & ~0x483C) | 0x0000, ioaddr + NVCTL);
}
}
static struct ethtool_ops netdev_ethtool_ops = { static struct ethtool_ops netdev_ethtool_ops = {
.get_drvinfo = netdev_get_drvinfo, .get_drvinfo = netdev_get_drvinfo,
.get_settings = netdev_get_settings, .get_settings = netdev_get_settings,
...@@ -1434,6 +1458,8 @@ static struct ethtool_ops netdev_ethtool_ops = { ...@@ -1434,6 +1458,8 @@ static struct ethtool_ops netdev_ethtool_ops = {
.set_msglevel = netdev_set_msglevel, .set_msglevel = netdev_set_msglevel,
.get_sg = ethtool_op_get_sg, .get_sg = ethtool_op_get_sg,
.get_tx_csum = ethtool_op_get_tx_csum, .get_tx_csum = ethtool_op_get_tx_csum,
.begin = ethtool_begin,
.complete = ethtool_complete
}; };
static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
......
...@@ -133,6 +133,10 @@ int tulip_poll(struct net_device *dev, int *budget) ...@@ -133,6 +133,10 @@ int tulip_poll(struct net_device *dev, int *budget)
tp->rx_ring[entry].status); tp->rx_ring[entry].status);
do { do {
if (inl(dev->base_addr + CSR5) == 0xffffffff) {
printk(KERN_DEBUG " In tulip_poll(), hardware disappeared.\n");
break;
}
/* Acknowledge current RX interrupt sources. */ /* Acknowledge current RX interrupt sources. */
outl((RxIntr | RxNoBuf), dev->base_addr + CSR5); outl((RxIntr | RxNoBuf), dev->base_addr + CSR5);
......
...@@ -8,13 +8,11 @@ ...@@ -8,13 +8,11 @@
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version * as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*
* Use r13 for current since the ppc64 ABI reserves it - Anton
*/ */
#include <asm/thread_info.h> #include <asm/thread_info.h>
#define get_current() ((struct task_struct *)(get_paca()->xCurrent)) #define get_current() (get_paca()->xCurrent)
#define current get_current() #define current get_current()
#endif /* !(_PPC64_CURRENT_H) */ #endif /* !(_PPC64_CURRENT_H) */
...@@ -37,6 +37,8 @@ extern struct paca_struct paca[]; ...@@ -37,6 +37,8 @@ extern struct paca_struct paca[];
register struct paca_struct *local_paca asm("r13"); register struct paca_struct *local_paca asm("r13");
#define get_paca() local_paca #define get_paca() local_paca
struct task_struct;
/*============================================================================ /*============================================================================
* Name_______: paca * Name_______: paca
* *
...@@ -59,7 +61,7 @@ struct paca_struct { ...@@ -59,7 +61,7 @@ struct paca_struct {
*/ */
struct ItLpPaca *xLpPacaPtr; /* Pointer to LpPaca for PLIC 0x00 */ struct ItLpPaca *xLpPacaPtr; /* Pointer to LpPaca for PLIC 0x00 */
struct ItLpRegSave *xLpRegSavePtr; /* Pointer to LpRegSave for PLIC 0x08 */ struct ItLpRegSave *xLpRegSavePtr; /* Pointer to LpRegSave for PLIC 0x08 */
u64 xCurrent; /* Pointer to current 0x10 */ struct task_struct *xCurrent; /* Pointer to current 0x10 */
/* Note: the spinlock functions in arch/ppc64/lib/locks.c load lock_token and /* Note: the spinlock functions in arch/ppc64/lib/locks.c load lock_token and
xPacaIndex with a single lwz instruction, using the constant offset 24. xPacaIndex with a single lwz instruction, using the constant offset 24.
If you move either field, fix the spinlocks and rwlocks. */ If you move either field, fix the spinlocks and rwlocks. */
......
...@@ -351,6 +351,8 @@ struct ethtool_ops { ...@@ -351,6 +351,8 @@ struct ethtool_ops {
int (*phys_id)(struct net_device *, u32); int (*phys_id)(struct net_device *, u32);
int (*get_stats_count)(struct net_device *); int (*get_stats_count)(struct net_device *);
void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
int (*begin)(struct net_device *);
void (*complete)(struct net_device *);
}; };
/* CMDs currently supported */ /* CMDs currently supported */
......
...@@ -17,5 +17,4 @@ ...@@ -17,5 +17,4 @@
#define NF_ARP_FORWARD 2 #define NF_ARP_FORWARD 2
#define NF_ARP_NUMHOOKS 3 #define NF_ARP_NUMHOOKS 3
static DECLARE_MUTEX(arpt_mutex);
#endif /* __LINUX_ARP_NETFILTER_H */ #endif /* __LINUX_ARP_NETFILTER_H */
...@@ -183,6 +183,9 @@ struct tcp_info ...@@ -183,6 +183,9 @@ struct tcp_info
__u32 tcpi_snd_cwnd; __u32 tcpi_snd_cwnd;
__u32 tcpi_advmss; __u32 tcpi_advmss;
__u32 tcpi_reordering; __u32 tcpi_reordering;
__u32 tcpi_rcv_rtt;
__u32 tcpi_rcv_space;
}; };
#ifdef __KERNEL__ #ifdef __KERNEL__
...@@ -351,11 +354,11 @@ struct tcp_opt { ...@@ -351,11 +354,11 @@ struct tcp_opt {
__u8 urg_mode; /* In urgent mode */ __u8 urg_mode; /* In urgent mode */
__u32 snd_up; /* Urgent pointer */ __u32 snd_up; /* Urgent pointer */
/* The syn_wait_lock is necessary only to avoid tcp_get_info having /* The syn_wait_lock is necessary only to avoid proc interface having
* to grab the main lock sock while browsing the listening hash * to grab the main lock sock while browsing the listening hash
* (otherwise it's deadlock prone). * (otherwise it's deadlock prone).
* This lock is acquired in read mode only from tcp_get_info() and * This lock is acquired in read mode only from listening_get_next()
* it's acquired in write mode _only_ from code that is actively * and it's acquired in write mode _only_ from code that is actively
* changing the syn_wait_queue. All readers that are holding * changing the syn_wait_queue. All readers that are holding
* the master sock lock don't need to grab this lock in read mode * the master sock lock don't need to grab this lock in read mode
* too as the syn_wait_queue writes are always protected from * too as the syn_wait_queue writes are always protected from
......
...@@ -29,15 +29,15 @@ void rwsemtrace(struct rw_semaphore *sem, const char *str) ...@@ -29,15 +29,15 @@ void rwsemtrace(struct rw_semaphore *sem, const char *str)
/* /*
* handle the lock being released whilst there are processes blocked on it that can now run * handle the lock being released whilst there are processes blocked on it that can now run
* - if we come here, then: * - if we come here from up_xxxx(), then:
* - the 'active part' of the count (&0x0000ffff) reached zero but has been re-incremented * - the 'active part' of the count (&0x0000ffff) had reached zero (but may have changed)
* - the 'waiting part' of the count (&0xffff0000) is negative (and will still be so) * - the 'waiting part' of the count (&0xffff0000) is negative (and will still be so)
* - there must be someone on the queue * - there must be someone on the queue
* - the spinlock must be held by the caller * - the spinlock must be held by the caller
* - woken process blocks are discarded from the list after having task zeroed * - woken process blocks are discarded from the list after having task zeroed
* - writers are only woken if wakewrite is non-zero * - writers are only woken if downgrading is false
*/ */
static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int wakewrite) static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int downgrading)
{ {
struct rwsem_waiter *waiter; struct rwsem_waiter *waiter;
struct task_struct *tsk; struct task_struct *tsk;
...@@ -46,10 +46,12 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int ...@@ -46,10 +46,12 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int
rwsemtrace(sem,"Entering __rwsem_do_wake"); rwsemtrace(sem,"Entering __rwsem_do_wake");
if (!wakewrite) if (downgrading)
goto dont_wake_writers; goto dont_wake_writers;
/* only wake someone up if we can transition the active part of the count from 0 -> 1 */ /* if we came through an up_xxxx() call, we only only wake someone up
* if we can transition the active part of the count from 0 -> 1
*/
try_again: try_again:
oldcount = rwsem_atomic_update(RWSEM_ACTIVE_BIAS,sem) - RWSEM_ACTIVE_BIAS; oldcount = rwsem_atomic_update(RWSEM_ACTIVE_BIAS,sem) - RWSEM_ACTIVE_BIAS;
if (oldcount & RWSEM_ACTIVE_MASK) if (oldcount & RWSEM_ACTIVE_MASK)
...@@ -78,9 +80,10 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int ...@@ -78,9 +80,10 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int
if (waiter->flags & RWSEM_WAITING_FOR_WRITE) if (waiter->flags & RWSEM_WAITING_FOR_WRITE)
goto out; goto out;
/* grant an infinite number of read locks to the readers at the front of the queue /* grant an infinite number of read locks to the readers at the front
* - note we increment the 'active part' of the count by the number of readers (less one * of the queue
* for the activity decrement we've already done) before waking any processes up * - note we increment the 'active part' of the count by the number of
* readers before waking any processes up
*/ */
readers_only: readers_only:
woken = 0; woken = 0;
...@@ -95,8 +98,10 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int ...@@ -95,8 +98,10 @@ static inline struct rw_semaphore *__rwsem_do_wake(struct rw_semaphore *sem, int
} while (waiter->flags & RWSEM_WAITING_FOR_READ); } while (waiter->flags & RWSEM_WAITING_FOR_READ);
loop = woken; loop = woken;
woken *= RWSEM_ACTIVE_BIAS-RWSEM_WAITING_BIAS; woken *= RWSEM_ACTIVE_BIAS - RWSEM_WAITING_BIAS;
woken -= RWSEM_ACTIVE_BIAS; if (!downgrading)
woken -= RWSEM_ACTIVE_BIAS; /* we'd already done one increment
* earlier */
rwsem_atomic_add(woken,sem); rwsem_atomic_add(woken,sem);
next = sem->wait_list.next; next = sem->wait_list.next;
...@@ -150,7 +155,7 @@ static inline struct rw_semaphore *rwsem_down_failed_common(struct rw_semaphore ...@@ -150,7 +155,7 @@ static inline struct rw_semaphore *rwsem_down_failed_common(struct rw_semaphore
* - it might even be this process, since the waker takes a more active part * - it might even be this process, since the waker takes a more active part
*/ */
if (!(count & RWSEM_ACTIVE_MASK)) if (!(count & RWSEM_ACTIVE_MASK))
sem = __rwsem_do_wake(sem,1); sem = __rwsem_do_wake(sem, 0);
spin_unlock(&sem->wait_lock); spin_unlock(&sem->wait_lock);
...@@ -201,7 +206,7 @@ struct rw_semaphore fastcall __sched *rwsem_down_write_failed(struct rw_semaphor ...@@ -201,7 +206,7 @@ struct rw_semaphore fastcall __sched *rwsem_down_write_failed(struct rw_semaphor
/* /*
* handle waking up a waiter on the semaphore * handle waking up a waiter on the semaphore
* - up_read has decremented the active part of the count if we come here * - up_read/up_write has decremented the active part of the count if we come here
*/ */
struct rw_semaphore fastcall *rwsem_wake(struct rw_semaphore *sem) struct rw_semaphore fastcall *rwsem_wake(struct rw_semaphore *sem)
{ {
...@@ -211,7 +216,7 @@ struct rw_semaphore fastcall *rwsem_wake(struct rw_semaphore *sem) ...@@ -211,7 +216,7 @@ struct rw_semaphore fastcall *rwsem_wake(struct rw_semaphore *sem)
/* do nothing if list empty */ /* do nothing if list empty */
if (!list_empty(&sem->wait_list)) if (!list_empty(&sem->wait_list))
sem = __rwsem_do_wake(sem,1); sem = __rwsem_do_wake(sem, 0);
spin_unlock(&sem->wait_lock); spin_unlock(&sem->wait_lock);
...@@ -233,7 +238,7 @@ struct rw_semaphore fastcall *rwsem_downgrade_wake(struct rw_semaphore *sem) ...@@ -233,7 +238,7 @@ struct rw_semaphore fastcall *rwsem_downgrade_wake(struct rw_semaphore *sem)
/* do nothing if list empty */ /* do nothing if list empty */
if (!list_empty(&sem->wait_list)) if (!list_empty(&sem->wait_list))
sem = __rwsem_do_wake(sem,0); sem = __rwsem_do_wake(sem, 1);
spin_unlock(&sem->wait_lock); spin_unlock(&sem->wait_lock);
......
...@@ -652,6 +652,7 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -652,6 +652,7 @@ int dev_ethtool(struct ifreq *ifr)
struct net_device *dev = __dev_get_by_name(ifr->ifr_name); struct net_device *dev = __dev_get_by_name(ifr->ifr_name);
void __user *useraddr = ifr->ifr_data; void __user *useraddr = ifr->ifr_data;
u32 ethcmd; u32 ethcmd;
int rc;
/* /*
* XXX: This can be pushed down into the ethtool_* handlers that * XXX: This can be pushed down into the ethtool_* handlers that
...@@ -669,70 +670,109 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -669,70 +670,109 @@ int dev_ethtool(struct ifreq *ifr)
if (copy_from_user(&ethcmd, useraddr, sizeof (ethcmd))) if (copy_from_user(&ethcmd, useraddr, sizeof (ethcmd)))
return -EFAULT; return -EFAULT;
if(dev->ethtool_ops->begin)
if ((rc = dev->ethtool_ops->begin(dev)) < 0)
return rc;
switch (ethcmd) { switch (ethcmd) {
case ETHTOOL_GSET: case ETHTOOL_GSET:
return ethtool_get_settings(dev, useraddr); rc = ethtool_get_settings(dev, useraddr);
break;
case ETHTOOL_SSET: case ETHTOOL_SSET:
return ethtool_set_settings(dev, useraddr); rc = ethtool_set_settings(dev, useraddr);
break;
case ETHTOOL_GDRVINFO: case ETHTOOL_GDRVINFO:
return ethtool_get_drvinfo(dev, useraddr); rc = ethtool_get_drvinfo(dev, useraddr);
break;
case ETHTOOL_GREGS: case ETHTOOL_GREGS:
return ethtool_get_regs(dev, useraddr); rc = ethtool_get_regs(dev, useraddr);
break;
case ETHTOOL_GWOL: case ETHTOOL_GWOL:
return ethtool_get_wol(dev, useraddr); rc = ethtool_get_wol(dev, useraddr);
break;
case ETHTOOL_SWOL: case ETHTOOL_SWOL:
return ethtool_set_wol(dev, useraddr); rc = ethtool_set_wol(dev, useraddr);
break;
case ETHTOOL_GMSGLVL: case ETHTOOL_GMSGLVL:
return ethtool_get_msglevel(dev, useraddr); rc = ethtool_get_msglevel(dev, useraddr);
break;
case ETHTOOL_SMSGLVL: case ETHTOOL_SMSGLVL:
return ethtool_set_msglevel(dev, useraddr); rc = ethtool_set_msglevel(dev, useraddr);
break;
case ETHTOOL_NWAY_RST: case ETHTOOL_NWAY_RST:
return ethtool_nway_reset(dev); rc = ethtool_nway_reset(dev);
break;
case ETHTOOL_GLINK: case ETHTOOL_GLINK:
return ethtool_get_link(dev, useraddr); rc = ethtool_get_link(dev, useraddr);
break;
case ETHTOOL_GEEPROM: case ETHTOOL_GEEPROM:
return ethtool_get_eeprom(dev, useraddr); rc = ethtool_get_eeprom(dev, useraddr);
break;
case ETHTOOL_SEEPROM: case ETHTOOL_SEEPROM:
return ethtool_set_eeprom(dev, useraddr); rc = ethtool_set_eeprom(dev, useraddr);
break;
case ETHTOOL_GCOALESCE: case ETHTOOL_GCOALESCE:
return ethtool_get_coalesce(dev, useraddr); rc = ethtool_get_coalesce(dev, useraddr);
break;
case ETHTOOL_SCOALESCE: case ETHTOOL_SCOALESCE:
return ethtool_set_coalesce(dev, useraddr); rc = ethtool_set_coalesce(dev, useraddr);
break;
case ETHTOOL_GRINGPARAM: case ETHTOOL_GRINGPARAM:
return ethtool_get_ringparam(dev, useraddr); rc = ethtool_get_ringparam(dev, useraddr);
break;
case ETHTOOL_SRINGPARAM: case ETHTOOL_SRINGPARAM:
return ethtool_set_ringparam(dev, useraddr); rc = ethtool_set_ringparam(dev, useraddr);
break;
case ETHTOOL_GPAUSEPARAM: case ETHTOOL_GPAUSEPARAM:
return ethtool_get_pauseparam(dev, useraddr); rc = ethtool_get_pauseparam(dev, useraddr);
break;
case ETHTOOL_SPAUSEPARAM: case ETHTOOL_SPAUSEPARAM:
return ethtool_set_pauseparam(dev, useraddr); rc = ethtool_set_pauseparam(dev, useraddr);
break;
case ETHTOOL_GRXCSUM: case ETHTOOL_GRXCSUM:
return ethtool_get_rx_csum(dev, useraddr); rc = ethtool_get_rx_csum(dev, useraddr);
break;
case ETHTOOL_SRXCSUM: case ETHTOOL_SRXCSUM:
return ethtool_set_rx_csum(dev, useraddr); rc = ethtool_set_rx_csum(dev, useraddr);
break;
case ETHTOOL_GTXCSUM: case ETHTOOL_GTXCSUM:
return ethtool_get_tx_csum(dev, useraddr); rc = ethtool_get_tx_csum(dev, useraddr);
break;
case ETHTOOL_STXCSUM: case ETHTOOL_STXCSUM:
return ethtool_set_tx_csum(dev, useraddr); rc = ethtool_set_tx_csum(dev, useraddr);
break;
case ETHTOOL_GSG: case ETHTOOL_GSG:
return ethtool_get_sg(dev, useraddr); rc = ethtool_get_sg(dev, useraddr);
break;
case ETHTOOL_SSG: case ETHTOOL_SSG:
return ethtool_set_sg(dev, useraddr); rc = ethtool_set_sg(dev, useraddr);
break;
case ETHTOOL_GTSO: case ETHTOOL_GTSO:
return ethtool_get_tso(dev, useraddr); rc = ethtool_get_tso(dev, useraddr);
break;
case ETHTOOL_STSO: case ETHTOOL_STSO:
return ethtool_set_tso(dev, useraddr); rc = ethtool_set_tso(dev, useraddr);
break;
case ETHTOOL_TEST: case ETHTOOL_TEST:
return ethtool_self_test(dev, useraddr); rc = ethtool_self_test(dev, useraddr);
break;
case ETHTOOL_GSTRINGS: case ETHTOOL_GSTRINGS:
return ethtool_get_strings(dev, useraddr); rc = ethtool_get_strings(dev, useraddr);
break;
case ETHTOOL_PHYS_ID: case ETHTOOL_PHYS_ID:
return ethtool_phys_id(dev, useraddr); rc = ethtool_phys_id(dev, useraddr);
break;
case ETHTOOL_GSTATS: case ETHTOOL_GSTATS:
return ethtool_get_stats(dev, useraddr); rc = ethtool_get_stats(dev, useraddr);
break;
default: default:
return -EOPNOTSUPP; rc = -EOPNOTSUPP;
} }
if(dev->ethtool_ops->complete)
dev->ethtool_ops->complete(dev);
return rc;
ioctl: ioctl:
if (dev->do_ioctl) if (dev->do_ioctl)
......
...@@ -62,6 +62,8 @@ do { \ ...@@ -62,6 +62,8 @@ do { \
#include <linux/netfilter_ipv4/lockhelp.h> #include <linux/netfilter_ipv4/lockhelp.h>
#include <linux/netfilter_ipv4/listhelp.h> #include <linux/netfilter_ipv4/listhelp.h>
static DECLARE_MUTEX(arpt_mutex);
struct arpt_table_info { struct arpt_table_info {
unsigned int size; unsigned int size;
unsigned int number; unsigned int number;
......
...@@ -91,6 +91,9 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) ...@@ -91,6 +91,9 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info)
info->tcpi_snd_cwnd = tp->snd_cwnd; info->tcpi_snd_cwnd = tp->snd_cwnd;
info->tcpi_advmss = tp->advmss; info->tcpi_advmss = tp->advmss;
info->tcpi_reordering = tp->reordering; info->tcpi_reordering = tp->reordering;
info->tcpi_rcv_rtt = ((1000000*tp->rcv_rtt_est.rtt)/HZ)>>3;
info->tcpi_rcv_space = tp->rcvq_space.space;
} }
static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment