* [PATCH 1/7] 8139cp: trim ring_info
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
@ 2006-08-31 20:48 ` Francois Romieu
2006-08-31 20:49 ` [PATCH 2/7] 8139cp: remove gratuitous indirection Francois Romieu
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:48 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
Fat removal: the mapping address is available from the Rx/Tx descriptors.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 33 ++++++++++++++++-----------------
1 files changed, 16 insertions(+), 17 deletions(-)
3598b57be449a2ee9178e5c511bdb1a8aaccba20
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 1428bb7..8f5d779 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -316,7 +316,6 @@ struct cp_desc {
struct ring_info {
struct sk_buff *skb;
- dma_addr_t mapping;
u32 len;
};
@@ -551,7 +550,7 @@ rx_status_loop:
break;
len = (status & 0x1fff) - 4;
- mapping = cp->rx_skb[rx_tail].mapping;
+ mapping = le64_to_cpu(desc->addr);
if ((status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag)) {
/* we don't support incoming fragmented frames.
@@ -595,10 +594,8 @@ rx_status_loop:
skb_put(skb, len);
- mapping =
- cp->rx_skb[rx_tail].mapping =
- pci_map_single(cp->pdev, new_skb->data,
- buflen, PCI_DMA_FROMDEVICE);
+ mapping = pci_map_single(cp->pdev, new_skb->data, buflen,
+ PCI_DMA_FROMDEVICE);
cp->rx_skb[rx_tail].skb = new_skb;
cp_rx_skb(cp, skb, desc);
@@ -717,18 +714,19 @@ static void cp_tx (struct cp_private *cp
unsigned tx_tail = cp->tx_tail;
while (tx_tail != tx_head) {
+ struct cp_desc *txd = cp->tx_ring + tx_tail;
struct sk_buff *skb;
u32 status;
rmb();
- status = le32_to_cpu(cp->tx_ring[tx_tail].opts1);
+ status = le32_to_cpu(txd->opts1);
if (status & DescOwn)
break;
skb = cp->tx_skb[tx_tail].skb;
BUG_ON(!skb);
- pci_unmap_single(cp->pdev, cp->tx_skb[tx_tail].mapping,
+ pci_unmap_single(cp->pdev, le64_to_cpu(txd->addr),
cp->tx_skb[tx_tail].len, PCI_DMA_TODEVICE);
if (status & LastFrag) {
@@ -827,7 +825,6 @@ #endif
wmb();
cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].mapping = mapping;
cp->tx_skb[entry].len = len;
entry = NEXT_TX(entry);
} else {
@@ -845,7 +842,6 @@ #endif
first_mapping = pci_map_single(cp->pdev, skb->data,
first_len, PCI_DMA_TODEVICE);
cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].mapping = first_mapping;
cp->tx_skb[entry].len = first_len;
entry = NEXT_TX(entry);
@@ -888,7 +884,6 @@ #endif
wmb();
cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].mapping = mapping;
cp->tx_skb[entry].len = len;
entry = NEXT_TX(entry);
}
@@ -1091,6 +1086,7 @@ static int cp_refill_rx (struct cp_priva
for (i = 0; i < CP_RX_RING_SIZE; i++) {
struct sk_buff *skb;
+ dma_addr_t mapping;
skb = dev_alloc_skb(cp->rx_buf_sz + RX_OFFSET);
if (!skb)
@@ -1099,12 +1095,12 @@ static int cp_refill_rx (struct cp_priva
skb->dev = cp->dev;
skb_reserve(skb, RX_OFFSET);
- cp->rx_skb[i].mapping = pci_map_single(cp->pdev,
- skb->data, cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
+ mapping = pci_map_single(cp->pdev, skb->data, cp->rx_buf_sz,
+ PCI_DMA_FROMDEVICE);
cp->rx_skb[i].skb = skb;
cp->rx_ring[i].opts2 = 0;
- cp->rx_ring[i].addr = cpu_to_le64(cp->rx_skb[i].mapping);
+ cp->rx_ring[i].addr = cpu_to_le64(mapping);
if (i == (CP_RX_RING_SIZE - 1))
cp->rx_ring[i].opts1 =
cpu_to_le32(DescOwn | RingEnd | cp->rx_buf_sz);
@@ -1152,11 +1148,13 @@ static int cp_alloc_rings (struct cp_pri
static void cp_clean_rings (struct cp_private *cp)
{
+ struct cp_desc *desc;
unsigned i;
for (i = 0; i < CP_RX_RING_SIZE; i++) {
if (cp->rx_skb[i].skb) {
- pci_unmap_single(cp->pdev, cp->rx_skb[i].mapping,
+ desc = cp->rx_ring + i;
+ pci_unmap_single(cp->pdev, le64_to_cpu(desc->addr),
cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
dev_kfree_skb(cp->rx_skb[i].skb);
}
@@ -1166,9 +1164,10 @@ static void cp_clean_rings (struct cp_pr
if (cp->tx_skb[i].skb) {
struct sk_buff *skb = cp->tx_skb[i].skb;
- pci_unmap_single(cp->pdev, cp->tx_skb[i].mapping,
+ desc = cp->tx_ring + i;
+ pci_unmap_single(cp->pdev, le64_to_cpu(desc->addr),
cp->tx_skb[i].len, PCI_DMA_TODEVICE);
- if (le32_to_cpu(cp->tx_ring[i].opts1) & LastFrag)
+ if (le32_to_cpu(desc->opts1) & LastFrag)
dev_kfree_skb(skb);
cp->net_stats.tx_dropped++;
}
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 2/7] 8139cp: remove gratuitous indirection
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
2006-08-31 20:48 ` [PATCH 1/7] 8139cp: trim ring_info Francois Romieu
@ 2006-08-31 20:49 ` Francois Romieu
2006-08-31 20:49 ` [PATCH 3/7] 8139cp: ring_info removal for the receive path Francois Romieu
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:49 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
dev is an argument of the current function.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
c48e9399e895834f26dff9149de1930ba18a0d6c
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 8f5d779..ae9bb75 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -571,7 +571,7 @@ rx_status_loop:
if (netif_msg_rx_status(cp))
printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d\n",
- cp->dev->name, rx_tail, status, len);
+ dev->name, rx_tail, status, len);
buflen = cp->rx_buf_sz + RX_OFFSET;
new_skb = dev_alloc_skb (buflen);
@@ -581,7 +581,7 @@ rx_status_loop:
}
skb_reserve(new_skb, RX_OFFSET);
- new_skb->dev = cp->dev;
+ new_skb->dev = dev;
pci_unmap_single(cp->pdev, mapping,
buflen, PCI_DMA_FROMDEVICE);
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 3/7] 8139cp: ring_info removal for the receive path
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
2006-08-31 20:48 ` [PATCH 1/7] 8139cp: trim ring_info Francois Romieu
2006-08-31 20:49 ` [PATCH 2/7] 8139cp: remove gratuitous indirection Francois Romieu
@ 2006-08-31 20:49 ` Francois Romieu
2006-09-06 14:47 ` Jeff Garzik
2006-08-31 20:51 ` [PATCH 4/7] 8139cp: sync the device private data with its r8169 counterpart Francois Romieu
` (4 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:49 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
The ring_info.len field is not used at all. cp_private.rx_skb is
turned into an array of sk_buff *.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
0ba894d420b845667e2981c2147af974a755fba2
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index ae9bb75..0725681 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -354,7 +354,7 @@ struct cp_private {
unsigned rx_tail ____cacheline_aligned;
struct cp_desc *rx_ring;
- struct ring_info rx_skb[CP_RX_RING_SIZE];
+ struct sk_buff *rx_skb[CP_RX_RING_SIZE];
unsigned rx_buf_sz;
unsigned tx_head ____cacheline_aligned;
@@ -541,7 +541,7 @@ rx_status_loop:
struct cp_desc *desc;
unsigned buflen;
- skb = cp->rx_skb[rx_tail].skb;
+ skb = cp->rx_skb[rx_tail];
BUG_ON(!skb);
desc = &cp->rx_ring[rx_tail];
@@ -596,7 +596,7 @@ rx_status_loop:
mapping = pci_map_single(cp->pdev, new_skb->data, buflen,
PCI_DMA_FROMDEVICE);
- cp->rx_skb[rx_tail].skb = new_skb;
+ cp->rx_skb[rx_tail] = new_skb;
cp_rx_skb(cp, skb, desc);
rx++;
@@ -1097,7 +1097,7 @@ static int cp_refill_rx (struct cp_priva
mapping = pci_map_single(cp->pdev, skb->data, cp->rx_buf_sz,
PCI_DMA_FROMDEVICE);
- cp->rx_skb[i].skb = skb;
+ cp->rx_skb[i] = skb;
cp->rx_ring[i].opts2 = 0;
cp->rx_ring[i].addr = cpu_to_le64(mapping);
@@ -1152,11 +1152,11 @@ static void cp_clean_rings (struct cp_pr
unsigned i;
for (i = 0; i < CP_RX_RING_SIZE; i++) {
- if (cp->rx_skb[i].skb) {
+ if (cp->rx_skb[i]) {
desc = cp->rx_ring + i;
pci_unmap_single(cp->pdev, le64_to_cpu(desc->addr),
cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
- dev_kfree_skb(cp->rx_skb[i].skb);
+ dev_kfree_skb(cp->rx_skb[i]);
}
}
@@ -1176,7 +1176,7 @@ static void cp_clean_rings (struct cp_pr
memset(cp->rx_ring, 0, sizeof(struct cp_desc) * CP_RX_RING_SIZE);
memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
- memset(&cp->rx_skb, 0, sizeof(struct ring_info) * CP_RX_RING_SIZE);
+ memset(cp->rx_skb, 0, sizeof(struct sk_buff *) * CP_RX_RING_SIZE);
memset(&cp->tx_skb, 0, sizeof(struct ring_info) * CP_TX_RING_SIZE);
}
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH 3/7] 8139cp: ring_info removal for the receive path
2006-08-31 20:49 ` [PATCH 3/7] 8139cp: ring_info removal for the receive path Francois Romieu
@ 2006-09-06 14:47 ` Jeff Garzik
2006-09-10 21:10 ` Francois Romieu
0 siblings, 1 reply; 13+ messages in thread
From: Jeff Garzik @ 2006-09-06 14:47 UTC (permalink / raw)
To: Francois Romieu; +Cc: netdev, Pierre Ossman, akpm
Francois Romieu wrote:
> The ring_info.len field is not used at all. cp_private.rx_skb is
> turned into an array of sk_buff *.
>
> Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Need to remove the now-dead struct ring_info.
Otherwise, patchset looks OK.
When fixed, I'll pull into #upstream, just let me know...
Jeff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/7] 8139cp: ring_info removal for the receive path
2006-09-06 14:47 ` Jeff Garzik
@ 2006-09-10 21:10 ` Francois Romieu
0 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-09-10 21:10 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev, Pierre Ossman, akpm
Jeff Garzik <jgarzik@pobox.com> :
> Francois Romieu wrote:
> >The ring_info.len field is not used at all. cp_private.rx_skb is
> >turned into an array of sk_buff *.
> >
> >Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
>
> Need to remove the now-dead struct ring_info.
I should have written "is not used at all in the receive path".
If one wants to remove ring_info completely, something like the
patch below is required:
8139cp: ring_info removal for the transmit path
<handwaving>
As long as the descriptor fits on a single cacheline, the change
should be really free.
</handwaving>
Now ring_info is not used at all.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index bbdaa18..c3b8400 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -314,11 +314,6 @@ struct cp_desc {
u64 addr;
};
-struct ring_info {
- struct sk_buff *skb;
- u32 len;
-};
-
struct cp_dma_stats {
u64 tx_ok;
u64 rx_ok;
@@ -360,7 +355,7 @@ struct cp_private {
unsigned tx_head ____cacheline_aligned;
unsigned tx_tail;
struct cp_desc *tx_ring;
- struct ring_info tx_skb[CP_TX_RING_SIZE];
+ struct sk_buff *tx_skb[CP_TX_RING_SIZE];
unsigned rx_buf_sz;
unsigned wol_enabled : 1; /* Is Wake-on-LAN enabled? */
@@ -721,11 +716,12 @@ static void cp_tx (struct cp_private *cp
if (status & DescOwn)
break;
- skb = cp->tx_skb[tx_tail].skb;
+ skb = cp->tx_skb[tx_tail];
BUG_ON(!skb);
pci_unmap_single(cp->pdev, le64_to_cpu(txd->addr),
- cp->tx_skb[tx_tail].len, PCI_DMA_TODEVICE);
+ le32_to_cpu(txd->opts1) & 0xffff,
+ PCI_DMA_TODEVICE);
if (status & LastFrag) {
if (status & (TxError | TxFIFOUnder)) {
@@ -752,7 +748,7 @@ static void cp_tx (struct cp_private *cp
dev_kfree_skb_irq(skb);
}
- cp->tx_skb[tx_tail].skb = NULL;
+ cp->tx_skb[tx_tail] = NULL;
tx_tail = NEXT_TX(tx_tail);
}
@@ -822,8 +818,7 @@ #endif
txd->opts1 = cpu_to_le32(flags);
wmb();
- cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].len = len;
+ cp->tx_skb[entry] = skb;
entry = NEXT_TX(entry);
} else {
struct cp_desc *txd;
@@ -839,8 +834,7 @@ #endif
first_len = skb_headlen(skb);
first_mapping = pci_map_single(cp->pdev, skb->data,
first_len, PCI_DMA_TODEVICE);
- cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].len = first_len;
+ cp->tx_skb[entry] = skb;
entry = NEXT_TX(entry);
for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) {
@@ -881,8 +875,7 @@ #endif
txd->opts1 = cpu_to_le32(ctrl);
wmb();
- cp->tx_skb[entry].skb = skb;
- cp->tx_skb[entry].len = len;
+ cp->tx_skb[entry] = skb;
entry = NEXT_TX(entry);
}
@@ -1159,12 +1152,13 @@ static void cp_clean_rings (struct cp_pr
}
for (i = 0; i < CP_TX_RING_SIZE; i++) {
- if (cp->tx_skb[i].skb) {
- struct sk_buff *skb = cp->tx_skb[i].skb;
+ if (cp->tx_skb[i]) {
+ struct sk_buff *skb = cp->tx_skb[i];
desc = cp->tx_ring + i;
pci_unmap_single(cp->pdev, le64_to_cpu(desc->addr),
- cp->tx_skb[i].len, PCI_DMA_TODEVICE);
+ le32_to_cpu(desc->opts1) & 0xffff,
+ PCI_DMA_TODEVICE);
if (le32_to_cpu(desc->opts1) & LastFrag)
dev_kfree_skb(skb);
cp->net_stats.tx_dropped++;
@@ -1175,7 +1169,7 @@ static void cp_clean_rings (struct cp_pr
memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
memset(cp->rx_skb, 0, sizeof(struct sk_buff *) * CP_RX_RING_SIZE);
- memset(&cp->tx_skb, 0, sizeof(struct ring_info) * CP_TX_RING_SIZE);
+ memset(cp->tx_skb, 0, sizeof(struct sk_buff *) * CP_TX_RING_SIZE);
}
static void cp_free_rings (struct cp_private *cp)
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/7] 8139cp: sync the device private data with its r8169 counterpart
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
` (2 preceding siblings ...)
2006-08-31 20:49 ` [PATCH 3/7] 8139cp: ring_info removal for the receive path Francois Romieu
@ 2006-08-31 20:51 ` Francois Romieu
2006-08-31 20:51 ` [PATCH 5/7] 8139cp: removal of useless BUG_ON() check Francois Romieu
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:51 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
struct cp_private is reorganized to be more easily compared between the
r8169 and the 8139cp drivers.
The alignment should not be impacted.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
d03d376dd29cae53bf70a21a0c26b306abe37326
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 0725681..9aef517 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -352,23 +352,23 @@ struct cp_private {
struct net_device_stats net_stats;
struct cp_extra_stats cp_stats;
- unsigned rx_tail ____cacheline_aligned;
+ unsigned rx_head ____cacheline_aligned;
+ unsigned rx_tail;
struct cp_desc *rx_ring;
struct sk_buff *rx_skb[CP_RX_RING_SIZE];
- unsigned rx_buf_sz;
unsigned tx_head ____cacheline_aligned;
unsigned tx_tail;
-
struct cp_desc *tx_ring;
struct ring_info tx_skb[CP_TX_RING_SIZE];
- dma_addr_t ring_dma;
+
+ unsigned rx_buf_sz;
+ unsigned wol_enabled : 1; /* Is Wake-on-LAN enabled? */
#if CP_VLAN_TAG_USED
struct vlan_group *vlgrp;
#endif
-
- unsigned int wol_enabled : 1; /* Is Wake-on-LAN enabled? */
+ dma_addr_t ring_dma;
struct mii_if_info mii_if;
};
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 5/7] 8139cp: removal of useless BUG_ON() check
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
` (3 preceding siblings ...)
2006-08-31 20:51 ` [PATCH 4/7] 8139cp: sync the device private data with its r8169 counterpart Francois Romieu
@ 2006-08-31 20:51 ` Francois Romieu
2006-08-31 20:52 ` [PATCH 6/7] 8139cp: pci_get_drvdata(pdev) can not be NULL in suspend handler Francois Romieu
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:51 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
netdev_priv() will provide a nice oops a few lines before
the BUG_ON() check.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
e68970e7543815133224f79a858e7c9e0c42f4de
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 9aef517..94ab3c3 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -2009,7 +2009,6 @@ static void cp_remove_one (struct pci_de
struct net_device *dev = pci_get_drvdata(pdev);
struct cp_private *cp = netdev_priv(dev);
- BUG_ON(!dev);
unregister_netdev(dev);
iounmap(cp->regs);
if (cp->wol_enabled)
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 6/7] 8139cp: pci_get_drvdata(pdev) can not be NULL in suspend handler
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
` (4 preceding siblings ...)
2006-08-31 20:51 ` [PATCH 5/7] 8139cp: removal of useless BUG_ON() check Francois Romieu
@ 2006-08-31 20:52 ` Francois Romieu
2006-08-31 20:53 ` [PATCH 7/7] 8139cp: use PCI_DEVICE() to shorten the PCI device table Francois Romieu
2006-08-31 21:28 ` [PATCH 0/7] 8139cp: misc minor changes Pierre Ossman
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:52 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
1) pci_set_drvdata() is used in cp_{init/remove}_one to initialize/reset
driver_data to the relevant value (resp. net_device * and NULL).
2) each of the 3 relevant functions is issued under (device *)->sem:
2.1) pci_unregister_driver
-> driver_unregister
-> bus_remove_driver
-> driver_detach (takes (device *)->sem)
-> __device_release_driver(dev)
-> dev->bus-remove(dev) (== pci_device_remove)
-> drv->remove(pdev) (== cp_remove_one)
[...]
pci_dev->driver = NULL;
2.2) pci_register_driver
-> __pci_register_driver
-> driver_register
-> bus_add_driver
-> driver_attach
-> __driver_attach (takes (device *)->sem)
-> driver_probe_device(drv, dev)
-> dev->bus->probe(dev) (== pci_device_probe)
-> _pci_device_probe(drv, pci_dev)
-> pci_call_probe(drv, pci_dev, id)
-> drv->probe(dev, id) (== cp_init_one)
[...]
pci_dev->driver = drv;
2.3) suspend_device (takes (device *)->sem)
-> dev->bus->suspend(dev) (== pci_device_suspend)
checking for drv = pci_dev->driver != NULL
[...]
-> drv->suspend(pci_dev, state) (== cp_suspend)
dev->sem and the state of pci_dev->driver provide the expected result.
St Mary's day was a bit rainy here.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
7668a4945ba0e17a61e535a6c67aa64a319a03b4
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 94ab3c3..a123d28 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -2023,14 +2023,12 @@ static void cp_remove_one (struct pci_de
#ifdef CONFIG_PM
static int cp_suspend (struct pci_dev *pdev, pm_message_t state)
{
- struct net_device *dev;
- struct cp_private *cp;
+ struct net_device *dev = pci_get_drvdata(pdev);
+ struct cp_private *cp = netdev_priv(dev);
unsigned long flags;
- dev = pci_get_drvdata (pdev);
- cp = netdev_priv(dev);
-
- if (!dev || !netif_running (dev)) return 0;
+ if (!netif_running(dev))
+ return 0;
netif_device_detach (dev);
netif_stop_queue (dev);
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 7/7] 8139cp: use PCI_DEVICE() to shorten the PCI device table
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
` (5 preceding siblings ...)
2006-08-31 20:52 ` [PATCH 6/7] 8139cp: pci_get_drvdata(pdev) can not be NULL in suspend handler Francois Romieu
@ 2006-08-31 20:53 ` Francois Romieu
2006-08-31 21:28 ` [PATCH 0/7] 8139cp: misc minor changes Pierre Ossman
7 siblings, 0 replies; 13+ messages in thread
From: Francois Romieu @ 2006-08-31 20:53 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, Pierre Ossman, akpm
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
---
drivers/net/8139cp.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
cccb20d3a9b7c6d4b6e1b52ee02814e6094aaa12
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index a123d28..bbdaa18 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -406,10 +406,8 @@ static int cp_set_eeprom(struct net_devi
struct ethtool_eeprom *eeprom, u8 *data);
static struct pci_device_id cp_pci_tbl[] = {
- { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, },
- { PCI_VENDOR_ID_TTTECH, PCI_DEVICE_ID_TTTECH_MC322,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, },
+ { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTTECH, PCI_DEVICE_ID_TTTECH_MC322), },
{ },
};
MODULE_DEVICE_TABLE(pci, cp_pci_tbl);
--
1.3.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH 0/7] 8139cp: misc minor changes
2006-08-31 20:47 [PATCH 0/7] 8139cp: misc minor changes Francois Romieu
` (6 preceding siblings ...)
2006-08-31 20:53 ` [PATCH 7/7] 8139cp: use PCI_DEVICE() to shorten the PCI device table Francois Romieu
@ 2006-08-31 21:28 ` Pierre Ossman
2006-09-01 11:20 ` Francois Romieu
7 siblings, 1 reply; 13+ messages in thread
From: Pierre Ossman @ 2006-08-31 21:28 UTC (permalink / raw)
To: Francois Romieu; +Cc: netdev, jgarzik, akpm
Ehm... why am I included in this? :)
^ permalink raw reply [flat|nested] 13+ messages in thread