summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'linux-2.6.31.y' of ↵David S. Miller2009-06-1214-153/+320
|\ | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/inaky/wimax
| * wimax: fix gcc warnings in sh4 when calling BUG()Inaky Perez-Gonzalez2009-06-112-2/+6
| | | | | | | | | | | | | | | | | | | | SH4's BUG() seems to confuse the compiler as it is considered to return; thus, some functions would trigger usage of uninitialized variables or non-void functions returning void. Work around by initializing/returning. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax: fix warning caused by not checking retval of rfkill_set_hw_state()Inaky Perez-Gonzalez2009-06-111-1/+2
| | | | | | | | | | | | | | Caused by an API update. The return value can be safely ignored, as there is notthing we can do with it. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: use -EL3RST to indicate device reset instead of -ERESTARTSYSCindy H Kao2009-06-112-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the i2400m device resets, the driver code will force some functions to return a -ERESTARTSYS error code, which can is used by the caller to determine which recovery actions to take. However, in certain situations the only thing that can be done is to bubble up said error code to user space, for handling. However, -ERESTARSYS was a poor choice, as it is supposed to be used by the kernel only. As such, replace -ERESTARTSYS with -EL3RST; as well, in i2400m_msg_to_dev(), when the device is in boot mode (following a recent reset), return -EL3RST instead of -ENODEV (meaning the device is in bootrom mode after a reset, not that the device was disconnected, and thus, normal commands cannot be executed). Signed-off-by: Cindy H Kao <cindy.h.kao@intel.com>
| * wimax/i2400m: when bootstrap fails, reinitialize the bootromCindy H Kao2009-06-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | When a device reset happens during firmware load [in i2400m_dev_bootstrap()], __i2400m_dev_start() will retry a number of times. However, for those retries to be able to accomplish anything, the device's bootrom has to be reinitialized. Thus, on the retry path, pass the I2400M_MAC_REINIT to the firmware load code. Signed-off-by: Cindy H Kao <cindy.h.kao@intel.com>
| * wimax/i2400m/sdio: Move all the RX code to a unified, IRQ based receive routineInaky Perez-Gonzalez2009-06-114-80/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current SDIO code was working in polling mode for boot-mode (firmware load) mode. This was causing issues on some hardware. Moved all the RX code to use a unified IRQ handler that based on the type of data the device is sending can discriminate and decide which is the right destination. As well, all the reads from the device are made to be at least the block size (256); the driver will ignore the rest when not needed. Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com> Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: don't reset device when bootrom init retries are exceededInaky Perez-Gonzalez2009-06-111-2/+1Star
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When i2400m_bootrom_init() fails to put the device into a state of being ready to accept firmware, the driver was currently trying to reset it if it failed to do so. This is not too useful; as part of trying to put the device in the right state a few resets have already been tried. At this point, things are probably fried out and an extra reset might do more harm than good (for example causing reseting of other functions in the same composite device). So it is left up to the callers to determine the error path to take (at the end this is always i2400m_setup(), who depending on how many retries are left, might give up on the device). From a fix by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m/sdio: Add device specific poke table.Dirk Brandewie2009-06-111-0/+9
| | | | | | | | | | | | Add a poke table for the SDIO device (as it is different than USB). Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
| * wimax/i2400m: move boot time poke table out of common driverDirk Brandewie2009-06-112-32/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | This change moves the table of "pokes" performed on the device at boot time to the bus specific portion of the driver. Different models of the i2400m device supported by this driver require different poke tables, thus having a single table that works for all is impossible. For that, the table is moved to the bus-specific driver, who can decide which table to use based on the specifics of the device and point the generic driver to it. Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
| * wimax/i2400m: Allow bus-specific driver to specify retry countInaky Perez-Gonzalez2009-06-115-2/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code that sets up the i2400m (firmware load and general driver setup after it) includes a couple of retry loops. The SDIO device sometimes can get in more complicated corners than the USB one (due to its interaction with other SDIO functions), that require trying a few more times. To solve that, without having a failing USB device taking longer to be considered dead, allow the retry counts to be specified by the bus-specific driver, which the general driver takes as a parameter. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: if a device reboot happens during probe, handle itInaky Perez-Gonzalez2009-06-113-0/+5
| | | | | | | | | | | | | | | | | | | | | | When a device reboot happens when we are under probe, with init_mutex taken, make sure we can recover. Have dev_reset_handle set boot mode and i2400m_msg_to_dev() will see it and fail gracefully instead of timing out. Found and diagnosed by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: fix oops when the TX FIFO fills up due to a missing checkInaky Perez-Gonzalez2009-06-111-0/+2
| | | | | | | | | | | | | | | | | | | | When the TX FIFO filled up and i2400m_tx_new() failed to allocate a new TX message header, a missing check for said condition was causing a kernel oops when trying to dereference a NULL i2400m->tx_msg pointer. Found and diagnosed by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: don't reset device on i2400m_dev_shutdown()Inaky Perez-Gonzalez2009-06-111-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i2400m_dev_shutdown() tried to reset the device to put it in a known state before shutting down. But that turned out to be pointless. We reach this case in two paths: 1 - when the device resets, to clean up state 2 - when the driver is unloaded, for the same however, in both cases it is pointless; in (1) the device is already reset, why do it again? in (2) we can't -- the USB stack, for example, doesn't allow communicating with the device when the driver is being unbound and if the device is disconnected, the device is gone already. So just remove it. Leave the function as a placeholder for future cleanups that will be done from data allocated by the driver during device operation. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: fix panic due to missed corner cases on tail_room calculationInaky Perez-Gonzalez2009-06-111-2/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i2400m_tx_skip_tail() needs to handle the special case of being called when the tail room that is left over in the FIFO is zero. This happens when a TX message header was opened at the very end of the FIFO (without payloads). The i2400m_tx_close() code already marked said TX message (header) to be skipped and this function should be doing nothing. It is called anyway because it is part of a common "corner case" path handling which takes care of more cases than only this one. The tail room computation was also improved to take care of the case when tx_in is at the end of the buffer boundary; tail_room has to be modded (%) to the buffer size. To do that in a single well-documented place, __i2400m_tx_tail_room() is introduced and used. Treat i2400m->tx_in == 0 as a corner case and handle it accordingly. Found and diagnosed by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: fix panic/warnings caused by missed check on empty TX messageInaky Perez-Gonzalez2009-06-111-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In some situations, when a new TX message header is started, there might be no space for data payloads. In this case the message is left with zero payloads and the i2400m_tx_close() function has just to mark it as "to skip". If it tries to go ahead it will overwrite things because there is no space to add padding as defined by the bus-specific layer. This can cause buffer overruns and in some stress cases, panics. Found and diagnosed by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: rename misleading I2400M_PL_PAD to I2400M_PL_ALIGNInaky Perez-Gonzalez2009-06-114-6/+6
| | | | | | | | | | | | | | The constant is being use as an alignment factor, not as a padding factor; made reading/reviewing the code quite confusing. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m/sdio: Implement I2400M_RT_BUS reset typeDirk Brandewie2009-06-112-3/+19
| | | | | | | | | | | | | | | | | | This reset type causes the WiMAX function to be disabled and re-enabled, which will force the WiMAX device to reset and enter boot mode. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com> Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
| * wimax/i2400m: Change d_printf() level for secure boot messagesDirk Brandewie2009-06-111-2/+2
| | | | | | | | | | | | | | Changing debug level of print out to support validation engineers getting the messages they need. Signed-off-by: <dirk.j.brandewie@intel.com>
| * wimax/i2400m: i2400m_schedule_work() doesn't need i2400m->work_queueInaky Perez-Gonzalez2009-06-111-1/+0Star
| | | | | | | | | | | | | | By mistake, the BUG_ON() check was left in there and it will fail when called if i2400m->work_queue is still not setup. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: i2400m's work queue should be initialized before RX supportInaky Perez-Gonzalez2009-06-111-7/+14
| | | | | | | | | | | | | | | | RX support is the only user of the work-queue, to process reports/notifications from the device. Thus, it needs the work queue to be initialized first. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: don't call netif_start_queue() in _tx_msg_sent()Inaky Perez-Gonzalez2009-06-111-1/+0Star
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reported and fixed by Cindy H Kao. When the device is stopped __i2400m_dev_stop() stops the network queue. However, when this is done in the middle of heavy network operation, when the bus-specific subdriver is still wrapping up and it reports a sent TX transaction with _tx_msg_sent() right after the device was stopped, the queue was being started again, which was causing a stream of oopsen and finally a panic. In any case, said call has no place there. It's a left over from an early implementation that was discarded later on. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
| * wimax/i2400m: introduce module parameter to disable entering power saveInaky Perez-Gonzalez2009-06-113-2/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The i2400m driver waits for the device to report being ready for entering power save before asking it to do so. This module parameter allows control of said operation; if disabled, the driver won't ask the device to enter power save mode. This is useful in setups where power saving is not so important or when the overhead imposed by network reentry after power save is not acceptable; by combining this with parameter 'idle_mode_disabled', the driver will always maintain both the connection and the device in active state. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
* | mISDN: cleanup mISDNhw.hKarsten Keil2009-06-111-10/+0Star
| | | | | | | | | | | | Remove unused stuff. Signed-off-by: Karsten Keil <keil@b1-systems.de>
* | mISDN: Do not disable IRQ in ph_data_ind()Karsten Keil2009-06-111-5/+2Star
| | | | | | | | | | | | | | | | | | | | | | | | This fix triggering the WARN_ON_ONCE(in_irq() || irqs_disabled()); in local_bh_enable(). Here is no need to grab this lock, this was wrong at all and may cause a deadlock and access to freed memory, since on a TEI remove the current listelement can be deleted under us. So this is clearly a case for list_for_each_entry_safe. Signed-off-by: Karsten Keil <keil@b1-systems.de>
* | drivers/isdn/i4l/isdn_tty.c: fix check for array overindexingRoel Kluin2009-06-111-1/+1
| | | | | | | | | | | | | | | | The check for overindexing of dev->mdm.info[] has an off-by-one. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Karsten Keil <keil@b1-systems.de>
* | mISDN: Free hfcpci IRQ if init was not successfulAndreas Mohr2009-06-111-4/+3Star
| | | | | | | | | | | | | | | | If we get no interrupts for after 3 resets we need to unregister the interrupt function, which is already done outside the loop. Signed-off-by: Andreas Mohr <andi@lisas.de> Signed-off-by: Karsten Keil <keil@b1-systems.de>
* | mISDN: Fix overlapping data accessKarsten Keil2009-06-111-6/+5Star
| | | | | | | | | | | | | | Remove code rewriting a buffer by itself. This fix bug 12970 on bugzilla.kernel.org. Signed-off-by: Karsten Keil <keil@b1-systems.de>
* | ISDN:Fix DMA alloc for hfcpciKarsten Keil2009-06-112-12/+31
| | | | | | | | | | | | Replace wrong code with correct DMA API functions. Signed-off-by: Karsten Keil <keil@b1-systems.de>
* | Merge branch 'master' of ↵David S. Miller2009-06-117-155/+184
|\ \ | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-next-2.6
| * | Bluetooth: Add native RFKILL soft-switch support for all devicesMarcel Holtmann2009-06-082-1/+42
| | | | | | | | | | | | | | | | | | | | | | | | With the re-write of the RFKILL subsystem it is now possible to easily integrate RFKILL soft-switch support into the Bluetooth subsystem. All Bluetooth devices will now get automatically RFKILL support. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Remove unused and unneeded support in virtual driverMarcel Holtmann2009-06-081-31/+0Star
| | | | | | | | | | | | | | | | | | | | | | | | The virtual driver implements fasync and ioctl support, but it is not used and unneeded due to its constraints via the Bluetooth core layer. So too just make the driver simpler, remove support for both of them. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Remove BKL from open callback of virtual driverMarcel Holtmann2009-06-081-4/+0Star
| | | | | | | | | | | | | | | | | | | | | | | | The BKL push down added some BKL into the open callback of the virtual driver. The driver is really simple and need no such locking and so just remove it. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Use wait_event_interruptible for virtual driverMarcel Holtmann2009-06-081-28/+15Star
| | | | | | | | | | | | | | | | | | | | | | | | The virtual driver still uses a home grown way of waiting for events and so just replace it with wait_event_interruptible. And while at it remove the useless access_ok() checks. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Use only MISC_DYNAMIC_MINOR for virtual driverMarcel Holtmann2009-06-081-8/+4Star
| | | | | | | | | | | | | | | | | | | | | | | | Allowing to specify a specific misc minor number for the virtual driver is pretty much useless and nobody is using this feature. So just remove it and use MISC_DYNAMIC_MINOR all the time. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Remove pointless endian conversion helpersMarcel Holtmann2009-06-083-21/+16Star
| | | | | | | | | | | | | | | | | | | | | | | | The Bluetooth source uses some endian conversion helpers, that in the end translate to kernel standard routines. So remove this obfuscation since it is fully pointless. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Add basic constants for L2CAP ERTM support and use themMarcel Holtmann2009-06-082-24/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | This adds the basic constants required to add support for L2CAP Enhanced Retransmission feature. Based on a patch from Nathan Holstein <nathan@lampreynetworks.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Fix errors and warnings in L2CAP reported by checkpatch.plGustavo F. Padovan2009-06-081-27/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch fixes the errors without changing the l2cap.o binary: text data bss dec hex filename 18059 568 0 18627 48c3 l2cap.o.after 18059 568 0 18627 48c3 l2cap.o.before Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Remove unnecessary variable initializationMarcel Holtmann2009-06-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The initial value of err is not used until it is set to -ENOMEM. So just remove the initialization completely. Based on a patch from Gustavo F. Padovan <gustavo@las.ic.unicamp.br> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Use macro for L2CAP hint mask on receiving config requestGustavo F. Padovan2009-06-082-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | Using the L2CAP_CONF_HINT macro is easier to understand than using a hardcoded 0x80 value. Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
| * | Bluetooth: Use macros for L2CAP channel identifiersGustavo F. Padovan2009-06-082-9/+15
| | | | | | | | | | | | | | | | | | | | | | | | Use macros instead of hardcoded numbers to make the L2CAP source code more readable. Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
* | | bonding: fix multiple module load problemStephen Hemminger2009-06-111-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some users still load bond module multiple times to create bonding devices. This accidentally was broken by a later patch about the time sysfs was fixed. According to Jay, it was broken by: commit b8a9787eddb0e4665f31dd1d64584732b2b5d051 Author: Jay Vosburgh <fubar@us.ibm.com> Date: Fri Jun 13 18:12:04 2008 -0700 bonding: Allow setting max_bonds to zero Note: sysfs and procfs still produce WARN() messages when this is done so the sysfs method is the recommended API. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | neigh: fix state transition INCOMPLETE->FAILED via Netlink requestTimo Teras2009-06-111-18/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current code errors out the INCOMPLETE neigh entry skb queue only from the timer if maximum probes have been attempted and there has been no reply. This also causes the transtion to FAILED state. However, the neigh entry can be also updated via Netlink to inform that the address is unavailable. Currently, neigh_update() just stops the timers and leaves the pending skb's unreleased. This results that the clean up code in the timer callback is never called, preventing also proper garbage collection. This fixes neigh_update() to process the pending skb queue immediately if INCOMPLETE -> FAILED state transtion occurs due to a Netlink request. Signed-off-by: Timo Teras <timo.teras@iki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | net: No more expensive sock_hold()/sock_put() on each txEric Dumazet2009-06-114-7/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One of the problem with sock memory accounting is it uses a pair of sock_hold()/sock_put() for each transmitted packet. This slows down bidirectional flows because the receive path also needs to take a refcount on socket and might use a different cpu than transmit path or transmit completion path. So these two atomic operations also trigger cache line bounces. We can see this in tx or tx/rx workloads (media gateways for example), where sock_wfree() can be in top five functions in profiles. We use this sock_hold()/sock_put() so that sock freeing is delayed until all tx packets are completed. As we also update sk_wmem_alloc, we could offset sk_wmem_alloc by one unit at init time, until sk_free() is called. Once sk_free() is called, we atomic_dec_and_test(sk_wmem_alloc) to decrement initial offset and atomicaly check if any packets are in flight. skb_set_owner_w() doesnt call sock_hold() anymore sock_wfree() doesnt call sock_put() anymore, but check if sk_wmem_alloc reached 0 to perform the final freeing. Drawback is that a skb->truesize error could lead to unfreeable sockets, or even worse, prematurely calling __sk_free() on a live socket. Nice speedups on SMP. tbench for example, going from 2691 MB/s to 2711 MB/s on my 8 cpu dev machine, even if tbench was not really hitting sk_refcnt contention point. 5 % speedup on a UDP transmit workload (depends on number of flows), lowering TX completion cpu usage. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | netxen: No need to check vfree() pointer.Figo.zhang2009-06-111-6/+3Star
| | | | | | | | | | | | | | | | | | | | | | | | vfree() does its own 'NULL' check, so no need for check before calling it. Signed-off-by: Figo.zhang <figo1802@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | be2net: Fix be_tx_q_clean() being called on freed queuesSathya Perla2009-06-111-5/+6
| | | | | | | | | | | | | | | | | | | | | In the tx queue destroy path, be_tx_q_clean() is currently called after the tx queues are freed; it must be called before. Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | be2net: Fix early reset of rx-completionSathya Perla2009-06-111-2/+12
| | | | | | | | | | | | | | | | | | | | | be_rx_compl_get() must not reset(via the valid word) the rx_compl as the rx_compl is not processed yet; it must be reset after it is processed. Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | be2net: Fix rx stats updation in non-lro pathSathya Perla2009-06-111-1/+2
| | | | | | | | | | | | | | | | | | | | | rx stats are not getting updated when an rx_compl with only one frag is rcvd in non-lro path. Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | be2net: fix netdev stats rx_errors and rx_droppedSathya Perla2009-06-111-14/+29
| | | | | | | | | | | | | | | | | | | | | Fix netdev stat rx_errors to cover length related errors and checksum errors and rx_dropped to the pkts dropped due to lack of buffers Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | be2net: Use cancel_delayed_work_sync instead of cancel_delayed_work()Sathya Perla2009-06-111-1/+1
| | | | | | | | | | | | | | | | | | | | | Use cancel_delayed_work_sycn instead of cancel_delayed_work() to reliably kill be_worker() as it rearms itself. Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
* | | tehuti: No need check vfree() pointer.Figo.zhang2009-06-111-6/+3Star
| | | | | | | | | | | | | | | | | | | | | | | | vfree() does its own 'NULL' check, so no need for check before calling it. Signed-off-by: Figo.zhang <figo1802@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>