aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* [PATCH] libata-hp: implement SCSI part of hotplugTejun Heo2006-05-31
| | | | | | | | | | | Implement SCSI part of hotplug. This must be done in a separate context as SCSI makes use of EH during probing. SCSI scan fails silently if EH is in progress. In such cases, libata pauses briefly and retries until every device is attached. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp: implement hotplugTejun Heo2006-05-31
| | | | | | | | | | | | | | | Implement ATA part of hotplug. To avoid probing broken devices over and over again, disabled devices are not automatically detached. They are detached only if probing is requested for the device or the associated port is offline. Also, to avoid infinite probing loop, Each device is probed only once per EH run. As SATA PHY status is fragile, devices are detached only after it has used up its recovery chances unless explicitly requested by LLDD or user (LLDD may request direct detach if, for example, it supports cold presence detection). Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp: implement ata_eh_detach_dev()Tejun Heo2006-05-31
| | | | | | | | | Implement ata_eh_detach_dev(). This function is responsible for detaching an ATA device and offlining the associated SCSI device atomically so that the detached device is not accessed after ATA detach is complete. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] sata_sil24: update sil24_hardreset()Tejun Heo2006-05-31
| | | | | | | | | | | Use phy debouncing instead of unconditional wait after DEV_RST and make sil24_hardreset() to request followup SRST as that's the only way to wait for !BSY. Note that the original implementation never worked - if the cached status was !BSY, ata_busy_sleep() finished immediately; otherwise, it timed out regardless of the actual device status. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] sata_sil24: rename PORT_PRB to PORT_LRAM and add PORT_LRAM_SLOT_SZTejun Heo2006-05-31
| | | | | | | PORT_PRB is a misnomer as the area also contains other stuff. Rename it to PORT_LRAM and add PORT_LRAM_SLOT_SZ. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] sata_sil: new interrupt handlerTejun Heo2006-05-31
| | | | | | | | | | | | | | | The DMA complete bit of these controllers reflects ATA IRQ status while no DMA command is in progress. So, we can tell whether the controller is raising an interrupt or not in deterministic manner. This patch gives sata_sil its own interrupt handler which behaves much better than the original one in terms of error detection and handling. This change is also necessary for later hotplug support. Further improvements are possible, in both 2 and 4 ports versions, we can get all status with only one readl and using custom bmdma operations can further cut down register accesses. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] sata_sil: add new constants in preparation for new interrupt handlerTejun Heo2006-05-31
| | | | | | | sata_sil is about to get a brand new interrupt handler. Add relevant constants. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata: export ata_hsm_move()Tejun Heo2006-05-31
| | | | | | | ata_hsm_move() will be used by LLDDs which depend on standard PIO HSM but implement their own interrupt handlers. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: implement followup softreset handlingTejun Heo2006-05-31
| | | | | | | | | | | | | | | In some cases, hardreset must be followed by SRST. * some controllers can't classify with hardreset * some controllers can't wait for !BSY after hardreset (LLDD should explicitly request followup softreset by returning -EAGAIN) * (later) PM needs SRST w/ PMP==15 to operate after hardreset To handle above cases, this patch implements follow-up softreset. After a hardreset, ata_eh_reset() checks whether any of above conditions are met and do a follow-up softreset if necessary. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: add prereset() method and implement ata_std_prereset()Tejun Heo2006-05-31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With hotplug, every reset might be a probing reset and thus something similar to probe_init() is needed. prereset() method is called before a series of resets to a port and is the counterpart of postreset(). prereset() can tell EH to use different type of reset or skip reset by modifying ehc->i.action. This patch also implements ata_std_prereset(). Most controllers should be able to use this function directly or with some wrapping. After hotplug, different controllers need different actions to resume the PHY and detect the newly attached device. Controllers can be categorized as follows. * Controllers which can wait for the first D2H FIS after hotplug. Note that if the waiting is implemented by polling TF status, there needs to be a way to set BSY on PHY status change. It can be implemented by hardware or with the help of the driver. * Controllers which can wait for the first D2H FIS after sending COMRESET. These controllers need to issue COMRESET to wait for the first FIS. Note that the received D2H FIS could be the first D2H FIS after POR (power-on-reset) or D2H FIS in response to the COMRESET. Some controllers use COMRESET as TF status synchronization point and clear TF automatically (sata_sil). * Controllers which cannot wait for the first D2H FIS reliably. Blindly issuing SRST to spinning-up device often results in command issue failure or timeout, causing extended delay. For these controllers, ata_std_prereset() explicitly waits ATA_SPINUP_WAIT (currently 8s) to give newly attached device time to spin up, then issues reset. Note that failing to getting ready in ATA_SPINUP_WAIT is not critical. libata will retry. So, the timeout needs to be long enough to spin up most devices. LLDDs can tell ata_std_prereset() which of above action is needed with ATA_FLAG_HRST_TO_RESUME and ATA_FLAG_SKIP_D2H_BSY flags. These flags are PHY-specific property and will be moved to ata_link later. While at it, this patch unifies function typedef's such that they all have named arguments. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: implement sata_phy_debounce()Tejun Heo2006-05-31
| | | | | | | | | | | | | | | With hotplug, PHY always needs to be debounced before a reset as any reset might find new devices. Extract PHY waiting code from sata_phy_resume() and extend it to include SStatus debouncing. Note that sata_phy_debounce() is superset of what used to be done inside sata_phy_resume(). Three default debounce timing parameters are defined to be used by hot/boot plug. As resume failure during probing will be properly handled as errors, timeout doesn't have to be long as before. probeinit() uses the same timeout to retain the original behavior. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: make probing related functions globalTejun Heo2006-05-31
| | | | | | | Hotplug will be implemented in libata-eh.c. Make ata_dev_read_id() and ata_dev_configure() global. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: add ata_aux_wqTejun Heo2006-05-31
| | | | | | | | It's best to run ATA hotplug from EH but attaching SCSI devices needs working EH. ata_aux_wq is used to give SCSI hotplug operations a separate context. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: store attached SCSI deviceTejun Heo2006-05-31
| | | | | | | | | | | | | Add device persistent field dev->sdev and store the attached SCSI device. With hotplug, libata needs to know the attached SCSI device to offline and detach it, but scsi_device_lookup() cannot be used because libata will reuse SCSI ID numbers - dead but not gone devices (due to zombie opens, etc...) interfere with the lookup. dev->sdev doesn't hold reference to the SCSI device. It's cleared when the SCSI device goes away. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: implement ap->hw_sata_spd_limitTejun Heo2006-05-31
| | | | | | | | | Add ap->hw_sata_spd_limit and initialize it once during the boot initialization (or driver load initialization). ap->sata_spd_limit is reset to ap->hw_sata_spd_limit on hotplug. This prevents spd limits introduced by earlier devices from affecting new devices. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: use __ata_scsi_find_dev()Tejun Heo2006-05-31
| | | | | | Convert direct sdev -> dev lookup to __ata_scsi_find_dev(). Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: update ata_scsi_find_dev() and friendsTejun Heo2006-05-31
| | | | | | | | Separate out ata_find_dev() and __ata_scsi_find_dev() from ata_scsi_find_dev(). These will be used by later hotplug implementation. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: make some ata_device fields persistentTejun Heo2006-05-31
| | | | | | | | | | | | | | | Lifetimes of some fields span over device plugging/unplugging. This patch moves such persistent fields to the top of ata_device and separate them with ATA_DEVICE_CLEAR_OFFSET. Fields above the offset are initialized once during host initializatino while all other fields are cleared before hotplugging. Currently ->ap, devno and part of flags are persistent. Note that flags is partially cleared while holding host_set lock. This is to synchronize with later warm plug implementation which will record hotplug request in dev->flags. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: implement ata_dev_init()Tejun Heo2006-05-31
| | | | | | | | Move initialization of struct ata_device into ata_dev_init() in preparation for hotplug. This patch calls ata_dev_init() from ata_host_init() and thus makes no functional difference. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata-hp-prep: add flags and eh_info/context fields for hotplugTejun Heo2006-05-31
| | | | | | Add hotplug related flags and eh_info/context fields. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata: implement ata_eh_wait()Tejun Heo2006-05-31
| | | | | | | | | Implement ata_eh_wait(). On return from this function, it's guaranteed that the EH which was pending or in progress when the function was called is complete - including the tailing part of SCSI EH. This will be used by hotplug and others to synchronize with EH. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata: shift host flag constantsTejun Heo2006-05-31
| | | | | | | Nudge host flag constants to make a room after ATA_FLAG_EH_PENDING. New EH flag will be added. Signed-off-by: Tejun Heo <htejun@gmail.com>
* [PATCH] libata: set PIO-0 after successful EH resetTejun Heo2006-05-31
| | | | | | | | | Set ata_device->pio_mode to XFER_PIO_0 after a successful reset. This is to keep EH resets consistent with probe resets as updated by the commit b6079ca409bf88c248992e96510dd6f610f7ed89. Note that, with soon-to-follow hotplug update, EH resets will include probe resets. Signed-off-by: Tejun Heo <htejun@gmail.com>
* libata debugging: set initial dbg valueBorislav Petkov2006-05-29
| | | | | | | | | | | This patch sets the prerequisites for the new debugging scheme that more or less resembles Donald Becker's net driver example. This one liner doesn't change any functionality beside setting the appropriate debug level for the msg_enable control in the ata_port struct, which will be later used by the ata_msg_* macros to control the amount of debug information sent to printk. Signed-off-by: <petkov@uni-muenster.de> Signed-off-by: Jeff Garzik <jeff@garzik.org>
* Merge branch 'master' into upstreamJeff Garzik2006-05-29
|\
| * Merge branch 'upstream-fixes' of ↵Linus Torvalds2006-05-28
| |\ | | | | | | | | | | | | | | | | | | master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev * 'upstream-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev: [PATCH] the latest consensus libata resume fix
| * | ppc: Fix typo in TI_LOCAL_FLAGS definitionPaul Mackerras2006-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | A typo crept in with commit ea1e847cc202e805769c3c46ba5e5c53714068a1 which defined TI_LOCAL_FLAGS to be the offset of the `flags' field of struct thread_info, rather than the `local_flags' field. This fixes it. The typo was pointed out by Guennadi Liakhovetski. Signed-off-by: Paul Mackerras <paulus@samba.org>
| * | Merge branch 'merge' of ↵Linus Torvalds2006-05-27
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: [PATCH] powerpc: fix RTC/NVRAM accesses on Maple [PATCH] ppc32 CPM_UART: various fixes for pq2 uart users [PATCH] powerpc: linuxppc64.org no more
| | * | [PATCH] powerpc: fix RTC/NVRAM accesses on MapleHollis Blanchard2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Due to a firmware device tree bug, RTC and NVRAM accesses (including halt/reboot) on Maple have been broken since January, when an untested build fix went in. This code patches the device tree in Linux. Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com> Signed-off-by: Segher Boessenkool <segher@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
| | * | [PATCH] ppc32 CPM_UART: various fixes for pq2 uart usersVitaly Bordug2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes various odd things that missed update together with cpm_uart platform_device move. Unified resources names, restructurisation, etc. Also, addressed issue with recent phys/virt translation rework. Being cache-coherent, CPM2's do alloc_bootmem() for the console stuff, and it was used to treat console buffer descriptor mapping 1:1 (as in CPM1 case), which is definitely wrong. Signed-off-by: Vitaly Bordug <vbordug@ru.mvista.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
| | * | [PATCH] powerpc: linuxppc64.org no moreArthur Othieno2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | http://linuxppc64.org has long been a redirect to the canonical http://penguinppc.org/ppc64/ -- update all instances accordingly, as ACKed by Hollis: On Wed, Jan 18, 2006 at 09:48:08AM -0600, Hollis Blanchard wrote: > On Wed, 2006-01-18 at 13:07 +0100, Olaf Hering wrote: > > On Wed, Jan 18, Arthur Othieno wrote: > > > > > > What about the s/linuxppc64\.org/penguinppc\.org/g case? Or is > > > penguinppc64.org preferable? Or am I just taking it too far? ;) > > > > They are redirected on DNS or HTTP level. > > HTTP level, but that doesn't answer his question. > > As the maintainer of that site, I would prefer to remove the > linuxppc64.org reference. Signed-off-by: Arthur Othieno <apgo@patchbomb.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
| * | | [netdrvr s/390] trim trailing whitespaceJeff Garzik2006-05-26
| | | | | | | | | | | | | | | | | | | | Previous fix patches added a bunch of trailing whitespace, which git-applymbox complained loudly about.
| * | | [PATCH] s390: lcs driver bug fixes and improvements [2/2]Klaus Wacker2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the second lcs driver patch containing the rest of lcs fixes. Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | [PATCH] s390: lcs driver bug fixes and improvements [1/2]Klaus Wacker2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several problems occured with lcs device driver: - device not operational anymore after cable pull/plug-in. - unpredictable results occured, e.g. kernel panic using cards of type QD8F. - STOPLAN and delete multicast address command were not proper recognized by OSA card under heavy network workload. - channel/device error checks missing in interrupt handler. To fix all problems at once recovery of lcs devices has been improved. missing error checks in lcs interrupt handler has been added. Once a hardware problem occurs lcs will recover the device now properly. Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | [PATCH] s390: qeth driver fixesUrsula Braun2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From: Frank Blaschka <Frank.Blaschka@de.ibm.com> From: Frank Pavlic <fpavlic@de.ibm.com> - fix fake_ll during initial device bringup. fake_ll was not active after first start of the device. Problem only occured when qeth was built without IPV6 support. - avoid skb usage after invocation of qeth_flush_buffers, because skb might already be freed. - remove yet another useless netif_wake_queue in qeth_softsetup_ipv6 since this function is only called when device is going online. In this case card->state will never be in state UP. So let the net_device queue down . Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | [PATCH] s390: qeth driver fixesUrsula Braun2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From: Frank Pavlic <fpavlic@de.ibm.com> - correct checking of sscanf-%n value in qeth_string_to_ipaddr(). - don't use netif_stop_queue outside the hard_start_xmit routine. Rather use netif_tx_disable. - don't call qeth_netdev_init on a recovery. Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | [PATCH] s390: minor fix in cu3088Cornelia Huck2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In case of a parse error for the cu3088 group attribute, return -EINVAL instead of count. Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | [PATCH] pcnet32: remove incorrect pcnet32_free_ringDon Fry2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During a code scan for another change I discovered that this call to pcnet32_free_ring must be removed. If the open fails due to a lack of memory all the ring structures are removed via the call to free_ring and a subsequent call to open will dereference a null pointer in pcnet32_init_ring. Please apply to 2.6.17. Signed-off-by: Don Fry <brazilnut@us.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
| * | | e1000: add shutdown handler back to fix WOLAuke Kok2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Someone was waaay too aggressive and removed e1000's reboot notifier instead of porting it to the new way of the shutdown handler. This change broke wake on lan. Add the shutdown handler back in using the same method as e100 uses. Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com> (cherry picked from c653e6351e371b33b29871e5eedf610ffb3be037 commit)
| * | | Merge branch 'upstream-fixes' of ↵Jeff Garzik2006-05-26
| |\ \ \ | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
| | * | | [PATCH] arlan: fix section mismatch warningsRandy Dunlap2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix section mismatch warnings: WARNING: drivers/net/wireless/arlan.o - Section mismatch: reference to .init.text:arlan_probe from .text between 'init_module' (at offset 0x3526) and 'cleanup_module' WARNING: drivers/net/wireless/arlan.o - Section mismatch: reference to .init.text:init_arlan_proc from .text between 'init_module' (at offset 0x3539) and 'cleanup_module' WARNING: drivers/net/wireless/arlan.o - Section mismatch: reference to .exit.text:cleanup_arlan_proc from .text between 'cleanup_module' (at offset 0x356c) and 'arlan_diagnostic_info_string' Signed-off-by: Randy Dunlap <rdunlap@xenotime.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
| | * | | [PATCH] wavelan: fix section mismatchRandy Dunlap2006-05-26
| | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix section mismatch warning: WARNING: drivers/net/wireless/wavelan.o - Section mismatch: reference to .init.text: from .text between 'init_module' (at offset 0x371e) and 'cleanup_module' Signed-off-by: Randy Dunlap <rdunlap@xenotime.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
* | | | Merge branch 'upstream-fixes' into upstreamJeff Garzik2006-05-28
|\ \ \ \ | | |_|/ | |/| | | | | | | | | | | | | | Conflicts: drivers/scsi/libata-core.c
| * | | [PATCH] the latest consensus libata resume fixMark Lord2006-05-28
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Okay, just to sum things up. This forces libata to wait for up to 2 seconds for BUSY|DRQ to clear on resume before continuing. [jgarzik adds...] During testing we never saw DRQ asserted, but nonetheless (a) this works and (b) testing for DRQ won't hurt. Signed-off-by: Mark Lord <liml@rtr.ca> Acked-by: Jens Axboe <axboe@suse.de> Signed-off-by: Jeff Garzik <jeff@garzik.org>
* | | [PATCH] libata: add pio_data_xfer_noirqAlan Cox2006-05-26
| | | | | | | | | | | | | | | Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
* | | [PATCH] PCI identifiers for the pata_via updateAlan Cox2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | These IDs are also used by the drivers/ide/pci changes submitted by VIA. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
* | | Merge branch 'master' into upstreamJeff Garzik2006-05-26
|\| |
| * | Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6Linus Torvalds2006-05-26
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | * master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [NET]: dev.c comment fixes [IPV6] ROUTE: Don't try less preferred routes for on-link routes. [IRDA]: *_DONGLE should depend on IRTTY_SIR [MAINTAINERS]: Add entry for netem
| | * | [NET]: dev.c comment fixesStephen Hemminger2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Noticed that dev_alloc_name() comment was incorrect, and more spellung errors. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
| | * | [IPV6] ROUTE: Don't try less preferred routes for on-link routes.YOSHIFUJI Hideaki2006-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In addition to the real on-link routes, NONEXTHOP routes should be considered on-link. Problem reported by Meelis Roos <mroos@linux.ee>. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Acked-by: Meelis Roos <mroos@linux.ee> Signed-off-by: David S. Miller <davem@davemloft.net>