Re: [CFT] dmfe.c network driver update for 2.4

2000-11-21 Thread Peter Samuelson


[Jeff Garzik]
> Pretty much all ISA and PCI drivers need to be portable and SMP
> safe...  if not so, it's a bug.  That said, there is certainly more
> motivation to make a popular PCI driver is SMP safe than an older ISA
> driver.

Usually, but you never know...

  "o   SMP optimised 3c501"
-- 2.1.132ac2 changelog

(:

Peter
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-21 Thread Peter Samuelson


[Jeff Garzik]
 Pretty much all ISA and PCI drivers need to be portable and SMP
 safe...  if not so, it's a bug.  That said, there is certainly more
 motivation to make a popular PCI driver is SMP safe than an older ISA
 driver.

Usually, but you never know...

  "o   SMP optimised 3c501"
-- 2.1.132ac2 changelog

(:

Peter
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-18 Thread Jeff Garzik

Tobias Ringstrom wrote:
> 
> On Fri, 17 Nov 2000, Frank Davis wrote:
> >
> >   I would rather fix those non-SMP compliant drivers to be SMP compliant,
> > then keeping them 'broken'. Adding the print statements would only be a
> > temporary solution.
> 
> Of course. This list of priorites is very natural, I think:
> 
> 1. Working SMP driver
> 2. Broken SMP driver with a warning.
> 3. Broken SMP driver without a warning. (Even if "everyone" knows it
>is broken)
> 
> It takes less than a minute to add such a warning, but it can take days
> or weeks to find someone to really fix the driver. That was my point.

Marking them with a #warning is fine with me.

-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-18 Thread Tobias Ringstrom

On Fri, 17 Nov 2000, Frank Davis wrote:
> 
>   I would rather fix those non-SMP compliant drivers to be SMP compliant, 
> then keeping them 'broken'. Adding the print statements would only be a 
> temporary solution.

Of course. This list of priorites is very natural, I think:

1. Working SMP driver
2. Broken SMP driver with a warning.
3. Broken SMP driver without a warning. (Even if "everyone" knows it
   is broken)

It takes less than a minute to add such a warning, but it can take days
or weeks to find someone to really fix the driver. That was my point.

/Tobias

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-18 Thread Tobias Ringstrom

On Fri, 17 Nov 2000, Frank Davis wrote:
 
   I would rather fix those non-SMP compliant drivers to be SMP compliant, 
 then keeping them 'broken'. Adding the print statements would only be a 
 temporary solution.

Of course. This list of priorites is very natural, I think:

1. Working SMP driver
2. Broken SMP driver with a warning.
3. Broken SMP driver without a warning. (Even if "everyone" knows it
   is broken)

It takes less than a minute to add such a warning, but it can take days
or weeks to find someone to really fix the driver. That was my point.

/Tobias

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-18 Thread Jeff Garzik

Tobias Ringstrom wrote:
 
 On Fri, 17 Nov 2000, Frank Davis wrote:
 
I would rather fix those non-SMP compliant drivers to be SMP compliant,
  then keeping them 'broken'. Adding the print statements would only be a
  temporary solution.
 
 Of course. This list of priorites is very natural, I think:
 
 1. Working SMP driver
 2. Broken SMP driver with a warning.
 3. Broken SMP driver without a warning. (Even if "everyone" knows it
is broken)
 
 It takes less than a minute to add such a warning, but it can take days
 or weeks to find someone to really fix the driver. That was my point.

Marking them with a #warning is fine with me.

-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Jeff Garzik

> --On Friday, November 17, 2000 10:20 AM +0100 Tobias Ringstrom
> > How about adding an ifdef CONFIG_SMP then print ugly warning to all known
> > SMP unsafe drivers? A message could be printed booth at compile and load
> > time.

Frank Davis wrote:
> I would rather fix those non-SMP compliant drivers to be SMP compliant,
> then keeping them 'broken'. Adding the print statements would only be a
> temporary solution.


Agreed.  If people have SMP safety patches for net drivers, let me
know...

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Frank Davis


I would rather fix those non-SMP compliant drivers to be SMP compliant, 
then keeping them 'broken'. Adding the print statements would only be a 
temporary solution.

Regards,
Frank

--On Friday, November 17, 2000 10:20 AM +0100 Tobias Ringstrom
> How about adding an ifdef CONFIG_SMP then print ugly warning to all known
> SMP unsafe drivers? A message could be printed booth at compile and load
> time.
>
> /Tobias
>


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Tobias Ringstrom

On Thu, 16 Nov 2000, Jeff Garzik wrote:

> The kernel driver APIs are designed so that SMP and UP cases are equally
> high-performance, and portable beyond the x86 platform.
> 
> Pretty much all ISA and PCI drivers need to be portable and SMP safe...
> if not so, it's a bug.  That said, there is certainly more motivation to
> make a popular PCI driver is SMP safe than an older ISA driver.  And
> portability is [IMHO] less of a priority than SMP safety, though it
> depends on the hardware being supported.

How about adding an ifdef CONFIG_SMP then print ugly warning to all known
SMP unsafe drivers? A message could be printed booth at compile and load
time.

/Tobias

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Tobias Ringstrom

On Thu, 16 Nov 2000, Jeff Garzik wrote:

 The kernel driver APIs are designed so that SMP and UP cases are equally
 high-performance, and portable beyond the x86 platform.
 
 Pretty much all ISA and PCI drivers need to be portable and SMP safe...
 if not so, it's a bug.  That said, there is certainly more motivation to
 make a popular PCI driver is SMP safe than an older ISA driver.  And
 portability is [IMHO] less of a priority than SMP safety, though it
 depends on the hardware being supported.

How about adding an ifdef CONFIG_SMP then print ugly warning to all known
SMP unsafe drivers? A message could be printed booth at compile and load
time.

/Tobias

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Frank Davis


I would rather fix those non-SMP compliant drivers to be SMP compliant, 
then keeping them 'broken'. Adding the print statements would only be a 
temporary solution.

Regards,
Frank

--On Friday, November 17, 2000 10:20 AM +0100 Tobias Ringstrom
 How about adding an ifdef CONFIG_SMP then print ugly warning to all known
 SMP unsafe drivers? A message could be printed booth at compile and load
 time.

 /Tobias



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-17 Thread Jeff Garzik

 --On Friday, November 17, 2000 10:20 AM +0100 Tobias Ringstrom
  How about adding an ifdef CONFIG_SMP then print ugly warning to all known
  SMP unsafe drivers? A message could be printed booth at compile and load
  time.

Frank Davis wrote:
 I would rather fix those non-SMP compliant drivers to be SMP compliant,
 then keeping them 'broken'. Adding the print statements would only be a
 temporary solution.


Agreed.  If people have SMP safety patches for net drivers, let me
know...

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-16 Thread Jeff Garzik

Tobias Ringstrom wrote:
> On Wed, 15 Nov 2000, Jeff Garzik wrote:
> > Tobias Ringstrom wrote:
> > > I have updated the dmfe.c network driver for 2.4.0-test by adding proper
> > > locking (I hope), and also made transmission much efficient.

> > Would you mind creating a separate patch that -just- correcting the SMP
> > safety?  That makes it much easier to review and apply, and then we can
> > consider the other changes...

> Such a patch will appear shortly. I and Frank Davis are currently merging
> our patches for dmfe.c.

Thanks a bunch.


> [Actually, I just added reasonable locks while my main goal was to improve
> performance. I did not realize that there was such a strong need for SMP
> safety (since it has been broken in that regard for a long time, without
> anyone fixing it).]

The kernel driver APIs are designed so that SMP and UP cases are equally
high-performance, and portable beyond the x86 platform.

Pretty much all ISA and PCI drivers need to be portable and SMP safe...
if not so, it's a bug.  That said, there is certainly more motivation to
make a popular PCI driver is SMP safe than an older ISA driver.  And
portability is [IMHO] less of a priority than SMP safety, though it
depends on the hardware being supported.

Regards,

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-16 Thread Tobias Ringstrom

On Wed, 15 Nov 2000, Jeff Garzik wrote:

> Tobias Ringstrom wrote:
> > 
> > I have updated the dmfe.c network driver for 2.4.0-test by adding proper
> > locking (I hope), and also made transmission much efficient.
> > 
> > I would appreciate any feedback from people using this driver, to confirm
> > that I did not break it.
> > 
> > It would also be great if someone could take a look at the lock handling,
> > to confirm that is is correct and sufficient.
> 
> Would you mind creating a separate patch that -just- correcting the SMP
> safety?  That makes it much easier to review and apply, and then we can
> consider the other changes...

Such a patch will appear shortly. I and Frank Davis are currently merging
our patches for dmfe.c.

[Actually, I just added reasonable locks while my main goal was to improve
performance. I did not realize that there was such a strong need for SMP
safety (since it has been broken in that regard for a long time, without
anyone fixing it).]

/Tobias


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-16 Thread Jeff Garzik

Tobias Ringstrom wrote:
 On Wed, 15 Nov 2000, Jeff Garzik wrote:
  Tobias Ringstrom wrote:
   I have updated the dmfe.c network driver for 2.4.0-test by adding proper
   locking (I hope), and also made transmission much efficient.

  Would you mind creating a separate patch that -just- correcting the SMP
  safety?  That makes it much easier to review and apply, and then we can
  consider the other changes...

 Such a patch will appear shortly. I and Frank Davis are currently merging
 our patches for dmfe.c.

Thanks a bunch.


 [Actually, I just added reasonable locks while my main goal was to improve
 performance. I did not realize that there was such a strong need for SMP
 safety (since it has been broken in that regard for a long time, without
 anyone fixing it).]

The kernel driver APIs are designed so that SMP and UP cases are equally
high-performance, and portable beyond the x86 platform.

Pretty much all ISA and PCI drivers need to be portable and SMP safe...
if not so, it's a bug.  That said, there is certainly more motivation to
make a popular PCI driver is SMP safe than an older ISA driver.  And
portability is [IMHO] less of a priority than SMP safety, though it
depends on the hardware being supported.

Regards,

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-15 Thread Jeff Garzik

Tobias Ringstrom wrote:
> 
> I have updated the dmfe.c network driver for 2.4.0-test by adding proper
> locking (I hope), and also made transmission much efficient.
> 
> I would appreciate any feedback from people using this driver, to confirm
> that I did not break it.
> 
> It would also be great if someone could take a look at the lock handling,
> to confirm that is is correct and sufficient.

Would you mind creating a separate patch that -just- correcting the SMP
safety?  That makes it much easier to review and apply, and then we can
consider the other changes...

Thanks,

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: [CFT] dmfe.c network driver update for 2.4

2000-11-15 Thread Frank Davis

Hello,
 I'll double check the locking later today, but not sure about the 
transmission changes.
Regards,
Frank
([EMAIL PROTECTED])


--On Wednesday, November 15, 2000 9:34 PM +0100 Tobias Ringstrom 
<[EMAIL PROTECTED]> wrote:

> I have updated the dmfe.c network driver for 2.4.0-test by adding proper
> locking (I hope), and also made transmission much efficient.
>
> I would appreciate any feedback from people using this driver, to confirm
> that I did not break it.
>
> It would also be great if someone could take a look at the lock handling,
> to confirm that is is correct and sufficient.
>
> /Tobias
>
>
> --- dmfe.c.orig   Wed Nov 15 19:53:48 2000
> +++ dmfe.cWed Nov 15 21:35:24 2000
> @@ -57,6 +57,11 @@
> Resource usage cleanups.
> Report driver version to user.
>
> +   Tobias Ringström <[EMAIL PROTECTED]> :
> +   Added proper locking.
> +   Rewrote the transmit code to actually use the ring buffer,
> +   and to generate a lot fewer interrupts.
> +
> TODO
>
> Implement pci_driver::suspend() and pci_driver::resume()
> @@ -108,6 +113,7 @@
>  #define TX_MAX_SEND_CNT 0x1  /* Maximum tx packet per time */
>  #define TX_DESC_CNT 0x10 /* Allocated Tx descriptors */
>  #define RX_DESC_CNT 0x10 /* Allocated Rx descriptors */
> +#define TX_IRQ_THR  12
>  #define DESC_ALL_CNTTX_DESC_CNT+RX_DESC_CNT
>  #define TX_BUF_ALLOC0x600
>  #define RX_ALLOC_SIZE   0x620
> @@ -188,6 +194,8 @@
>u32 cr7_data;
>u32 cr15_data;
>   
> + spinlock_t lock;
> +
>/* descriptor pointer */
>unsigned char *buf_pool_ptr;   /* Tx buffer pool memory */
>unsigned char *buf_pool_start; /* Tx buffer pool align dword */
> @@ -198,8 +206,7 @@
>struct rx_desc *first_rx_desc;
>struct rx_desc *rx_insert_ptr;
>struct rx_desc *rx_ready_ptr;  /* packet come pointer */
> - u32 tx_packet_cnt;  /* transmitted packet count */
> - u32 tx_queue_cnt;   /* wait to send packet count */
> + u32 tx_live_cnt;/* number of used/live tx slots */
>u32 rx_avail_cnt;  /* available rx descriptor count */
>u32 interval_rx_cnt;   /* rx packet count a callback time */
>
> @@ -490,8 +497,6 @@
>
>/* system variable init */
>db->cr6_data = CR6_DEFAULT | dmfe_cr6_user_set;
> - db->tx_packet_cnt = 0;
> - db->tx_queue_cnt = 0;
>db->rx_avail_cnt = 0;
>db->link_failed = 0;
>db->wait_reset = 0;
> @@ -595,46 +600,42 @@
>  {
>struct dmfe_board_info *db = dev->priv;
>struct tx_desc *txptr;
> + static unsigned pkt_num = TX_IRQ_THR;
>
>DMFE_DBUG(0, "dmfe_start_xmit", 0);
> -
> - netif_stop_queue(dev);
> - 
> - /* Too large packet check */
> - if (skb->len > MAX_PACKET_SIZE) {
> - printk(KERN_ERR "%s: oversized frame (%d bytes) for transmit.\n",
> dev->name, (u16) skb->len); - dev_kfree_skb(skb);
> - return 0;
> - }
> - /* No Tx resource check, it never happen nromally */
> - if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) {
> - return 1;
> - }
> +
> + spin_lock_irq(>lock);
>
>/* transmit this packet */
>txptr = db->tx_insert_ptr;
>memcpy((char *) txptr->tx_buf_ptr, (char *) skb->data, skb->len);
> - txptr->tdes1 = 0xe100 | skb->len;
> + if (--pkt_num == 0)
> + {
> + txptr->tdes1 = 0xe100 | skb->len;
> + pkt_num = TX_IRQ_THR;
> + }
> + else
> + txptr->tdes1 = 0x6100 | skb->len;
> +
> + /* Transmit Packet Process */
> + txptr->tdes0 = 0x8000;  /* set owner bit to DM910X */
> + outl(0x1, dev->base_addr + DCR1);   /* Issue Tx polling comand */
> + dev->trans_start = jiffies; /* saved the time stamp */
>
>/* Point to next transmit free descriptor */
> - db->tx_insert_ptr = (struct tx_desc *) txptr->next_tx_desc;
> + txptr = (struct tx_desc *)txptr->next_tx_desc;
>
> - /* Transmit Packet Process */
> - if (db->tx_packet_cnt < TX_MAX_SEND_CNT) {
> - txptr->tdes0 = 0x8000;  /* set owner bit to DM910X */
> - db->tx_packet_cnt++;/* Ready to send count */
> - outl(0x1, dev->base_addr + DCR1);   /* Issue Tx polling comand */
> - } else {
> - db->tx_queue_cnt++; /* queue the tx packet */
> - outl(0x1, dev->base_addr + DCR1);   /* Issue Tx polling comand */
> - }
> + if (txptr->tdes0 & 0x8000)
> + netif_stop_queue(dev);
>
> - /* Tx resource check */
> - if (db->tx_packet_cnt < TX_FREE_DESC_CNT)
> - netif_wake_queue(dev);
> + db->tx_insert_ptr = txptr;
> + db->tx_live_cnt++;
> +
> + spin_unlock_irq(>lock);
>
>/* free this SKB */
>dev_kfree_skb(skb);
> +
>return 0;
>  }
>
> @@ -713,12 +714,14 @@
>outl(0, ioaddr + DCR7);/* disable all interrupt */
>

Re: [CFT] dmfe.c network driver update for 2.4

2000-11-15 Thread Frank Davis

Hello,
 I'll double check the locking later today, but not sure about the 
transmission changes.
Regards,
Frank
([EMAIL PROTECTED])


--On Wednesday, November 15, 2000 9:34 PM +0100 Tobias Ringstrom 
[EMAIL PROTECTED] wrote:

 I have updated the dmfe.c network driver for 2.4.0-test by adding proper
 locking (I hope), and also made transmission much efficient.

 I would appreciate any feedback from people using this driver, to confirm
 that I did not break it.

 It would also be great if someone could take a look at the lock handling,
 to confirm that is is correct and sufficient.

 /Tobias


 --- dmfe.c.orig   Wed Nov 15 19:53:48 2000
 +++ dmfe.cWed Nov 15 21:35:24 2000
 @@ -57,6 +57,11 @@
 Resource usage cleanups.
 Report driver version to user.

 +   Tobias Ringström [EMAIL PROTECTED] :
 +   Added proper locking.
 +   Rewrote the transmit code to actually use the ring buffer,
 +   and to generate a lot fewer interrupts.
 +
 TODO

 Implement pci_driver::suspend() and pci_driver::resume()
 @@ -108,6 +113,7 @@
  #define TX_MAX_SEND_CNT 0x1  /* Maximum tx packet per time */
  #define TX_DESC_CNT 0x10 /* Allocated Tx descriptors */
  #define RX_DESC_CNT 0x10 /* Allocated Rx descriptors */
 +#define TX_IRQ_THR  12
  #define DESC_ALL_CNTTX_DESC_CNT+RX_DESC_CNT
  #define TX_BUF_ALLOC0x600
  #define RX_ALLOC_SIZE   0x620
 @@ -188,6 +194,8 @@
u32 cr7_data;
u32 cr15_data;
   
 + spinlock_t lock;
 +
/* descriptor pointer */
unsigned char *buf_pool_ptr;   /* Tx buffer pool memory */
unsigned char *buf_pool_start; /* Tx buffer pool align dword */
 @@ -198,8 +206,7 @@
struct rx_desc *first_rx_desc;
struct rx_desc *rx_insert_ptr;
struct rx_desc *rx_ready_ptr;  /* packet come pointer */
 - u32 tx_packet_cnt;  /* transmitted packet count */
 - u32 tx_queue_cnt;   /* wait to send packet count */
 + u32 tx_live_cnt;/* number of used/live tx slots */
u32 rx_avail_cnt;  /* available rx descriptor count */
u32 interval_rx_cnt;   /* rx packet count a callback time */

 @@ -490,8 +497,6 @@

/* system variable init */
db-cr6_data = CR6_DEFAULT | dmfe_cr6_user_set;
 - db-tx_packet_cnt = 0;
 - db-tx_queue_cnt = 0;
db-rx_avail_cnt = 0;
db-link_failed = 0;
db-wait_reset = 0;
 @@ -595,46 +600,42 @@
  {
struct dmfe_board_info *db = dev-priv;
struct tx_desc *txptr;
 + static unsigned pkt_num = TX_IRQ_THR;

DMFE_DBUG(0, "dmfe_start_xmit", 0);
 -
 - netif_stop_queue(dev);
 - 
 - /* Too large packet check */
 - if (skb-len  MAX_PACKET_SIZE) {
 - printk(KERN_ERR "%s: oversized frame (%d bytes) for transmit.\n",
 dev-name, (u16) skb-len); - dev_kfree_skb(skb);
 - return 0;
 - }
 - /* No Tx resource check, it never happen nromally */
 - if (db-tx_packet_cnt = TX_FREE_DESC_CNT) {
 - return 1;
 - }
 +
 + spin_lock_irq(db-lock);

/* transmit this packet */
txptr = db-tx_insert_ptr;
memcpy((char *) txptr-tx_buf_ptr, (char *) skb-data, skb-len);
 - txptr-tdes1 = 0xe100 | skb-len;
 + if (--pkt_num == 0)
 + {
 + txptr-tdes1 = 0xe100 | skb-len;
 + pkt_num = TX_IRQ_THR;
 + }
 + else
 + txptr-tdes1 = 0x6100 | skb-len;
 +
 + /* Transmit Packet Process */
 + txptr-tdes0 = 0x8000;  /* set owner bit to DM910X */
 + outl(0x1, dev-base_addr + DCR1);   /* Issue Tx polling comand */
 + dev-trans_start = jiffies; /* saved the time stamp */

/* Point to next transmit free descriptor */
 - db-tx_insert_ptr = (struct tx_desc *) txptr-next_tx_desc;
 + txptr = (struct tx_desc *)txptr-next_tx_desc;

 - /* Transmit Packet Process */
 - if (db-tx_packet_cnt  TX_MAX_SEND_CNT) {
 - txptr-tdes0 = 0x8000;  /* set owner bit to DM910X */
 - db-tx_packet_cnt++;/* Ready to send count */
 - outl(0x1, dev-base_addr + DCR1);   /* Issue Tx polling comand */
 - } else {
 - db-tx_queue_cnt++; /* queue the tx packet */
 - outl(0x1, dev-base_addr + DCR1);   /* Issue Tx polling comand */
 - }
 + if (txptr-tdes0  0x8000)
 + netif_stop_queue(dev);

 - /* Tx resource check */
 - if (db-tx_packet_cnt  TX_FREE_DESC_CNT)
 - netif_wake_queue(dev);
 + db-tx_insert_ptr = txptr;
 + db-tx_live_cnt++;
 +
 + spin_unlock_irq(tp-lock);

/* free this SKB */
dev_kfree_skb(skb);
 +
return 0;
  }

 @@ -713,12 +714,14 @@
outl(0, ioaddr + DCR7);/* disable all interrupt */
return;
}
 +
 + spin_lock(db-lock);
 +
/* Free the transmitted descriptor */
txptr = db-tx_remove_ptr;
 - while (db-tx_packet_cnt) {

Re: [CFT] dmfe.c network driver update for 2.4

2000-11-15 Thread Jeff Garzik

Tobias Ringstrom wrote:
 
 I have updated the dmfe.c network driver for 2.4.0-test by adding proper
 locking (I hope), and also made transmission much efficient.
 
 I would appreciate any feedback from people using this driver, to confirm
 that I did not break it.
 
 It would also be great if someone could take a look at the lock handling,
 to confirm that is is correct and sufficient.

Would you mind creating a separate patch that -just- correcting the SMP
safety?  That makes it much easier to review and apply, and then we can
consider the other changes...

Thanks,

Jeff


-- 
Jeff Garzik |
Building 1024   | The chief enemy of creativity is "good" sense
MandrakeSoft|  -- Picasso
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/