--- t/facter-1.5.8/lib/facter/processor.rb 2010-08-27 17:57:21.000000000 -0600 +++ facter-1.5.8/lib/facter/processor.rb 2012-01-04 07:00:54.195528834 -0700 @@ -10,13 +10,52 @@ if Facter.value(:kernel) == "Linux" processor_num = -1 processor_list = [] - Thread::exclusive do - File.readlines("/proc/cpuinfo").each do |l| - if l =~ /processor\s+:\s+(\d+)/ - processor_num = $1.to_i - elsif l =~ /model name\s+:\s+(.*)\s*$/ - processor_list[processor_num] = $1 unless processor_num == -1 - processor_num = -1 + model = Facter.value(:architecture) + case model + when "x86_64", "amd64", "i386", /parisc/, "hppa", "ia64" + Thread::exclusive do + File.readlines("/proc/cpuinfo").each do |l| + if l =~ /processor\s+:\s+(\d+)/ + processor_num = $1.to_i + elsif l =~ /model name\s+:\s+(.*)\s*$/ + processor_list[processor_num] = $1 unless processor_num == -1 + processor_num = -1 + end + end + end + when "ppc64" + Thread::exclusive do + File.readlines("/proc/cpuinfo").each do |l| + if l =~ /processor\s+:\s+(\d+)/ + processor_num = $1.to_i + elsif l =~ /cpu\s+:\s+(.*)\s*$/ + processor_list[processor_num] = $1 unless processor_num == -1 + processor_num = -1 + end + end + end + when /arm/ + Thread::exclusive do + File.readlines("/proc/cpuinfo").each do |l| + if l =~ /Processor\s+:\s+(.+)/ + processor_num += 1 + processor_list[processor_num] = $1.chomp + elsif l =~ /processor\s+:\s+(\d+)\s*$/ + proc_num = $1.to_i + if proc_num != 0 + processor_num += 1 + processor_list[processor_num] = processor_list[processor_num-1] + end + end + end + end + when /sparc/ + Thread::exclusive do + File.readlines("/proc/cpuinfo").each do |l| + if l =~ /cpu\s+:\s+(.*)\s*$/ + processor_num += 1 + processor_list[processor_num] = $1 + end end end end