From 093037e9ee9c23cf501635fbc89b02d633551a9c Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 23 Nov 2007 15:24:07 -0500 Subject: [PATCH] Linux 2.2.21pre3 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit o Fix a case where a non blocking tty write could (Peter Benie) get stuck o Fix non blocking midi close on es1370, es1371 (Alan Cox) sonicvibes right this time o Fix menu/xconfig warnings (René Scharfe) o Fix non blocking midi close on cmpci, cs4281, (Alan Cox) esssolo, trident. o Add eepro100VE ident (Hanno Boeck) o Fix DRM oops case (Herbert Xu) o Fix an oops causing datagram AF_UNIX race (Paul Menage) o Support newer geodes using new CPUID properly (Hiroshi Miura) o Fix up RTC build for non pmac ppc boxes (Tom Rini) o Fix MCE address reporting (Pete Wyckoff) o Vibra16 docs update (Neale Banks) o Eicon include file fix (Herbert Xu) o ISDN loop and header fixes (Kai Germaschewski) o Fix eepro100 out of memory during init path (Neale Banks) o Fix BSD partition table handling breakage (Andries Brouwer) o Add WD XD signature to xd driver (Paul) o 3Ware driver update (Adam Radford) o S/390 debugging updates (Carsten Otte) o S/390 DASD updates (Carsten Otte) o S/390 CIO updates (Carsten Otte) o Update USB serial, belkin, digi_acceleport, (Greg Kroah-Hartmann) empeg, ftdsio, edgeport, keyspan, mctu232, omninet, prolific, visor o Cyberjack USB driver (Matthias Bruestle) o USB ir dongle driver (Greg Kroah-Hartmann) o Support very large FAT file systems (Vijay Kumar) o Backport 2.4 modversions build fix (Mikael Pettersson) o Backport 2.4 es1371 init for new revs (Julian Anastasov) o 3c507 driver fixes (Mark Mackenzie) o ext2 obscure group descriptor corruption fix (Daniel Phillips, Al Viro) o Correct a problem where rpciod didnt give up (Andreas Haumer) its current dir --- Documentation/sound/VIBRA16 | 10 +- Makefile | 7 +- Rules.make | 25 +- arch/i386/kernel/bluesmoke.c | 2 +- arch/i386/kernel/setup.c | 20 +- arch/s390/kernel/debug.c | 80 ++ arch/s390/kernel/s390io.c | 17 +- arch/s390/tools/dasdfmt/dasdfmt.8 | 5 + arch/s390/tools/dasdfmt/dasdfmt.c | 21 +- drivers/Makefile | 2 +- drivers/block/genhd.c | 64 +- drivers/block/xd.c | 1 + drivers/char/drm/ioctl.c | 2 +- drivers/char/hfmodem/tables.h | 90 ++ drivers/char/tty_io.c | 14 +- drivers/isdn/eicon/sys.h | 2 + drivers/isdn/isdnloop/isdnloop.c | 6 +- drivers/macintosh/Makefile | 2 +- drivers/net/3c507.c | 30 +- drivers/net/eepro100.c | 14 + drivers/s390/block/dasd.c | 180 ++-- drivers/s390/block/dasd_diag.c | 36 +- drivers/s390/block/dasd_eckd.c | 82 +- drivers/scsi/3w-xxxx.c | 341 +++++-- drivers/scsi/3w-xxxx.h | 16 +- drivers/sound/cmpci.c | 6 +- drivers/sound/cs4281.c | 4 +- drivers/sound/es1370.c | 2 - drivers/sound/es1371.c | 4 +- drivers/sound/esssolo1.c | 4 +- drivers/sound/sonicvibes.c | 2 - drivers/sound/trident.c | 4 +- drivers/usb/serial/Config.in | 22 +- drivers/usb/serial/Makefile | 4 + drivers/usb/serial/belkin_sa.c | 87 +- drivers/usb/serial/belkin_sa.h | 3 + drivers/usb/serial/cyberjack.c | 522 ++++++++++ drivers/usb/serial/digi_acceleport.c | 96 +- drivers/usb/serial/empeg.c | 63 +- drivers/usb/serial/ftdi_sio.c | 266 ++--- drivers/usb/serial/io_edgeport.c | 280 +++--- drivers/usb/serial/ir-usb.c | 554 +++++++++++ drivers/usb/serial/keyspan.c | 366 ++++--- drivers/usb/serial/keyspan.h | 202 +++- drivers/usb/serial/keyspan_pda.c | 189 +++- drivers/usb/serial/keyspan_usa18x_fw.h | 811 +++++++-------- drivers/usb/serial/keyspan_usa19_fw.h | 539 +++++----- drivers/usb/serial/keyspan_usa19w_fw.h | 706 ++++++++------ drivers/usb/serial/keyspan_usa26msg.h | 34 +- drivers/usb/serial/keyspan_usa28_fw.h | 883 +++++++++-------- drivers/usb/serial/keyspan_usa28msg.h | 3 +- drivers/usb/serial/keyspan_usa28x_fw.h | 808 +++++++-------- drivers/usb/serial/keyspan_usa28xa_fw.h | 446 +++++++++ drivers/usb/serial/keyspan_usa28xb_fw.h | 447 +++++++++ drivers/usb/serial/keyspan_usa49msg.h | 15 +- drivers/usb/serial/keyspan_usa49w_fw.h | 877 ++++++++--------- drivers/usb/serial/mct_u232.c | 107 +- drivers/usb/serial/mct_u232.h | 24 +- drivers/usb/serial/omninet.c | 57 +- drivers/usb/serial/pl2303.c | 825 ++++++++++++++++ drivers/usb/serial/pl2303.h | 18 + drivers/usb/serial/usb-serial.h | 35 +- drivers/usb/serial/usbserial.c | 165 +++- drivers/usb/serial/visor.c | 273 +++++- drivers/usb/serial/visor.h | 19 +- drivers/usb/serial/xircom_pgs.S | 1192 +++++++++++++++++++++++ drivers/usb/serial/xircom_pgs_fw.h | 103 ++ fs/ext2/ialloc.c | 22 +- fs/fat/dir.c | 11 +- fs/fat/inode.c | 13 +- fs/fat/misc.c | 16 +- fs/msdos/namei.c | 27 +- fs/vfat/namei.c | 10 +- include/asm-i386/processor.h | 1 + include/asm-s390/dasd.h | 2 + include/asm-s390/debug.h | 1 + include/asm-s390/spinlock.h | 4 +- include/asm-s390/unistd.h | 2 + include/linux/isdn.h | 44 +- include/linux/msdos_fs.h | 16 +- include/linux/msdos_fs_i.h | 2 +- net/sunrpc/sched.c | 1 + net/unix/af_unix.c | 3 + scripts/tkgen.c | 8 +- 84 files changed, 8952 insertions(+), 3367 deletions(-) create mode 100644 drivers/char/hfmodem/tables.h create mode 100644 drivers/usb/serial/cyberjack.c create mode 100644 drivers/usb/serial/ir-usb.c create mode 100644 drivers/usb/serial/keyspan_usa28xa_fw.h create mode 100644 drivers/usb/serial/keyspan_usa28xb_fw.h create mode 100644 drivers/usb/serial/pl2303.c create mode 100644 drivers/usb/serial/pl2303.h create mode 100644 drivers/usb/serial/xircom_pgs.S create mode 100644 drivers/usb/serial/xircom_pgs_fw.h diff --git a/Documentation/sound/VIBRA16 b/Documentation/sound/VIBRA16 index 0a0aff9d7531..9a2a992a34f1 100644 --- a/Documentation/sound/VIBRA16 +++ b/Documentation/sound/VIBRA16 @@ -15,6 +15,8 @@ is neither still exploited by the sb driver found in the linux kernel (tried it with a 2.2.2-ac7), nor in the commercial OSS package (it reports it as half-duplex soundcard). Oh, I almost forgot, the RedHat sndconfig failed detecting it ;) + Kernel 2.2.21pre2 also works with this card. /proc/sound +reports "OSS/Free:3.8s2++-971130" and "Sound Blaster 16 (4.13) (DUPLEX)" So, the big problem still remains, because the sb module wants a 8-bit and a 16-bit dma, which we could not allocate for vibra... it supports only two 8-bit dma channels, the second one will be passed to the module @@ -59,6 +61,8 @@ will happen with almost all soundcards... you may want to: modprobe sb io=0x220 irq=5 dma=1 dma16=3 +# do you need MIDI? +modprobe opl3 io=0x388 Or, take the hard way: @@ -67,14 +71,18 @@ insmod sound insmod uart401 insmod sb io=0x220 irq=5 dma=1 dma16=3 # do you need MIDI? -insmod opl3=0x388 +insmod opl3 io=0x388 Just in case, the kernel sound support should be: CONFIG_SOUND=m CONFIG_SOUND_OSS=m CONFIG_SOUND_SB=m +# do you need MIDI? YM3812 gets you opl3.o... +CONFIG_SOUND_YM3812=m Enjoy your new noisy Linux box! ;) +Minor corrections and updates + Neale Banks Mon, 28 Jan 2002 15:06:35 +1100 diff --git a/Makefile b/Makefile index 773abb1afbc8..1ca77f8b741f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 2 SUBLEVEL = 21 -EXTRAVERSION = pre2 +EXTRAVERSION = pre3 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) @@ -170,7 +170,7 @@ ifeq ($(CONFIG_NET_FC),y) DRIVERS := $(DRIVERS) drivers/net/fc/fc.a endif -ifdef CONFIG_POWERMAC +ifdef CONFIG_PPC DRIVERS := $(DRIVERS) drivers/macintosh/macintosh.o endif @@ -445,6 +445,9 @@ dep-files: scripts/mkdep archdep include/linux/version.h new-genksyms # set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i fastdep ;done # let this be made through the fastdep rule in Rules.make $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)" +ifdef CONFIG_MODVERSIONS + $(MAKE) update-modverfile +endif MODVERFILE := diff --git a/Rules.make b/Rules.make index 553f8034654b..edc0ebc4d40b 100644 --- a/Rules.make +++ b/Rules.make @@ -230,8 +230,16 @@ $(MODINCL)/%.ver: %.c $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h -$(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)) - @echo updating $(TOPDIR)/include/linux/modversions.h +# updates .ver files but not modversions.h +fastdep: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)) + +# updates .ver files and modversions.h like before (is this needed?) +dep: fastdep update-modverfile + +endif # SYMTAB_OBJS + +# update modversions.h, but only if it would change +update-modverfile: @(echo "#ifndef _LINUX_MODVERSIONS_H";\ echo "#define _LINUX_MODVERSIONS_H"; \ echo "#include "; \ @@ -240,11 +248,14 @@ $(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o= if [ -f $$f ]; then echo "#include "; fi; \ done; \ echo "#endif"; \ - ) > $@ - -dep fastdep: $(TOPDIR)/include/linux/modversions.h - -endif # SYMTAB_OBJS + ) > $(TOPDIR)/include/linux/modversions.h.tmp + @if [ -r $(TOPDIR)/include/linux/modversions.h ] && cmp -s $(TOPDIR)/include/linux/modversions.h $(TOPDIR)/include/linux/modversions.h.tmp; then \ + echo $(TOPDIR)/include/linux/modversions.h was not updated; \ + rm -f $(TOPDIR)/include/linux/modversions.h.tmp; \ + else \ + echo $(TOPDIR)/include/linux/modversions.h was updated; \ + mv -f $(TOPDIR)/include/linux/modversions.h.tmp $(TOPDIR)/include/linux/modversions.h; \ + fi $(M_OBJS): $(TOPDIR)/include/linux/modversions.h ifdef MAKING_MODULES diff --git a/arch/i386/kernel/bluesmoke.c b/arch/i386/kernel/bluesmoke.c index 6b5b2fe145e1..23449005daff 100644 --- a/arch/i386/kernel/bluesmoke.c +++ b/arch/i386/kernel/bluesmoke.c @@ -45,7 +45,7 @@ static void intel_machine_check(struct pt_regs * regs, long error_code) { rdmsr(0x402+i*4, alow, ahigh); printk(" at %08x%08x", - high, low); + ahigh, alow); } printk("\n"); /* Clear it */ diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 3a9be3b0bf1d..b11320132a5a 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c @@ -727,7 +727,7 @@ static int __init init_amd(struct cpuinfo_x86 *c) /* - * Read Cyrix DEVID registers (DIR) to get more detailed info. about the CPU + * Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU */ static inline void do_cyrix_devid(unsigned char *dir0, unsigned char *dir1) { @@ -763,7 +763,7 @@ static inline void do_cyrix_devid(unsigned char *dir0, unsigned char *dir1) /* * Cx86_dir0_msb is a HACK needed by check_cx686_cpuid/slop in bugs.h in - * order to identify the Cyrix CPU model after we're out of setup.c + * order to identify the NSC/Cyrix CPU model after we're out of setup.c */ unsigned char Cx86_dir0_msb __initdata = 0; @@ -924,7 +924,7 @@ static void __init init_transmeta(struct cpuinfo_x86 *c) unsigned int cpu_rev, cpu_freq, cpu_flags; char cpu_info[65]; - get_model_name(c); /* Same as AMD/Cyrix */ + get_model_name(c); /* Same as AMD/NSC/Cyrix */ display_cacheinfo(c); /* Print CMS and CPU revision */ @@ -1016,6 +1016,8 @@ static void __init get_cpu_vendor(struct cpuinfo_x86 *c) c->x86_vendor = X86_VENDOR_AMD; else if (!strcmp(v, "CyrixInstead")) c->x86_vendor = X86_VENDOR_CYRIX; + else if (!strcmp(v, "Geode by NSC")) + c->x86_vendor = X86_VENDOR_NSC; else if (!strcmp(v, "UMC UMC UMC ")) c->x86_vendor = X86_VENDOR_UMC; else if (!strcmp(v, "CentaurHauls")) @@ -1346,7 +1348,11 @@ __initfunc(void identify_cpu(struct cpuinfo_x86 *c)) case X86_VENDOR_CYRIX: init_cyrix(c); return; - + + case X86_VENDOR_NSC: + init_cyrix(c); + return; + case X86_VENDOR_AMD: init_amd(c); return; @@ -1393,7 +1399,7 @@ void __init dodgy_tsc(void) { get_cpu_vendor(&boot_cpu_data); - if(boot_cpu_data.x86_vendor != X86_VENDOR_CYRIX) + if(boot_cpu_data.x86_vendor != X86_VENDOR_CYRIX && boot_cpu_data.x86_vendor != X86_VENDOR_NSC) { return; } @@ -1402,7 +1408,9 @@ void __init dodgy_tsc(void) static char *cpu_vendor_names[] __initdata = { - "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" }; + "Intel", "Cyrix", "AMD", "UMC", "NexGen", + "Centaur", "Rise", "Transmeta" , "NSC" +}; void __init print_cpu_info(struct cpuinfo_x86 *c) diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c index 52524b757331..2710d5202775 100644 --- a/arch/s390/kernel/debug.c +++ b/arch/s390/kernel/debug.c @@ -83,6 +83,9 @@ static int debug_prolog_level_fn(debug_info_t * id, static int debug_input_level_fn(debug_info_t * id, struct debug_view *view, struct file *file, const char *user_buf, size_t user_buf_size, loff_t * offset); +static int debug_input_flush_fn(debug_info_t * id, struct debug_view *view, + struct file *file, const char *user_buf, + size_t user_buf_size, loff_t * offset); static int debug_hex_ascii_format_fn(debug_info_t * id, struct debug_view *view, char *out_buf, const char *in_buf); static int debug_raw_format_fn(debug_info_t * id, @@ -123,6 +126,15 @@ struct debug_view debug_level_view = { NULL }; +struct debug_view debug_flush_view = { + "flush", + NULL, + NULL, + NULL, + &debug_input_flush_fn, + NULL +}; + struct debug_view debug_sprintf_view = { "sprintf", NULL, @@ -664,6 +676,7 @@ debug_info_t *debug_register if(!rc) goto out; debug_register_view(rc, &debug_level_view); + debug_register_view(rc, &debug_flush_view); printk(KERN_INFO "debug: reserved %d areas of %d pages for debugging %s\n", nr_areas, 1 << page_order, rc->name); @@ -1029,6 +1042,73 @@ static int debug_input_level_fn(debug_info_t * id, struct debug_view *view, return rc; /* number of input characters */ } + +/* + * flushes debug areas + */ + +void debug_flush(debug_info_t* id, int area) +{ + unsigned long flags; + int i; + + if(!id) + return; + spin_lock_irqsave(&id->lock,flags); + if(area == DEBUG_FLUSH_ALL){ + id->active_area = 0; + memset(id->active_entry, 0, id->nr_areas * sizeof(int)); + for (i = 0; i < id->nr_areas; i++) + memset(id->areas[i], 0, PAGE_SIZE << id->page_order); + printk(KERN_INFO "debug: %s: all areas flushed\n",id->name); + } else if(area >= 0 && area < id->nr_areas) { + id->active_entry[area] = 0; + memset(id->areas[area], 0, PAGE_SIZE << id->page_order); + printk(KERN_INFO + "debug: %s: area %i has been flushed\n", + id->name, area); + } else { + printk(KERN_INFO + "debug: %s: area %i cannot be flushed (range: %i - %i)\n", + id->name, area, 0, id->nr_areas-1); + } + spin_unlock_irqrestore(&id->lock,flags); +} + +/* + * view function: flushes debug areas + */ + +static int debug_input_flush_fn(debug_info_t * id, struct debug_view *view, + struct file *file, const char *user_buf, + size_t in_buf_size, loff_t * offset) +{ + char input_buf[1]; + int rc = in_buf_size; + + if (*offset != 0) + goto out; + if (copy_from_user(input_buf, user_buf, 1)){ + rc = -EFAULT; + goto out; + } + if(input_buf[0] == '-') { + debug_flush(id, DEBUG_FLUSH_ALL); + goto out; + } + if (isdigit(input_buf[0])) { + int area = ((int) input_buf[0] - (int) '0'); + debug_flush(id, area); + goto out; + } + + printk(KERN_INFO "debug: area `%c` is not valid\n", input_buf[0]); + + out: + *offset += in_buf_size; + return rc; /* number of input characters */ +} + /* * prints debug header in raw format */ diff --git a/arch/s390/kernel/s390io.c b/arch/s390/kernel/s390io.c index 054fc97a2833..8aa6843442f0 100644 --- a/arch/s390/kernel/s390io.c +++ b/arch/s390/kernel/s390io.c @@ -2280,9 +2280,8 @@ int s390_process_IRQ( unsigned int irq ) ioinfo[irq]->stctl |= stctl; ending_status = ( stctl & SCSW_STCTL_SEC_STATUS ) - || ( stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND) ) - || ( (fctl == SCSW_FCTL_HALT_FUNC) && (stctl == SCSW_STCTL_STATUS_PEND) ) - || ( (fctl == SCSW_FCTL_CLEAR_FUNC) && (stctl == SCSW_STCTL_STATUS_PEND) ); + || ( stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND) ) + || ( stctl == SCSW_STCTL_STATUS_PEND); /* * Check for unsolicited interrupts - for debug purposes only @@ -5109,6 +5108,18 @@ int s390_SetPGID( int irq, __u8 lpm, pgid_t *pgid ) { if ( mpath ) { + /* + * We now try single path mode. + * Note we must not issue the suspend + * multipath reconnect, or we will get + * a command reject by tapes. + */ + + spid_ccw[0].cmd_code = CCW_CMD_SET_PGID; + spid_ccw[0].cda = (__u32)virt_to_phys (pgid); + spid_ccw[0].count = sizeof (pgid_t); + spid_ccw[0].flags = CCW_FLAG_SLI; + pgid->inf.fc = SPID_FUNC_SINGLE_PATH | SPID_FUNC_ESTABLISH; mpath = 0; diff --git a/arch/s390/tools/dasdfmt/dasdfmt.8 b/arch/s390/tools/dasdfmt/dasdfmt.8 index 9e6a4e89e493..bf5ad21e6bb5 100644 --- a/arch/s390/tools/dasdfmt/dasdfmt.8 +++ b/arch/s390/tools/dasdfmt/dasdfmt.8 @@ -31,6 +31,11 @@ Omit the writing of a disk label after formatting. \fB-V\fR Print version number and exit. +.TP +\fB-F\fR +Formats the device without checking, if the device is mounted or used +as swap space. + .TP \fB-b\fR \fIblockSize\fR Specify blocksize to be used. \fIblocksize\fR must be a positive integer diff --git a/arch/s390/tools/dasdfmt/dasdfmt.c b/arch/s390/tools/dasdfmt/dasdfmt.c index 1a5d3f95d695..a3055b1c7beb 100644 --- a/arch/s390/tools/dasdfmt/dasdfmt.c +++ b/arch/s390/tools/dasdfmt/dasdfmt.c @@ -158,15 +158,16 @@ void exit_usage(int exitcode) { #ifdef RANGE_FORMATTING - printf("Usage: %s [-htvyLV] [-l