Patch for 2.4 USB serial
by Pete Zaitcev
I got around to fixing a number of teething problems with the usbserial
helper process and the usbserial in general, just in time when 2.4 started
to wind down. Nonetheless, here it goes, against 2.4.22-1.2176.
Please consider for a future update, if that ever happens.
Related bug reports:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112806
Not sure if I fixed it completely this time, but I hope so.
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=114614
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=116011
Regression in Fedora which I caused with fixes for PDA syncs
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=117423
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=118436
RHEL bug, but fixes are all mixed together in the code.
If everything goes well, I will push this to Marcelo for 2.4.27.
I held back hoping for a backport, but now that I looked even more
at it, I think 2.6 gets it wrong, too. It will be a separate work.
So let's just fix this.
Code reviews are always appreciated.
-- Pete
diff -urN -X dontdiff linux-2.4.22-1.2176/drivers/usb/serial/usbserial.c linux-2.4.22-1.2176-u1/drivers/usb/serial/usbserial.c
--- linux-2.4.22-1.2176/drivers/usb/serial/usbserial.c 2004-03-11 20:53:43.000000000 -0800
+++ linux-2.4.22-1.2176-u1/drivers/usb/serial/usbserial.c 2004-03-23 11:07:12.000000000 -0800
@@ -367,6 +367,10 @@
static void serial_close (struct tty_struct *tty, struct file * filp);
static int __serial_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count);
+static int serial_post_job(struct usb_serial_port *port, int from_user,
+ int gfp, const unsigned char *buf, int count);
+static int serial_post_one(struct usb_serial_port *port, int from_user,
+ int gfp, const unsigned char *buf, int count);
static int serial_write_room (struct tty_struct *tty);
static int serial_chars_in_buffer (struct tty_struct *tty);
static void serial_throttle (struct tty_struct * tty);
@@ -477,35 +481,45 @@
* Rather than open the whole can of worms again, we just post writes
* into a helper which can sleep.
*
- * Kernel 2.6 has a proper fix, reportedly.
- *
- * XXX Nothing prevents this from looping forever.
+ * Kernel 2.6 has a proper fix. It replaces semaphores with proper locking.
*/
static void post_helper(void *arg)
{
+ struct list_head *pos;
struct usb_serial_post_job *job;
struct usb_serial_port *port;
struct usb_serial *serial;
unsigned int flags;
spin_lock_irqsave(&post_lock, flags);
- while (!list_empty(&post_list)) {
- job = list_entry(post_list.next, struct usb_serial_post_job, link);
+ pos = post_list.next;
+ while (pos != &post_list) {
+ job = list_entry(pos, struct usb_serial_post_job, link);
+ port = job->port;
+ /* get_usb_serial checks port->tty, so cannot be used */
+ serial = port->serial;
+ if (port->write_busy) {
+ dbg("%s - port %d busy", __FUNCTION__, port->number);
+ pos = pos->next;
+ continue;
+ }
list_del(&job->link);
spin_unlock_irqrestore(&post_lock, flags);
- port = job->port;
- serial = get_usb_serial (port, __FUNCTION__);
-
down(&port->sem);
+ dbg("%s - port %d len %d backlog %d", __FUNCTION__,
+ port->number, job->len, port->write_backlog);
if (port->tty != NULL)
__serial_write(port, 0, job->buff, job->len);
up(&port->sem);
- kfree(job);
spin_lock_irqsave(&post_lock, flags);
+ port->write_backlog -= job->len;
+ kfree(job);
if (--serial->ref == 0)
kfree(serial);
+ /* Have to reset because we dropped spinlock */
+ pos = post_list.next;
}
spin_unlock_irqrestore(&post_lock, flags);
}
@@ -642,7 +656,20 @@
/* if disconnect beat us to the punch here, there's nothing to do */
if (tty->driver_data) {
- /* post_helper(NULL); */ /* Correct, but unimportant for echo.*/
+ /*
+ * XXX The right thing would be to wait for the output to drain.
+ * But we are not sufficiently daring to experiment in 2.4.
+ * N.B. If we do wait, no need to run post_helper here.
+ * Normall callback mechanism wakes it up just fine.
+ */
+#if I_AM_A_DARING_HACKER
+ tty->closing = 1;
+ up (&port->sem);
+ if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
+ tty_wait_until_sent(tty, info->closing_wait);
+ down (&port->sem);
+ if (!tty->driver_data) /* woopsie, disconnect, now what */ ;
+#endif
__serial_close(port, filp);
}
@@ -677,9 +704,6 @@
static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
{
struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
- struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
- struct usb_serial_post_job *job;
- unsigned long flags;
int rc;
if (!in_interrupt()) {
@@ -690,6 +714,18 @@
post_helper(NULL);
down(&port->sem);
+ /*
+ * This happens when a line discipline asks how much room
+ * we have, gets 64, then tries to perform two writes
+ * for a byte each. First write takes whole URB, second
+ * write hits this check.
+ */
+ if (port->write_busy) {
+ up(&port->sem);
+ return serial_post_job(port, from_user, GFP_KERNEL,
+ buf, count);
+ }
+
rc = __serial_write(port, from_user, buf, count);
up(&port->sem);
return rc;
@@ -705,12 +741,19 @@
return -EINVAL;
}
- job = kmalloc(sizeof(struct usb_serial_post_job), GFP_ATOMIC);
- if (job == NULL)
- return -ENOMEM;
+ return serial_post_job(port, 0, GFP_ATOMIC, buf, count);
+}
- job->port = port;
- if ((job->len = count) >= POST_BSIZE) {
+static int serial_post_job(struct usb_serial_port *port, int from_user,
+ int gfp, const unsigned char *buf, int count)
+{
+ int done = 0, length;
+ int rc;
+
+ if (port == NULL)
+ return -EPIPE;
+
+ if (count >= 512) {
static int rate = 0;
/*
* Data loss due to extreme circumstances.
@@ -718,13 +761,61 @@
* Neener, neener! Actually, it's probably an echo loop anyway.
* Only happens when getty starts talking to Visor.
*/
- if (++rate % 1000 < 5)
- err("too much data (%d)", count);
- job->len = POST_BSIZE;
+ if (++rate % 1000 < 3) {
+ err("too much data (%d) from %s", count,
+ from_user? "user": "kernel");
+ }
+ count = 512;
+ }
+
+ while (done < count) {
+ length = count - done;
+ if (length > POST_BSIZE)
+ length = POST_BSIZE;
+ if (length > port->bulk_out_size)
+ length = port->bulk_out_size;
+
+ rc = serial_post_one(port, from_user, gfp, buf + done, length);
+ if (rc <= 0) {
+ if (done != 0)
+ return done;
+ return rc;
+ }
+ done += rc;
+ }
+
+ return done;
+}
+
+static int serial_post_one(struct usb_serial_port *port, int from_user,
+ int gfp, const unsigned char *buf, int count)
+{
+ struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
+ struct usb_serial_post_job *job;
+ unsigned long flags;
+
+ dbg("%s - port %d user %d count %d", __FUNCTION__, port->number, from_user, count);
+
+ job = kmalloc(sizeof(struct usb_serial_post_job), gfp);
+ if (job == NULL)
+ return -ENOMEM;
+
+ job->port = port;
+ if (count >= POST_BSIZE)
+ count = POST_BSIZE;
+ job->len = count;
+
+ if (from_user) {
+ if (copy_from_user(job->buff, buf, count)) {
+ kfree(job);
+ return -EFAULT;
+ }
+ } else {
+ memcpy(job->buff, buf, count);
}
- memcpy(job->buff, buf, job->len);
spin_lock_irqsave(&post_lock, flags);
+ port->write_backlog += count;
list_add_tail(&job->link, &post_list);
serial->ref++; /* Protect the port->sem from kfree() */
schedule_task(&post_task);
@@ -742,8 +833,13 @@
if (!serial)
return -ENODEV;
- if (in_interrupt())
- return POST_BSIZE;
+ if (in_interrupt()) {
+ retval = 0;
+ if (!port->write_busy && port->write_backlog == 0)
+ retval = port->bulk_out_size;
+ dbg("%s - returns %d", __FUNCTION__, retval);
+ return retval;
+ }
down (&port->sem);
@@ -776,10 +872,8 @@
down (&port->sem);
- dbg("%s = port %d", __FUNCTION__, port->number);
-
if (!port->open_count) {
- dbg("%s - port not open", __FUNCTION__);
+ dbg("%s - port %d: not open", __FUNCTION__, port->number);
goto exit;
}
@@ -1038,18 +1132,23 @@
{
struct usb_serial *serial = port->serial;
int result;
-
- dbg("%s - port %d", __FUNCTION__, port->number);
+ unsigned long flags;
if (count == 0) {
dbg("%s - write request of 0 bytes", __FUNCTION__);
return (0);
}
+ if (count < 0) {
+ err("%s - port %d: write request of %d bytes", __FUNCTION__,
+ port->number, count);
+ return (0);
+ }
/* only do something if we have a bulk out endpoint */
if (serial->num_bulk_out) {
- if (port->write_urb->status == -EINPROGRESS) {
- dbg("%s - already writing", __FUNCTION__);
+ if (port->write_busy) {
+ /* Happens when two threads run port_helper. Watch. */
+ info("%s - already writing", __FUNCTION__);
return (0);
}
@@ -1058,12 +1157,10 @@
if (from_user) {
if (copy_from_user(port->write_urb->transfer_buffer, buf, count))
return -EFAULT;
- }
- else {
+ } else {
memcpy (port->write_urb->transfer_buffer, buf, count);
}
-
- usb_serial_debug_data (__FILE__, __FUNCTION__, count, port->write_urb->transfer_buffer);
+ dbg("%s - port %d [%d]", __FUNCTION__, port->number, count);
/* set up our urb */
usb_fill_bulk_urb (port->write_urb, serial->dev,
@@ -1075,10 +1172,18 @@
generic_write_bulk_callback), port);
/* send the data out the bulk port */
+ port->write_busy = 1;
result = usb_submit_urb(port->write_urb);
- if (result)
- err("%s - failed submitting write urb, error %d", __FUNCTION__, result);
- else
+ if (result) {
+ err("%s - port %d: failed submitting write urb (%d)",
+ __FUNCTION__, port->number, result);
+ port->write_busy = 0;
+ spin_lock_irqsave(&post_lock, flags);
+ if (port->write_backlog != 0)
+ schedule_task(&post_task);
+ spin_unlock_irqrestore(&post_lock, flags);
+
+ } else
result = count;
return result;
@@ -1093,14 +1198,12 @@
struct usb_serial *serial = port->serial;
int room = 0;
- dbg("%s - port %d", __FUNCTION__, port->number);
-
if (serial->num_bulk_out) {
- if (port->write_urb->status != -EINPROGRESS)
+ if (!port->write_busy && port->write_backlog == 0)
room = port->bulk_out_size;
}
- dbg("%s - returns %d", __FUNCTION__, room);
+ dbg("%s - port %d, returns %d", __FUNCTION__, port->number, room);
return (room);
}
@@ -1112,8 +1215,9 @@
dbg("%s - port %d", __FUNCTION__, port->number);
if (serial->num_bulk_out) {
- if (port->write_urb->status == -EINPROGRESS)
- chars = port->write_urb->transfer_buffer_length;
+ if (port->write_busy)
+ chars += port->write_urb->transfer_buffer_length;
+ chars += port->write_backlog; /* spin_lock... Baah */
}
dbg("%s - returns %d", __FUNCTION__, chars);
@@ -1177,14 +1281,16 @@
dbg("%s - port %d", __FUNCTION__, port->number);
+ port->write_busy = 0;
+ wmb();
+
if (!serial) {
- dbg("%s - bad serial pointer, exiting", __FUNCTION__);
+ err("%s - null serial pointer, exiting", __FUNCTION__);
return;
}
if (urb->status) {
dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
- return;
}
queue_task(&port->tqueue, &tq_immediate);
@@ -1210,12 +1316,18 @@
struct usb_serial_port *port = (struct usb_serial_port *)private;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
struct tty_struct *tty;
+ unsigned long flags;
dbg("%s - port %d", __FUNCTION__, port->number);
if (!serial)
return;
+ spin_lock_irqsave(&post_lock, flags);
+ if (port->write_backlog != 0)
+ schedule_task(&post_task);
+ spin_unlock_irqrestore(&post_lock, flags);
+
tty = port->tty;
if (!tty)
return;
diff -urN -X dontdiff linux-2.4.22-1.2176/drivers/usb/serial/usb-serial.h linux-2.4.22-1.2176-u1/drivers/usb/serial/usb-serial.h
--- linux-2.4.22-1.2176/drivers/usb/serial/usb-serial.h 2004-03-11 20:53:43.000000000 -0800
+++ linux-2.4.22-1.2176-u1/drivers/usb/serial/usb-serial.h 2004-03-23 11:07:12.000000000 -0800
@@ -111,6 +111,8 @@
int bulk_out_size;
struct urb * write_urb;
__u8 bulk_out_endpointAddress;
+ char write_busy; /* URB is active */
+ int write_backlog; /* Fifo used */
wait_queue_head_t write_wait;
struct tq_struct tqueue;
20 years
rawhide report: 20040326 changes
by Build System
Updated Packages:
anaconda-9.91-7
---------------
* Thu Mar 25 2004 Anaconda team <bugzilla(a)redhat.com>
- built new version from CVS
* Tue Feb 24 2004 Jeremy Katz <katzj(a)redhat.com>
- buildrequire libselinux-devel
* Thu Nov 06 2003 Jeremy Katz <katzj(a)redhat.com>
- require booty (#109272)
rpmdb-fedora-1.91-0.20040326
----------------------------
20 years
Anaconda kickstart.
by Naoki
Hey,
How about this for an idea.
When doing a kickstart install instead of asking me which ethernet
device I want to use anaconda could just use the first interface with
link. I'm always doing network installs on dual NIC machines and I
have to specify the ethernet device which is annoying.
Now if I knew python I'd check it out, maybe I'll try anyway :)
Anybody else have this problem?
20 years
Announcing Fedora Tracker -- comments?
by Brad Smith
All,
About six months ago, as the result of a conversation on IRC, I began
playing with the idea of a "tracker" for Fedora: Something to tie
together the many apt and yum repositories out there into a single,
simple to use framework.
There is, of course, a great deal of software available for Fedora
outside of the core package set. But the question I kept running into
was "How do I figure out which repository, if any, has the package I'm
looking for, assuming I even know the name of the package in the first
place?".
None of the answers to this question that I'd come across were really
satisfactory. They either required me to already have a comprehensive
list of third-party repositories (synaptic) or were too general (google,
rpmfind, etc). So, partly to scratch this itch and partly to teach
myself Python, I started work on a tool for easily indexing and
searching Fedora repositories.
I've been quiet about things because until now the Fedora Tracker was
mostly an educational project. But it's now at a point where I think it
could be of use to others and I'd appreciate some constructive
criticism. I'm announcing it on this list instead of fedora-list because
I'd don't know how much traffic my webhost can handle and I'd like to
stress-test it with a smaller group of well-clued people first.
The url is:
http://academy.phpwebhosting.com/cgi-bin/tracker/tracker.py
Since this is my first python project, any feedback regarding the
quality of the code would also be appreciated. I figured out a lot of
this stuff, like how to dissect the rpm headers, "by ear", so no doubt
there are many places where my approach could be improved upon. Should
anyone care to peruse it, the code is available here:
http://academy.phpwebhosting.com/tracker/tracker-2004032400.tar.bz2
The app basically consists of two components: The web-based frontend
allows users to search indexed repositories and submit repos for
indexing. Another tool called tracker-process.py runs as a cron job and
pulls down the headers for each queued repo, storing that info in the
database.
There is more that I plan to do, but since my work at Red Hat is
unrelated to the Tracker project (or development of any sort) how soon I
can do more is dependent upon how much free time I have (not much at the
moment). That said, here are the main items on my TODO list:
- Support for repo-side configuration. I would implement this by having
tracker-process.py look for a "tracker.conf" file in the headers or base
directory of a repo. By modifying this file, the administrator of a repo
could specify a list of mirrors for the repository, alter the repository
description, indicate when the repo should be re-indexed, etc.
- Support for updating a repository that has been indexed (see above)
- Support for storing a list of mirrors for a repository (see above)
- Support for the proposed common XML-based metadata format
(http://linux.duke.edu/projects/metadata/readme.metadata)
- Improvements to the searching mechanism, such as protecting quoted
strings (currently the search is either done as a series of AND'ed
keyword matches or as one big regex match).
- Ability to display dependencies (for the life of me I cannot figure
out how to interpret the dependency data in the rpm headers). Any
reference to documentation would be appreciated.
- Improvements to the user interface. For example, currently if a search
yields multiple versions of the same package they are all listed. When I
have some time I'm going to change this so that packages with multiple
versions/architectures are displayed under one package name and only
expanded when the package is selected.
- Index Fedora Core packages. Currently this is a problem because the
default repository is too busy for tracker-process.py to be able to
reliably index it. Once support for mirrors is set up, this should not
be a problem. Alternately, I could just index a mirror and then change
the url in the database. =;)
- Comment things more thoroughly and convert existing comments to pydoc
or similar
- Re-arrange files so that the url is more accessible
- Whatever else comes to mind or is suggested to me =;)
Thanks to everybody who helps make Fedora such a fun distro to use!
--Brad
20 years
Cannot backport KOffice 1.3 to shrike: Bad file descriptor
by M. Fioretti
Hello
I got the source rpm of KOFFICE 1.3 from koffice.kde.org. It is for
Fedora Core 1, so I tried to rebuild it on RH9. The build fails with
the error below. The specs file is pasted right after that . Any
pointer to fix this is appreciated.
TIA,
Marco Fioretti
/bin/sh ../../../libtool --silent --mode=link --tag=CXX g++
-Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -W -Wpointer-arith
-Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align
-Wconversion -Wchar-subscripts -O2 -O2 -g -march=i386 -mcpu=i686
-D_GNU_SOURCE -DNO_DEBUG -DNDEBUG -Wformat-security
-Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common
-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT
-DQT_NO_TRANSLATION -o libkivioselecttool.la -rpath /usr/lib
-module -avoid-version -module -no-undefined -Wl,--no-undefined
-Wl,--allow-shlib-undefined plugin.lo tool_select.lo
../../../lib/kotext/libkotext.la
../../../lib/kopainter/libkopainter.la -L/usr/X11R6/lib
-L/usr/lib/qt-3.1/lib -L/usr/lib -L/usr/lib
../../../kivio/kiviopart/libkiviopart.la
*** Warning: Linking the shared library libkivioselecttool.la against
the loadable module
*** libkiviopart.so is not portable!
g++: /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs: Bad file
descriptor
make[5]: *** [libkivioselecttool.la] Error 1
make[5]: Leaving directory
`/home/marco/RPM_FOUNDRY/BUILD/koffice-1.3/kivio/plugins/kivioselecttool'
###########################################################
Now the /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs file:
*asm:
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
*asm_debug:
%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
*asm_final:
%|
*asm_options:
%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
*invoke_as:
%{!S:-o %{|!pipe:%g.s} |
as %(asm_options) %{!pipe:%g.s} %A }
*cpp:
%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
*cpp_options:
%(cpp_unique_options) %{std*} %{d*} %{W*} %{w} %{pedantic*} %{fshow-column} %{fno-show-column} %{fsigned-char&funsigned-char} %{fleading-underscore} %{fno-leading-underscore} %{fno-operator-names} %{ftabstop=*}
*cpp_unique_options:
%{C:%{!E:%eGNU C does not support -C without using -E}} %{nostdinc*} %{C} %{v} %{I*} %{P} %{$} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3 -D__GXX_ABI_VERSION=102} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} %{fno-inline|O0|!O*:-D__NO_INLINE__} %{ffast-math:-D__FAST_MATH__} %{ffreestanding:-D__STDC_HOSTED__=0} %{fno-hosted:-D__STDC_HOSTED__=0} %{!ffreestanding:%{!fno-hosted:-D__STDC_HOSTED__=1}} %{remap} %{g3:-dD} %{H} %C %{fshort-wchar:-U__WCHAR_TYPE__ -D__WCHAR_TYPE__=short\ unsigned\ int} %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
*trad_capable_cpp:
%{traditional|ftraditional|traditional-cpp:trad}cpp0
*cc1:
%(cc1_cpu) %{profile:-p}
*cc1_options:
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{g*} %{O*} %{W*} %{w} %{pedantic*} %{std*} %{ansi} %{traditional} %{v:-version} %{pg:-p} %{p} %{f*} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*}
*cc1plus:
*link_gcc_c_sequence:
%G %L %G
*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
*link:
%{!static:--eh-frame-hdr} -m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}
*lib:
%{pthread:-lpthread} %{shared:-lc} %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}
*libgcc:
%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
*startfile:
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} crti.o%s %{static:crtbeginT.o%s} %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
*switches_need_spaces:
*predefines:
-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem=posix
*cross_compile:
0
*version:
3.2.2
*multilib:
. ;
*multilib_defaults:
*multilib_extra:
*multilib_matches:
*multilib_exclusions:
*multilib_options:
*linker:
collect2
*link_libgcc:
%D
*md_exec_prefix:
*md_startfile_prefix:
*md_startfile_prefix_1:
*cpp_cpu_default:
-D__tune_i386__
*cpp_cpu:
%(cpp_cpu32) %(cpp_cpucommon)
*cpp_cpu32:
-Acpu=i386 -Amachine=i386 %{!ansi:%{!std=c*:%{!std=i*:-Di386}}} -D__i386 -D__i386__ %(cpp_cpu32sizet)
*cpp_cpu64:
-Acpu=x86_64 -Amachine=x86_64 -D__x86_64 -D__x86_64__ %(cpp_cpu64sizet)
*cpp_cpu32sizet:
*cpp_cpu64sizet:
*cpp_cpucommon:
%{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__i586 -D__i586__ -D__pentium -D__pentium__ %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ }}%{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__ -D__pentium__mmx__ %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}%{march=pentiumpro|march=i686|march=pentium2|march=pentium3:-D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}%{march=pentium2|march=pentium3: -D__pentium2 -D__pentium2__ %{!mcpu*:-D__tune_pentium2__ }}%{march=pentium3: -D__pentium3 -D__pentium3__ %{!mcpu*:-D__tune_pentium3__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}%{march=k6-2:-D__k6 -D__k6__ -D__k6_2__ %{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}%{march=k6-3:-D__k6 -D__k6__ -D__k6_3__ %{!mcpu*:-D__tune_k6__ -D__tune_k6_3__ }}%{march=athlon|march=athlon-tbird:-D__athlon -D__athlon__!
%{!mcpu*:-D__tune_athlon__ }}%{march=athlon-4|march=athlon-xp|march=athlon-mp:-D__athlon -D__athlon__ -D__athlon_sse__ %{!mcpu*:-D__tune_athlon__ -D__tune_athlon_sse__ }}%{march=pentium4:-D__pentium4 -D__pentium4__ %{!mcpu*:-D__tune_pentium4__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:-D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686|mcpu=pentium2|mcpu=pentium3:-D__tune_i686__ -D__tune_pentiumpro__ }%{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }%{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:-D__tune_athlon__ }%{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:-D__tune_athlon_sse__ }%{mcpu=pentium4:-D__tune_pentium4__ }%{march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4|msse|msse2:-D__SSE__ }%{march=pentium-mmx|march=k6|march=k6-2|march=k6-3|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp|march=pentiu!
m2|march=pentium3|march=pentium4|mmx|msse|m3dnow: -D__MMX__ }%{march=k
ch=k6-3|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp|m3dnow: -D__3dNOW__ }%{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp: -D__3dNOW_A__ }%{march=pentium4|msse2: -D__SSE2__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386 %n`-m386' is deprecated. Use `-march=i386' or `-mcpu=i386' instead.
} %{m486:-mcpu=i486 %n`-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.
} %{mpentium:-mcpu=pentium %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.
} %{mpentiumpro:-mcpu=pentiumpro %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.
}} %{mintel-syntax:-masm=intel %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.
} %{mno-intel-syntax:-masm=att %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.
}
*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
--
Marco Fioretti m.fioretti, at the server inwind.it
Red Hat for low memory http://www.rule-project.org/en/
Intellectual freedom cannot exist without political freedom; political
freedom cannot exist without economic freedom; a free mind and a free
market are corollaries. -- Ayn Rand, "For the New Intellectual"
----- End forwarded message -----
--
Marco Fioretti m.fioretti, at the server inwind.it
Red Hat for low memory http://www.rule-project.org/en/
If they can get you asking the wrong question, the answers don't
matter.
----- End forwarded message -----
--
Marco Fioretti m.fioretti, at the server inwind.it
Red Hat for low memory http://www.rule-project.org/en/
There are tasks that cannot be done by more than ten men, or less than
one hundred
20 years
rawhide report: 20040325 changes
by Build System
Updated Packages:
rpmdb-fedora-1.91-0.20040325
----------------------------
system-config-securitylevel-1.3.8-1
-----------------------------------
* Wed Mar 24 2004 Bill Nottingham <notting(a)redhat.com> 1.3.8-1
- fix writing of config file if neither of --disabled or --enabled are
passed (#118667, redux)
xorg-x11-0.0.6.6-0.0.2004_03_11.9
---------------------------------
* Wed Mar 24 2004 Mike A. Harris <mharris(a)redhat.com> 0.0.6.6-0.0.2004_03_11.9
- Really added the xorg-x11-Xft-freetype-bitmap-font-fix.patch patch this time
as it was inadvertently left out of 0.0.6.6-0.0.2004_03_11.8 by mistake
20 years, 1 month
Request for assistance with kernel-module-at76c503a
by Steven Pritchard
I purchased a cheap Actiontec USB 802.11b adapter for my daughter's
computer yesterday, so I adapted my kernel-module-hostap spec for the
at76c503a driver. I've submitted the result here:
https://bugzilla.fedora.us/show_bug.cgi?id=1418
The driver works fine, but I'm having a silly little problem where the
driver always builds for SMP on my SMP system, even if I tell it to
compile for UP.
I would appreciate some assistance with this. Unfortunately I don't
have time to dig into this any more than I have already at the moment,
and this issue is the only thing that I can see keeping this package
out of QA.
Steve
--
Steven Pritchard - K&S Pritchard Enterprises, Inc.
Email: steve(a)kspei.com http://www.kspei.com/
Phone: (618)398-7360 Mobile: (618)567-7320
20 years, 1 month
Re: Re: Java in Fedora
by hutuworm
Sam Varshavchik,
Bea's Jrockit is also fast as before on Fedora Core 2 Test 1.
======= 2004-03-25 08:55:26 Quote from your mail =======
>Carwyn Edwards writes:
>
>> Is there any cooperation or plan in relation to this? As and end user
>> it's imperative for me that I should at least be able to plug in either
>> of the Sun/Blackdown/IBM sdks and get a full SDK runtime/toolset.
>
>Sun's SDK works reasonably well on Fedora i386.
>
>Sun's SDK oopses Fedora's x86_64 kernel.
>
>I don't remember the exact reason, but I could not get Blackdown's x86_64
>SDK to install. I think there were some library dependency issues with
>Fedora.
>
>When I get some spare cycles I'll try to backport a more recent arch/x86_64
>tree to Fedora's kernel, in a vain hope to fix the bleeping kernel crash.
>I'm not that eager to play with it, since every time the kernel oopses I
>have to wait four hours to rebuild the bleeping RAID volumes.
>
>
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG v1.2.3 (GNU/Linux)
>
>iD8DBQBAYi3+x9p3GYHlUOIRAjTIAJ9o5OXw3Wpe09/86i+cLTohuGPaZACdGZLJ
>c5XznHs0+TxExXC5TQWgqvI=
>=1Zsq
>-----END PGP SIGNATURE-----
>
>--
>fedora-devel-list mailing list
>fedora-devel-list(a)redhat.com
>http://www.redhat.com/mailman/listinfo/fedora-devel-list
>
==================================================
hutuworm
20 years, 1 month