# US 9,003,247 B2 · Remapping data with pointer

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,003,247 B2
- Document ID: US9003247B2
- Status: Granted
- Kind: B2
- Application number: 13/066,976
- Filed: 2011-04-28
- Published: 2012-11-01
- Granted: 2015-04-07
- Earliest claimed: 2011-04-28
- Assignees: Hewlett-Packard Development Company, L.P.
- Applicants: Naveen Muralimanohar; Doe Hyun Yoon; Jichuan Chang; Parthasarathy Ranganathan; Norman Paul Jouppi
- Inventors: Naveen Muralimanohar; Doe Hyun Yoon; Jichuan Chang; Parthasarathy Ranganathan; Norman Paul Jouppi
- Web page: https://patentgrep.com/patent/US9003247B2

## CPC

- G06F 11/20: using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G11C 29/76: {using address translation or modifications}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G11C: STATIC STORES (semiconductor memory devices H10B)

## Abstract

Embodiments herein relate to a method for remapping data. In an embodiment, it is determined if a first memory block is faulty. A pointer is stored to the first memory block and a pointer flag of the first memory block is set when the first memory block is faulty. Data previously stored at the first memory block is written to a second memory block, where the pointer points to a location of the second memory block.

## Claims

### Claim 1

A method for remapping data, comprising:
determining if a first memory block of a plurality of memory blocks of a memory is faulty such that the first memory block includes a plurality of defective memory cells and a plurality of non-defective memory cells, where each of the plurality of memory blocks includes a pointer flag to indicate whether data or a pointer is stored in each of the plurality of memory blocks;
in response to determining that the first memory block is faulty, storing within the non-defective memory cells of the first memory block and not within the defective memory cells of the first memory block a first pointer and at least one copy of the first pointer, the first memory block having sufficient non-defective memory cells to store the first pointer and the at least one copy of the first pointer;
setting the pointer flag of the first memory block when the first memory block is faulty, the set pointer flag of the first memory block to indicate that the first memory block stores information related to a pointer and not to data;
writing first data to a random second memory block of the plurality of memory blocks when the first memory block is faulty, the first data previously stored at the first memory block, wherein the first pointer points to a location of the second memory block; and
continuously updating the first pointer of the first memory block to point to a most current location where the first data is last stored, when the first data is stored at a random location other than second memory block after a repeated remapping.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
determining if the second memory block is faulty;
storing a second pointer to at least one of the plurality of cells of the second memory block when the second memory block is faulty;
setting the pointer flag of the second memory block when the second memory block is faulty; and
writing the first data to a random third memory block of the plurality of memory blocks when the second memory block is faulty, wherein
the second pointer points to a location of the third memory block.

### Claim 3 (depends on 2)

The method of claim 2, further comprising:
storing the second pointer to at least one of the plurality of cells of the first memory block when the second memory block is faulty.

### Claim 4 (depends on 3)

The method of claim 3, further comprising:
receiving a request to access the first data;
accessing the first memory block; and
accessing the third memory block to read the first data based on the accessed first memory block, wherein
the accessing does not access at least one of the first and second memory blocks before accessing the third memory block.

### Claim 5 (depends on 2)

The method of claim 2, further comprising:
storing at least one of the first and second pointers in a cache; and
reading the at least one of the first and second cached pointers when accessing the first data, wherein
the first and second memory blocks are not accessed to read the first data.

### Claim 6 (depends on 5)

The method of claim 5, further comprising:
hashing address locations of at least one of the second and third memory blocks to calculate the at least one of the first and second stored pointers based on a location of at least one of the first and second memory blocks within at least one page of a plurality of pages, each of the plurality of memory blocks being grouped into one of the plurality of pages.

### Claim 7 (depends on 1)

The method of claim 1, wherein the determining if the first memory block is faulty includes,
first detecting a number of bit errors of the first data stored at the first memory block, wherein
the first memory block is not faulty if the number of bit errors is less than an error threshold.

### Claim 8 (depends on 7)

The method of claim 7, wherein the determining if the first memory block is faulty further includes,
writing the first data to the first memory block if the number of bit errors is greater than or equal to the error threshold;
reading the written first data from the first memory block; and
second detecting a number of bit errors of the first data stored at the first memory block, wherein
the first memory block is faulty if the number of bit errors is greater than equal to the error threshold.

### Claim 9 (depends on 1)

The method of claim 1, wherein the storing stores at least one of duplicates of the first pointer and error checking and correcting (ECC) information to the first memory block.

### Claim 10 (depends on 1)

The method of claim 1, further comprising:
receiving at least one of a read and write command for one of the plurality of memory blocks;
reading the pointer flag of the one of the plurality of memory blocks; and
at least one of reading data from and writing data to the one of the plurality of memory blocks when the pointer flag of another of the plurality of memory blocks is not set.

### Claim 11 (depends on 1)

The method of claim 1, further comprising:
reading a pointer of the one of the plurality of memory blocks when the pointer flag is set;
decoding a location pointed to by the pointer of the one of the plurality of memory blocks when the pointer flag is set; and
accessing the location pointed to by the pointer of the one of the plurality of memory blocks when the pointer flag is set.

### Claim 12

A memory system, comprising:
a memory including a plurality of memory blocks having a plurality of cells, each of the plurality of memory blocks includes a pointer flag to indicate whether data or a pointer is stored in each of the plurality of memory blocks; and
a controller to,
determine if a first memory block of the plurality of memory blocks is faulty such that the first memory block includes a plurality of defective memory cells and a plurality of non-defective memory cells,
in response to determining that the first memory block is faulty, store within the non-defective memory cells of the first memory block and not within the defective memory cells of the first memory block a first pointer and at least one copy of the first pointer, the first memory block having sufficient non-defective memory cells to store the first pointer and the at least one copy of the first pointer,
set the pointer flag of the first memory block when the first memory block is faulty, the set pointer flag of the first memory block to indicate that the first memory block stores information related to a pointer and not to data,
write first data to a random second memory block of the plurality of memory blocks when the first memory block is faulty, the first data previously stored at the first memory block, wherein the first pointer points to the second memory block, and
continuously update the first pointer of the first memory block to point to a most current location where the first data is last stored when the first data is stored at a random location other than second memory block after a repeated remapping.

### Claim 13 (depends on 12)

The memory system of claim 12, wherein,
the controller is to read the pointer flag of a third memory block of the plurality of memory blocks before at least one of writing data to and reading data from the third memory block, and
the memory controller includes,
a decoder to decode a location pointed to by the first pointer, and
a cache to at least one of store the location pointed to by the first pointer for the first data and to calculate a location pointed to by the first pointer for the first data.

### Claim 14 (depends on 12)

The memory system of claim 12, wherein the controller is to store at least one of duplicates of the first pointer and error checking and correcting (ECC) information to the first memory block.
