diff options
author | Robert Love <robert.w.love@intel.com> | 2009-03-31 18:51:50 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-04-03 10:22:58 -0400 |
commit | 582b45bc577f78b5bfff3db874594ce2d962b846 (patch) | |
tree | b0cfe95b235aeca9b967cba8446db58b8a102533 /include/scsi | |
parent | 5e5e92df49d4dfbef9ba981297c7f76d189376ac (diff) |
[SCSI] fcoe: Use per-CPU kernel function for dev_stats instead of an array
Remove the hotplug creation of dev_stats, we allocate for all possible CPUs
now when we allocate the lport.
v2: Durring the 2.6.30 merge window, before these patches were comitted,
'percpu_ptr' was renamed 'per_cpu_ptr'. This latest update updates this
patch for the name change.
Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/libfc.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index a70eafaad084..4e1d394348cf 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <linux/timer.h> | 23 | #include <linux/timer.h> |
24 | #include <linux/if.h> | 24 | #include <linux/if.h> |
25 | #include <linux/percpu.h> | ||
25 | 26 | ||
26 | #include <scsi/scsi_transport.h> | 27 | #include <scsi/scsi_transport.h> |
27 | #include <scsi/scsi_transport_fc.h> | 28 | #include <scsi/scsi_transport_fc.h> |
@@ -661,7 +662,8 @@ struct fc_lport { | |||
661 | unsigned long boot_time; | 662 | unsigned long boot_time; |
662 | 663 | ||
663 | struct fc_host_statistics host_stats; | 664 | struct fc_host_statistics host_stats; |
664 | struct fcoe_dev_stats *dev_stats[NR_CPUS]; | 665 | struct fcoe_dev_stats *dev_stats; |
666 | |||
665 | u64 wwpn; | 667 | u64 wwpn; |
666 | u64 wwnn; | 668 | u64 wwnn; |
667 | u8 retry_count; | 669 | u8 retry_count; |
@@ -722,6 +724,25 @@ static inline void fc_lport_state_enter(struct fc_lport *lp, | |||
722 | lp->state = state; | 724 | lp->state = state; |
723 | } | 725 | } |
724 | 726 | ||
727 | static inline int fc_lport_init_stats(struct fc_lport *lp) | ||
728 | { | ||
729 | /* allocate per cpu stats block */ | ||
730 | lp->dev_stats = alloc_percpu(struct fcoe_dev_stats); | ||
731 | if (!lp->dev_stats) | ||
732 | return -ENOMEM; | ||
733 | return 0; | ||
734 | } | ||
735 | |||
736 | static inline void fc_lport_free_stats(struct fc_lport *lp) | ||
737 | { | ||
738 | free_percpu(lp->dev_stats); | ||
739 | } | ||
740 | |||
741 | static inline struct fcoe_dev_stats *fc_lport_get_stats(struct fc_lport *lp) | ||
742 | { | ||
743 | return per_cpu_ptr(lp->dev_stats, smp_processor_id()); | ||
744 | } | ||
745 | |||
725 | 746 | ||
726 | /* | 747 | /* |
727 | * LOCAL PORT LAYER | 748 | * LOCAL PORT LAYER |