/* * Copyright (c) 2000-2006 Silicon Graphics, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __XFS_SUPPORT_MRLOCK_H__ #define __XFS_SUPPORT_MRLOCK_H__ #include typedef struct { struct rw_semaphore mr_lock; #if defined(DEBUG) || defined(XFS_WARN) int mr_writer; #endif } mrlock_t; #if defined(DEBUG) || defined(XFS_WARN) #define mrinit(mrp, name) \ do { (mrp)->mr_writer = 0; init_rwsem(&(mrp)->mr_lock); } while (0) #else #define mrinit(mrp, name) \ do { init_rwsem(&(mrp)->mr_lock); } while (0) #endif #define mrlock_init(mrp, t,n,s) mrinit(mrp, n) #define mrfree(mrp) do { } while (0) static inline void mraccess_nested(mrlock_t *mrp, int subclass) { down_read_nested(&mrp->mr_lock, subclass); } static inline void mrupdate_nested(mrlock_t *mrp, int subclass) { down_write_nested(&mrp->mr_lock, subclass); #if defined(DEBUG) || defined(XFS_WARN) mrp->mr_writer = 1; #endif } static inline int mrtryaccess(mrlock_t *mrp) { return down_read_trylock(&mrp->mr_lock); } static inline int mrtryupdate(mrlock_t *mrp) { if (!down_write_trylock(&mrp->mr_lock)) return 0; #if defined(DEBUG) || defined(XFS_WARN) mrp->mr_writer = 1; #endif return 1; } static inline void mrunlock_excl(mrlock_t *mrp) { #if defined(DEBUG) || defined(XFS_WARN) mrp->mr_writer = 0; #endif up_write(&mrp->mr_lock); } static inline void mrunlock_shared(mrlock_t *mrp) { up_read(&mrp->mr_lock); } static inline void mrdemote(mrlock_t *mrp) { #if defined(DEBUG) || defined(XFS_WARN) mrp->mr_writer = 0; #endif downgrade_write(&mrp->mr_lock); } #endif /* __XFS_SUPPORT_MRLOCK_H__ */ ='author'>author
diff options
context:
space:
mode:
authorPetko Manolov <petkan@mip-labs.com>2016-04-27 14:24:50 +0300
committerDavid S. Miller <davem@davemloft.net>2016-04-28 17:05:25 -0400
commit1a8deec09d12c1a2946f131aa171d5e0479333de (patch)
tree465c0b98808107b3ae615b13cdc87671d7935a21
parentb7302ca05871e50208bc328cbc8199a21f5d876e (diff)
pegasus: fixes reported packet length
The default Pegasus setup was to append the status and CRC at the end of each received packet. The status bits are used to update various stats, but CRC has been ignored. The new default is to not append CRC at the end of RX packets. Signed-off-by: Petko Manolov <petkan@mip-labs.com> Signed-off-by: David S. Miller <davem@davemloft.net>